У меня есть переподготовка крошечной модели yolov3, которую я перевел на ИК-модели, совместимые с Openvino. Я использую вывод этих моделей на ноутбуке, работающем на Intel i7-8750 с NCS2 и Raspberry Pi3, на котором работает NCS2, и я использую API C ++ для этого .. Однако я получаю несоответствие в размерах байтов выходных узлов между две платформы.
Я использую следующий фрагмент кода для чтения больших двоичных объектов и их размеров для создания выходных буферов.
InferenceEngine::InputsDataMap output_info(network.getOutputsInfo());
for (auto &item : output_info) {
auto output_name = item.first;
std::cout<<"Output name :"<<item.first<<std::endl;
auto output = async_infer_request.GetBlob(output_name);
std::cout<<"output buffer size : "<<output->byteSize()<<std::endl;
output_buffer = output->buffer().as<PrecisionTrait<Precision::FP32>::value_type *>();
}
где network - плагин MYRIAD, загруженный с моделями.
На ноутбуке с NCS2 я получаю следующие результаты:
[ INFO ] InferenceEngine:
API version ............ 1.6
Build ..................custom_releases/2019/R1_c9b66a26e4d65bb986bb740e73f58c6e9e84c7c2
[ INFO ] Loading plugin
API version ............ 1.6
Build .................. 22443
Description ....... myriadPlugin
[ INFO ] Loading network files
[ INFO ] Batch size is forced to 1.
[ INFO ] Successfully loaded network files
inputs
inputDims=416 416 3 1
detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion
outputDims=1 18 26 26
detector/yolo-v3-tiny/Conv_9/BiasAdd/YoloRegion
outputDims=1 18 13 13
Output data size : 3042
[ INFO ] Loading model to the plugin
[ INFO ] Loaded model to the plugin
[ INFO ] Creating an inference request from the network
[ INFO ] Created an inference request from the network
Input name :inputs
Input buffer size : 519168
Output name :detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion
output buffer size : 48672
Output name :detector/yolo-v3-tiny/Conv_9/BiasAdd/YoloRegion
output buffer size : 12168
Однако на Raspberry Pi3 я получаю следующее:
[ INFO ] InferenceEngine:
API version ............ 1.6
Build .................. 22443
[ INFO ] Loading plugin
API version ............ 1.6
Build .................. 22443
Description ....... myriadPlugin
[ INFO ] Loading network files
[ INFO ] Batch size is forced to 1.
[ INFO ] Successfully loaded network files
inputs
inputDims=416 416 3 1
detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion
outputDims=1 18 26 26
detector/yolo-v3-tiny/Conv_9/BiasAdd/YoloRegion
outputDims=1 18 13 13
Output data size : 3042
[ INFO ] Loading model to the plugin
[ INFO ] Loaded model to the plugin
[ INFO ] Creating an inference request from the network
[ INFO ] Created an inference request from the network
Input name :inputs
Input buffer size : 519168
Output name :detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion
terminate called after throwing an instance of 'InferenceEngine::details::InferenceEngineException'
what(): The output blob size is not equal to the network output size: got 12168 expecting 11492 /opt/intel/openvino/deployment_tools/inference_engine/include/details/ie_exception_conversion.hpp:71
Aborted
При использовании базовой математики размер выходного большого двоичного объекта на моем ноутбуке соответствует размерам узла 1x18x13x13x4 = 12168 байт, а на Raspberry Pi3 размер сетевого двоичного объекта ожидается в 1x17x13x13x4 = 11492 байт.
Однако та же модель работает нормально, если я использую Python API для запуска вывода из моей модели на том же комбо Raspberry Pi3 и NCS2. Есть ли что-то, что мне не хватает в C ++ API для Raspberry Pi 3.