2011-01-05 41 views
11

Tôi đang làm việc trên ứng dụng C++ sử dụng kỹ thuật thị giác máy tính để xác định các loại đối tượng khác nhau trong một chuỗi hình ảnh. Các hình ảnh (1000+) đã được phân loại bằng tay, vì vậy chúng tôi có tệp XML cho mỗi hình ảnh chứa mô tả về nơi các đối tượng thực sự nằm trong các hình ảnh.Framework/công cụ để xử lý các thử nghiệm đơn vị C++ với đầu ra số

Tôi muốn biết nếu có một khung kiểm tra có thể hiểu/biểu thị kết quả từ các thử nghiệm là số, trong trường hợp này, một số biện pháp của lỗi trong phân loại của chương trình của hình ảnh, thay vì chỉ vượt qua/thất bại phong cách kiểm tra đơn vị.

Chúng tôi muốn sử dụng một cái gì đó như CDash/CTEST để chạy các kiểm tra tự động này và xem theo thời gian các cải tiến cho thuật toán thị giác khiến hình ảnh được phân loại chính xác hơn.

Có ai biết công cụ/khung làm việc này không?

+6

Hy vọng rằng ai đó sẽ mâu thuẫn với tôi, nhưng thường thì trường hợp các khuôn khổ thử nghiệm thường là mục đích chung chung. Vì vậy, họ không cung cấp hỗ trợ cho các loại tính toán cụ thể. Bạn có thể cần phải viết mã của riêng bạn để đánh giá lỗi trong các tính toán được đưa ra câu trả lời đúng. Nếu bạn có thể đo được lỗi, sau đó bạn có thể tạo các thử nghiệm dựa trên việc lỗi có nằm trong dung sai được chỉ định hay không. Sau đó bạn có thể tạo một tập hợp các bài kiểm tra dựa trên dung sai ngày càng chặt chẽ. Điều này sẽ cho phép bạn quan sát xem các cải tiến có làm giảm lỗi trong các phép tính hay không. –

+1

@Bowie Owens: Làm cho nó là một câu trả lời, tôi sẽ bỏ phiếu cho bạn :) – neuro

+0

Phân loại tay bao gồm những gì? Có phân đoạn hoặc hộp giới hạn hoặc thẻ đối tượng không? – nav

Trả lời

6

Tôi nghĩ bạn nên phân biệt giữa đánh giá Đơn vị và thuật toán hiệu suất (= độ chính xác và/hoặc tốc độ). Bạn nên áp dụng cả hai, nhưng riêng biệt.

Kiểm tra đơn vị phải cho bạn biết mã của bạn có thực hiện được không. Không chắc chắn nếu/làm thế nào bạn có thể đơn vị kiểm tra toàn bộ chuỗi từ một hình ảnh thô để trích xuất các đối tượng, nhưng bạn sẽ có thể kiểm tra "đơn vị" (modules/methods/classes) riêng lẻ được kết hợp để thực hiện công việc. Các bài kiểm tra đơn vị sẽ cho bạn "lỗi" hoặc "vượt qua". Nếu tối ưu hóa tốc độ thay đổi hành vi của mã, kiểm tra đơn vị sẽ cho bạn biết điều này. Đối với thử nghiệm đơn vị có rất nhiều khung có sẵn (Tôi thích Google Test, nhưng có nhiều khung công tác khác.)

Câu hỏi của bạn dường như nhắm đến phần thứ hai: đánh giá chất lượng thuật toán của bạn. Cá nhân tôi yêu thích TeamCity chủ yếu được dùng như máy chủ tích hợp liên tục Java/.net, nhưng bạn cũng có thể dễ dàng sử dụng nó với C++. Tôi đã viết một vài dòng mã trong cửa hàng của chúng tôi để xuất kết quả của Google Test theo định dạng TeamCity sử dụng số service API của họ. Mỗi khi ai đó kiểm tra trong một phiên bản mới, TeamCity thực hiện việc xây dựng (có thể là một giải pháp Visual Studio, Ant, kịch bản dòng lệnh hoặc những người khác.) Kết quả được hiển thị cho tất cả các đồng đội thông qua một ui web tốt đẹp. Hơn nữa, bạn có thể báo cáo custom build statistics. Điều này có thể được sử dụng cho bất kỳ thứ gì như kiểm tra hiệu suất của các thuật toán của bạn.Bạn chỉ cần ra một dòng như

##teamcity[buildStatisticValue key='detectedObjectsPercent' value='88.3'] 

trên giao diện điều khiển từ ứng dụng của bạn (mà phải được cấu hình để chạy trong từng xây dựng) và TeamCity sẽ lưu giữ những giá trị và cung cấp một đồ thị đẹp (giá trị theo thời gian) trên người sử dụng web giao diện.

Đừng quên thiết lập biểu đồ tùy chỉnh của bạn như được mô tả here.

Tôi nghĩ TeamCity thực sự rất đơn giản để thiết lập, vì vậy hãy thử dùng! Tôi thậm chí thích nó nếu tôi làm việc trên một dự án chỉ bằng bản thân mình!

+0

+1 để đề cập đến TeamCity, nó thực sự đáng để kiểm tra. Thời gian qua tôi đã kiểm tra họ cung cấp giấy phép miễn phí cho các nhóm lên đến 20 dev. – LaszloG

+0

cảm ơn TeamCity thật dễ dàng để thiết lập, và dường như làm những gì tôi cần khá độc đáo :) –

2

Điều bạn mô tả là khung ứng dụng thử nghiệm xử lý hình ảnh/xử lý hình ảnh điển hình. Mặc dù tôi đã thiết kế và sử dụng một số hệ thống như vậy trong những năm qua, chúng đã/đều là độc quyền.

Một công cụ kiểm tra mục đích chung nên có dung sai thay đổi, các biện pháp khác nhau về lỗi loại I/II và tỷ lệ lỗi, tổng tóm tắt và phân biệt từng trường hợp. Nó cũng sẽ cung cấp các khung nhìn khác nhau cho những người dùng khác nhau - ví dụ, trong khi gỡ rối, một lập trình viên cần các dữ liệu khác với trình quản lý phát hành/dự án.
Một DB điều khiển back-end và thử nghiệm tự động phù hợp với tăng cường với các lô thống kê sẽ là tuyệt vời quá!

Thật không may, tôi không biết về bất kỳ khung kiểm tra nào có sẵn.
Tôi luôn có ý định bắt đầu một dự án mã nguồn mở cho một hệ thống như vậy, nhưng thời gian và nguồn lực khan hiếm, và tôi không bao giờ chắc chắn về sự mong muốn thực sự của một hệ thống như vậy (mặc dù tôi khá chắc chắn rằng nó có thể được thực hiện mục đích chung để đáp ứng nhu cầu của nhiều ứng dụng).
Tôi rất muốn biết nếu có sự quan tâm thực sự trong một hệ thống như vậy, nó có thể lấy bánh xe của dự án này đang di chuyển ... Tôi nghĩ bạn sẽ phải viết mã của riêng bạn vào lúc này.

Các vấn đề liên quan