16

Fast/Faster-RCNN と Caffe を使用して C++ でオブジェクト検出器を作成する最も簡単な方法は何ですか?

知られているように、RCNN (領域ベースの畳み込みニューラル ネットワーク) を Caffe で使用できます。

scores, boxes = im_detect(net, im, obj_proposals) を呼び出すdef im_detect(net, im, boxes):

このために使用されるrbgirshick/caffe-fast-rcnn、ROIPooling-layers、および出力bbox_pred

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で複製し、pre-tained model をダウンロードし、./data/scripts/fetch_faster_rcnn_models.shこのcoco/VGG16/faster_rcnn_end2end/test.prototxtを使用し、 CaffeNet C++ 分類を少し変更するだけで十分ですか?

bbox_predcls_scoreの 2 つのレイヤーから出力データを取得するにはどうすればよいですか?

すべて (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);
4

1 に答える 1