二代神经计算棒NCS2+YOLOv3+ROS加速目标检测

参考:https://www.bilibili.com/video/av98553542/
YOLO v3:DarkNet框架 转 OpenVINO框架

1、 openvino

openvino是英特尔推出的一套基于深度学习的计算机视觉加速优化框架,
用二代神经计算棒NCS2,就从openvino开始。
(NCSDK对应的是NCS1,在这篇博客有一个对比
在这里插入图片描述
可以看到,要用NCS加速要用openvino,而openvino只支持一些特定的框架(不包括yolov3的darknet和pytorch,所以各种模型的转换是很重要的一步)

官网下载工具包,然后配置环境变量,安装一些基本的库,都比较简单,一步一步照着来就可以,官网的教程都非常详细,甚至可以直接看中文版
我是用了linux的版本。
**有一步是装Configure the Model Optimizer, 是装tensorflow的一些依赖项,会报各种奇奇怪怪python、pip等等的错误,各种版本问题,就很迷惑
多谷歌一下吧e.mm

安好以后可以通过简单的例子测试
在这里插入图片描述
神经计算棒
在这里插入图片描述
2代的计算速度有1代的八倍

2、模型转换

(1)将YOLOv3模型转化为tensorflow的pd模型
https://github.com/mystic123/tensorflow-yolo-v3
解析darknet模型并转化
这个跟环境关系可能还挺大的
开始报错
在这里插入图片描述
就奇奇怪怪的错吧
后来重新认真配置了一下环境装了tensorflow
一定要注意版本问题
我成功的环境是
anaconda+python3.6+tensorflow_gpu==1.9.0
要安装Pillow(也就是PIL)
然后运行命令完成.weight–>.pb的转换

python convert_weights_pb.py --weights_file
weight/yolo/yolov3.weights --class_names weight/yolo/obj.labels --tiny True
--size 416 --data_format NHWC --output_graph yolov3.pb

这些参数作者在github上有提到,根据需要改就行,要用神经计算棒一定要改的应该是data_format
在这里插入图片描述
(2)用openvino将tensorflow版本的yolov3转换成可以调用的模型IR(.pb->xml+bin)
(FP16或者FP32不同精度)

python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_shape
[1,416,416,3] -m yolov3.pb --reverse_input_channels
--tensorflow_use_custom_operations_config yolov3.json -n yolov3 --data_type
FP16

在官网有这些参数的解释
要用神经棒二代,需要加载fp16精度的模型,并且把device换成MYRIAD
(3)测试
可以用官方提供的代码,之前可能在在这里插入代码片目录下可以找到,可能版本升级了,反正我是没有
可以用github里opencv提供的Open Model Zoo中的示例代码下
https://github.com/opencv/open_model_zoo/blob/master/demos/python_demos/object_detection_demo_yolov3_async/object_detection_demo_yolov3_async.py

python object_detection_demo_yolov3_async.py -m yolov3.xml -i dog.jpeg -d MYRIAD

Error1

File "/opt/intel/openvino_2020.3.194/python/python3.6/openvino/inference_engine/__init__.py", line 1, in <module>
    from .ie_api import *
ImportError: dynamic module does not define init function (initie_api)

改成python3就好了
Error2

E: [ncAPI] [    742535] [python3] ncDeviceOpen:1003	Failed to find booted device after boot
Traceback (most recent call last):
  File "object_detection_demo_yolov3_async.py", line 359, in <module>
    sys.exit(main() or 0)
  File "object_detection_demo_yolov3_async.py", line 230, in main
    exec_net = ie.load_network(network=net, num_requests=2, device_name=args.device)
  File "ie_api.pyx", line 178, in openvino.inference_engine.ie_api.IECore.load_network
  File "ie_api.pyx", line 187, in openvino.inference_engine.ie_api.IECore.load_network
RuntimeError: Can not init Myriad device: NC_ERROR

运行一下测试文件看available device是啥
在这里插入图片描述
参考前面的安装教程,确认一下MYRIAD安好没有
好好看官方教程!
在除 CPU 之外的其他硬件上运行示例应用时,需要执行额外的硬件配 置步骤
https://software.intel.com/content/www/us/en/develop/articles/get-started-with-neural-compute-stick.html
感觉是硬件问题,从头开始解决
lsusb看能不能识别到
在这里插入图片描述然后参考这篇找到了解决方法,这个迷惑的操作其实我也没太看懂
http://www.jwrr.com/ncs2-1/
但是hello_query_device能看到MYDRAID了
说明这时候可以识别到设备
然后重新硬件配置
重启
然后又识别不到MYDRAID了???

3、推理模型

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页