树莓派4B+因特尔二代神经棒(NCS2)部署yolov3-tiny错误记录


前言

耗费18天,才终于成功的把自己训练的yolov3-tiny.weights模型成功部署到树莓派上,并用神经棒进行推理,记录这十几天的艰难过程,为后来者新手减少一点阻力。


一、在树莓派上部署Openvino

如果可以的话。请尽量使用intel的官方教程(不需要科学上网),不过官方教程一般是最新版驱动的教程,其他版本的教程网上也有很多,根据需求选择即可。下面我贴出intel的官方教程地址,有需求的自取:
https://docs.openvino.ai/latest/openvino_docs_install_guides_installing_openvino_raspbian.html
https://docs.openvino.ai/latest/openvino_docs_install_guides_configurations_for_ncs2.html
安装包下载地址:
https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html
有其他树莓派Openvino版本需求的进这个地址(版本不全):
https://download.01.org/opencv/

注意:

树莓派版本所使用的Openvino是没有model optimizer的,就是说,你要转换自己的模型,只能去window或者linux下安装openvino进行转换,请保证树莓派和windows(linux)所使用的openvino版本一致,切记,不然即使你模型转换成功了移植到树莓派上也不能使用。我所使用的版本为2021.4.752.我所收集的部分驱动会在文末分享出来。

二、模型转换

1.weights模型转换为pb模型

因为现在Openvino不能直接使用darknet训练出来的weights模型,需要先转换为tensorflow的pb模型,再转换成神经棒的IR模型(xml+bin)才能使用。weights转换pb,官方推荐tensorflow-yolo-v3(我已实测可行),或Openvino-Yolov3,其他教程或多或少也讲过,这里就不多讲了,我所使用的也会放在文末,github上也能下载到。

2.pb模型转换为IR模型

其他教程也讲过,这里也不多讲了,官方教程为:
https://docs.openvino.ai/latest/openvino_docs_MO_DG_prepare_model_convert_model_tf_specific_Convert_YOLO_From_Tensorflow.html

三、模型推理

网上多使用object_detection_sample_ssd或官方使用hello_classification示例,前者是ssd网络,后者是squeezenet网络,如果要使用YOLO,请使用object_detection_demo或multi_channel_object_detection_demo_yolov3,这两个实例在make的时候连接的地址是open-model-zoo的demo,我所使用的open-model-zoo也放在文末
官方教程我放在下面:
https://docs.openvino.ai/2021.4/omz_demos_object_detection_demo_cpp.html
https://docs.openvino.ai/2021.4/omz_demos_multi_channel_object_detection_demo_yolov3_cpp.html

四、问题

[ ERROR ] Output item should have 7 as a last dimension

就是这个diao问题,浪费了我十天时间,当时我还以为实例只是一个名字,结果是ssd网络的实例名,适配ssd,不能使用YOLO,唉,还是学艺不精。请使用第三点我所说的其他两个实例。

[ ERROR ] stoi

转换模型所使用的openvino版本和树莓派版本不一致导致的,使用相同版本即可解决


总结

我所提到的和使用的,均放在下面这个链接,有需求的自取即可:
链接:https://pan.baidu.com/s/1MbIizpVI8TmEdasWNf-7og
提取码:AE86

建议以后遇到什么问题不要在百度这个搜索引擎一棵树上吊死,我是在第十天的时候使用bing查到了,这辈子baidu一生黑,如再遇到什么问题,可以去intel的社区注册一个账号,留言描述问题即可,1天左后会有官方人员回答。

有什么问题,也不要留言问我,99%我也不知道,我也只是个小白,只是希望这些能帮助到哪怕一个人就行了。

最后,记录下我自己使用的几条命令(weights转pb,pb转IR,模型运行,TXT文件装的是训练的类名),防止日后遗忘:

fizz@ubuntu:~/tensorflow-yolo-v3-master$ python3 convert_weights_pb.py --class_names coco1.names --data_format NHWC --weights_file yolov3-tiny_1/yolov3-tiny_1.weights --tiny

fizz@ubuntu:/opt/intel/openvino_2021/deployment_tools/model_optimizer$ sudo python3 mo_tf.py --batch 1 --reverse_input_channels --transformations_config=/home/fizz/OpenVINO-YoloV3-master/yolo_v3_tiny.json --input_model=/home/fizz/OpenVINO-YoloV3-master/yolov3-tiny_1.pb

fizz@ubuntu:~/inference_engine_demos_build$ sudo ./intel64/Release/object_detection_demo -m /home/fizz/OpenVINO-YoloV3-master/yolov3-tiny_1/yolov3-tiny_1.xml -d MYRIAD -i 0 --at=yolo --labels /home/fizz/tensorflow-yolo-v3-master/yolov3-tiny_1/yolov3-tiny.txt

pi@raspberrypi:~/build $ sudo ./armv7l/Release/object_detection_demo -m /home/pi/build/yolov3-tiny_1/yolov3-tiny_1.xml -d MYRIAD -i 0 --at=yolo --labels /home/pi/build/yolov3-tiny_1/yolov3-tiny.txt

你可能感兴趣的:(人工智能,边缘计算,目标检测,计算机视觉)