Что является самым простым способом сделать детектор объектов на C ++ с Fast / Faster-RCNN?

Как проще всего сделать детектор объектов на C ++ с помощью Fast / Faster-RCNN и Caffe?

Как известно, мы можем использовать следующие RCNN (региональные сверточные нейронные сети) с Caffe:

scores, boxes = im_detect(net, im, obj_proposals) который призывает def im_detect(net, im, boxes):

для этого использовали rbgirshick / кофейная-быстро rcnn, ROIPooling-слои и вывод bbox_pred

scores, boxes = im_detect(net, im) который призывает def im_detect(net, im, boxes=None):

для этого использовали rbgirshick / кофейная-быстро rcnn, ROIPooling-слои и вывод bbox_pred

Все они используют Python и Caffe, но как это сделать на C ++ и Caffe?

Существует только пример C ++ для классификации (чтобы сказать, что на изображении), но не для обнаружения (чтобы сказать что и где на изображении): https://github.com/BVLC/caffe/tree/master/examples/cpp_classification

Достаточно ли просто клонировать rbgirshick / р-быстрее-rcnn хранилище с
rbgirshick / кофейная-быстро rcnn, скачать предустановленную модель ./data/scripts/fetch_faster_rcnn_models.sh, использовать этот кокосовый / VGG16 / faster_rcnn_end2end / test.prototxt и сделал небольшое изменение в Пример классификации CaffeNet C ++?

И как я могу получить выходные данные из двух слоев bbox_pred а также cls_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);

16

Решение

для тех из вас, кто все еще ищет его, есть версия C ++ более быстрого RCNN с caffe в этом проект. Вы даже можете найти API C ++, чтобы включить его в свой проект. Я успешно проверил это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]