2016-04-17 22 views
15

Cách đơn giản nhất để tạo bộ dò đối tượng trên C++ với Fast/Faster-RCNN và Caffe là gì?Cách đơn giản nhất để tạo bộ dò đối tượng trên C++ với Fast/Faster-RCNN là gì?

Được biết, chúng ta có thể sử dụng theo RCNN (Region-dựa Convolutional Neural Networks) với Caffe:

scores, boxes = im_detect(net, im, obj_proposals) thực hiện cuộc gọi def im_detect(net, im, boxes):

cho điều này sử dụng rbgirshick/caffe-fast-rcnn, ROIPooling-lớp và đầu ra bbox_pred

scores, boxes = im_detect(net, im) thực hiện cuộc gọi def im_detect(net, im, boxes=None):

cho sử dụng này rbgirshick/caffe-fast-rcnn, ROIPooling lớp và đầu ra bbox_pred

Tất cả đều sử dụng Python và Caffe, nhưng cách thực hiện trên C++ và Caffe?

Chỉ có C++ ví dụ để phân loại (phải nói gì về hình ảnh), nhưng không có cho detecton (phải nói gì và ở đâu trên hình ảnh): https://github.com/BVLC/caffe/tree/master/examples/cpp_classification

Có đủ để chỉ đơn giản là sao chép rbgirshick/py-faster-rcnn kho với rbgirshick/caffe-fast-rcnn, tải xuống mô hình có sẵn ./data/scripts/fetch_faster_rcnn_models.sh, sử dụng coco/VGG16/faster_rcnn_end2end/test.prototxt này và thực hiện thay đổi nhỏ trong CaffeNet C++ Classification example?

Và làm cách nào để lấy dữ liệu đầu ra từ hai lớp bbox_predcls_score?

sẽ tôi có đầy đủ (bbox_pred & cls_score) trong một mảng:

const vector<Blob<float>*>& output_blobs = net_->ForwardPrefilled(); 
Blob<float>* output_layer = output_blobs[0]; 
    const float* begin = output_layer->cpu_data(); 
    const float* end = begin + output_layer->channels(); 
    std::vector<float> bbox_and_score_array(begin, end); 

Hoặc trong hai mảng?

const vector<Blob<float>*>& output_blobs = net_->ForwardPrefilled(); 

Blob<float>* bbox_output_layer = output_blobs[0]; 
    const float* begin_b = bbox_output_layer ->cpu_data(); 
    const float* end_b = begin_b + bbox_output_layer ->channels(); 
    std::vector<float> bbox_array(begin_b, end_b); 

Blob<float>* score_output_layer = output_blobs[1]; 
    const float* begin_c = score_output_layer ->cpu_data(); 
    const float* end_c = begin_c + score_output_layer ->channels(); 
    std::vector<float> score_array(begin_c, end_c); 
+0

Tôi có cùng một câu hỏi. Thú vị nếu bạn có câu trả lời và thông tin chi tiết bổ sung? Như mục tiêu cuối cùng, tôi muốn có R-CNN nhanh hơn như một dịch vụ với RESTful API chạy trên CPU. Cảm ơn. –

+0

@David Khosid Chưa. Mục tiêu của tôi là độ chính xác tối đa, và tôi muốn sử dụng RCSTER nhanh hơn với ResNet MSRA đã giành được trên ImageNet. Sử dụng CPU cho DNN không phải là ý tưởng hay, nhưng với tốc độ tối đa, bạn có thể xem mô hình Tiny Darknet Yolo dựa trên darknet.conv.weights. Hoặc có thể là SSD300: https://github.com/weiliu89/caffe/tree/ssd – Alex

+0

Hey @Alex Bạn có tìm thấy câu trả lời không?Tôi cũng quan tâm đến chủ đề của bạn :) Cảm ơn! – lilouch

Trả lời

1

cho những người bạn vẫn đang tìm kiếm, có phiên bản C++ nhanh hơn RCNN với caffe trong project này. Bạn thậm chí có thể tìm thấy một api C++ để đưa nó vào dự án của bạn. Tôi đã thử nghiệm thành công nó.

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