使用Fast/Faster-RCNN和Caffe在C++上进行对象检测器的最简单方法是什么?

众所周知,我们可以在Caffe中使用Follow RCNN(基于区域的卷积神经网络):

  • RCNN :https://github.com/BVLC/caffe/blob/be163be0ea5befada208dbf0db29e6fa5811dc86/python/caffe/detector.py#L174
  • 快速RCNN :https://github.com/rbgirshick/fast-rcnn/blob/master/tools/demo.py#L89

  • 调用 scores, boxes = im_detect(net, im, obj_proposals) def im_detect(net, im, boxes):
    为此,使用rbgirshick/caffe-fast-rcnn,ROIPooling-layers并输出bbox_pred
  • 更快的RCNN :https://github.com/rbgirshick/py-faster-rcnn/blob/master/tools/demo.py#L82

  • 调用 scores, boxes = im_detect(net, im) def im_detect(net, im, boxes=None):
    为此,使用rbgirshick/caffe-fast-rcnn,ROIPooling-layers并输出bbox_pred

    所有这些都使用Python和Caffe,但是如何在C++和Caffe上实现呢?

    仅存在用于分类的C++示例(说出图像上的内容),但没有检测到的例子(说出图像上的内容和位置):https://github.com/BVLC/caffe/tree/master/examples/cpp_classification

    只需克隆rbgirshick/py-faster-rcnn存储库就足够了
    rbgirshick/caffe-fast-rcnn,下载预先存在的模型./data/scripts/fetch_faster_rcnn_models.sh,使用此coco/VGG16/faster_rcnn_end2end/test.prototxt并在CaffeNet C++ Classification example中做些小改动?

    以及如何从bbox_predcls_score两层获取输出数据?

    我可以将所有(bbox_pred和cls_score)放在一个数组中吗:
    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);
    

    还是分成两个阵列?
    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);
    

    最佳答案

    对于仍在寻找它的那些人,此project中有一个带有caffe的fast-RCNN的C++版本。您甚至可以找到将其包含在项目中的c++ api。我已经成功测试了。

    关于python - 使用Fast/Faster-RCNN在C++上进行对象检测器的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36678375/

    10-09 06:23