Как проще всего сделать детектор объектов на 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);
для тех из вас, кто все еще ищет его, есть версия C ++ более быстрого RCNN с caffe в этом проект. Вы даже можете найти API C ++, чтобы включить его в свой проект. Я успешно проверил это.
Других решений пока нет …