Fast/Faster-RCNNとCaffeを使用してC++でオブジェクト検出器を作成する最も簡単な方法は何ですか?
知られているように、Caffeでfollow RCNN(Region-based Convolutional Neural Networks)を使用できます。
[〜#〜] 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およびoutput bbox_pred
scores, boxes = im_detect(net, im)
を呼び出すdef im_detect(net, im, boxes=None):
これに使用される rbgirshick/caffe-fast-rcnn 、ROIPooling-layersおよびoutput bbox_pred
これらはすべてPythonとCaffeを使用しますが、C++とCaffeでそれを行う方法は?
分類(画像の何を言うか)のC++の例だけがありますが、detecton(画像の何をどこで言うか)の例はありません: 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++分類例 ?
そして、どうすれば2つのレイヤーから出力データを取得できますか bbox_pred と cls_score ?
すべて(bbox_predとcls_score)を1つの配列に入れますか?
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);
または2つの配列で?
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);
まだそれを探している人のために、これにはカフェ付きのより高速なRCNNのC++バージョンがあります プロジェクト 。プロジェクトに含めるためのc ++ apiを見つけることもできます。私はそれを首尾よくテストしました。