树莓派3B+安装系统(Raspbian 9)以及环境配置
【树莓派3b+和 intel movidius 神经元计算棒2代 系列 之一】 安装与部署神经计算棒NCS2
【树莓派3b+和 intel movidius 神经元计算棒2代 系列 之三】 将darknet转的bin和xml文件在树莓派上测试yolo v3和yolo v3 tiny
本系列文章主要目的是在树莓派3b+和神经计算棒上运行yolov3,这个yolov3的模型由darknet训练而来;关于树莓派系统安装,计算棒开发包安装以及例子使用参考上面两篇文章;
接下来文章讲解怎么将darknet训练的.weights模型转为 OpenVINO支持的IR文件;
假设你同我一样安装了开发包 的这个版本(具体为什么选择这个版本在文章中已经提过了~):
l_openvino_toolkit_raspbi_p_2019.1.094.tgz
如果没有现成的,可以从pjreddie网站下载
Yolo V3 COCO weights(237MB),Tiny Yolo V3 COCO weights(34MB) 标签文件 coco.names
OpenVINO不支持直接使用Yolo V3的.weights文件,目前仅支持ONNX、TensorFlow、Caffe和MXNet。需要先把.weights文件转换成TensorFlow的.pb文件。
官方推荐转换工具为: https://github.com/mystic123/tensorflow-yolo-v3
我这边推荐这个仓库:https://github.com/PINTO0309/OpenVINO-YoloV3
这个PINTO0309 哥们做了一大堆树莓派+神经计算棒的对比试验~~
下载了仓库解压,我的目录是C:\Users\chenshaoqi\Desktop\raspberry\OpenVINO-YoloV3-master
运行如下指令:
python convert_weights_pb.py --weights_file yolov3-tiny.weights --tiny True --size 416 --output_graph frozen_darknet_yolov3_tiny_model.pb --data_format NHWC
上面指令是将yolov3-tiny.weights转为pb文件,传的参数:--tiny必须指定True, --data_format 必须是NHWC,否则后面你拿转成功的pb,然后再去转xml和bin,然后做目标检测会遇到此类错误:
[ ERROR ] Cannot infer shapes or values for node "detector/yolo-v3/meshgrid_1/mul_1/YoloRegion".
[ ERROR ] index 2 is out of bounds for axis 0 with size 2
[ ERROR ]
[ ERROR ] It can happen due to bug in custom shape infer function .
[ ERROR ] Or because the node inputs have incorrect values/shapes.
[ ERROR ] Or because input shapes are incorrect (embedded to the model or passed via --input_shape).
[ ERROR ] Run Model Optimizer with --log_level=DEBUG for more information.
[ ERROR ] Stopped shape/value propagation at "detector/yolo-v3/meshgrid_1/mul_1/YoloRegion" node.
For more information please refer to Model Optimizer FAQ (/deployment_tools/documentation/docs/MO_FAQ.html),
错误解析就是数据维度格式不对!参考: https://software.intel.com/en-us/node/802233
所以必须指定数据格式为NHWC (这种格式支持神经计算棒和CPU设备~)
转换yolov3.weights的指令如下:
python convert_weights_pb.py --weights_file yolov3.weights --size 416 --data_format NHWC
会在OpenVINO-YoloV3-master目录下生成frozen_darknet_yolov3_tiny_model.pb 和 frozen_darknet_yolov3_model.pb ;
树莓派中安装的openVINO是阉割版功能不全。所以为了实现tensorflow格式转换成movidius的格式,还得在windows上安装一遍openVINO。安装方法参考:https://blog.csdn.net/qq_36556893/article/details/81385008
接下来就是将pb转 bin和xml了!!
需要我们取Intel官网下载计算机视觉软件开发包,下载地址:https://software.intel.com/en-us/openvino-toolkit/choose-download/free-download-windows ;需要你注册下,然后下载个,下载个Full Package版的(Full Package);
你会得到这么个文件:w_openvino_toolkit_p_2019.1.133.exe
然后点击默认安装即可~~最后你会在 C:\Program Files (x86)\IntelSWTools\openvino_2019.1.133 目录下看到如下文件内容:
你需要用到的是deployment_tools这个文件夹及其内容,将其拷贝出来即可,如下图,我将其拷贝到自己新建的一个文件夹raspberry中了~
运行以下命令(切到deployment_tools所在目录):
转yolov3.pb的指令是:
(base) C:\Users\chenshaoqi\Desktop\raspberry\deployment_tools\model_optimizer>python mo_tf.py --input_model C:\Users\chenshaoqi\Desktop\raspberry\OpenVINO-YoloV3-master\frozen_darknet_yolov3_model.pb --tensorflow_use_custom_operations_config C:\Users\chenshaoqi\Desktop\raspberry\deployment_tools\model_optimizer\extensions\front\tf\yolo_v3.json --input_shape [1,416,416,3] --data_type=FP16
相应文件的路径切换成自己的~需要说明的是树莓派据说支持数据类型是半浮点型的FP16, 官网很多是FP32的是针对PC的;
转yolov3-tiny.pb的指令如下:
(base) C:\Users\chenshaoqi\Desktop\raspberry\deployment_tools\model_optimizer>python mo_tf.py --input_model C:\Users\chenshaoqi\Desktop\raspberry\OpenVINO-YoloV3-master\frozen_darknet_yolov3_tiny_model.pb --tensorflow_use_custom_operations_config C:\Users\chenshaoqi\Desktop\raspberry\deployment_tools\model_optimizer\extensions\front\tf\yolo_v3_tiny.json --input_shape [1,416,416,3] --data_type=FP16
其中yolo_v3_tiny.json内容如下:
[
{
"id": "TFYOLOV3",
"match_kind": "general",
"custom_attributes": {
"classes": 80,
"anchors": [10, 14, 23, 27, 37, 58, 81, 82, 135, 169, 344, 319],
"coords": 4,
"num": 6,
"mask": [0, 1, 2],
"entry_points": ["detector/yolo-v3-tiny/Reshape", "detector/yolo-v3-tiny/Reshape_4"]
}
}
]
coco类别总数80,框坐标是4个,锚点是12个数(2个特征层,每层3个锚点尺寸,每个尺寸两个参数:宽和高),所以num是2x3=6;输出节点名是"detector/yolo-v3-tiny/Reshape", "detector/yolo-v3-tiny/Reshape_4"
其中yolo_v3.json内容如下:
[
{
"id": "TFYOLOV3",
"match_kind": "general",
"custom_attributes": {
"classes": 80,
"coords": 4,
"num": 9,
"mask": [0, 1, 2],
"entry_points": ["detector/yolo-v3/Reshape", "detector/yolo-v3/Reshape_4", "detector/yolo-v3/Reshape_8"]
}
}
]
num=3x3; 输出节点名是:"detector/yolo-v3/Reshape", "detector/yolo-v3/Reshape_4", "detector/yolo-v3/Reshape_8"
执行完上面两个转换指令后会生成如下6个文件:
转换过程中,需要你安装了如下依赖项:
tensorflow>=1.2.0
networkx>=1.11
numpy>=1.12.0
test-generator==0.1.1
defusedxml>=0.5.0
用pip安装就行~(可参考:https://blog.csdn.net/c20081052/article/details/89945575)
至此,完成了darknet转神经计算棒所需的模型文件了~
接下来就是这么使用转换后的模型了。请参考下面系列文章。
【树莓派3b+和 intel movidius 神经元计算棒2代 系列 之三】 将darknet转的bin和xml文件在树莓派上测试yolo v3和yolo v3 tiny
参考:https://blog.csdn.net/LuckyXiaoSu/article/details/87814471
https://blog.csdn.net/weixin_41665225/article/details/86519032
http://itindex.net/detail/59185-%E5%B0%8F%E5%B0%8F-%E7%94%9C%E8%8F%9C-openvino