通过OpenVINO部署YOLO模型到边缘计算摄像头,其实现路径为:训练(YOLO)->转换(OpenVINO)->部署运行(OpenNCC)。
有关安装详情请参阅 https://github.com/AlexeyAB/darknet#requirements-for-windows-linux-and-macos 。
git clone https://github.com/AlexeyAB/darknetcd darknet
mkdir build_releasecd build_release
cmake ..
cmake --build . --target install --parallel 8
将训练集图片放入train文件夹,以及验证集放入Val文件夹。
git clone https://hub.fastgit.org/AlexeyAB/Yolo_mark.git
cmake .
make
./linux_mark.sh
具体详情参阅Yolo_mark目录下的 README.md。
除了这两个数据集之外,在开始训练之前还需要配置几个参数文件。
cfg和conv文件之间有一定的对应关系。考虑到训练模型最终需要部署在OpenNCC上,建议使用(yolov4 tiny.cfg+yolov4 tiny.conv.29)或(yolov3 tiny.cfg+yolov3 tiny.conv.11)的组合,cfg文件可以直接在darknet/cfg目录中找到。
配置.cfg文件:
搜索cfg文件中所有yolo层的所在位置,如果共有三种类型的目标,将yolo层classes参数定义为3,并将yolo层上一层filters数量定义为24。计算公式为 filters =(classes +5)* 3。
yolov4-tiny.cfg 有两个yolo层, 因此有四个参数需要修改。
如果步骤1.2成功编译, darknet目录下将会自动生成./darknet工具。
输入下面的命令:
./darknet detector train ./obj.data ./yolov4-tiny.cfg ./yolov4-tiny.conv.29 -map
如果GPU低于1080Ti,可能会由于内存不足而出错。此时,需要在cfg的第一层[net]中将批次参数更改为不超过8(8,4,2,1)。
If the training goes well, you can see the training log chart as shown in the figure below.
在训练结束之后,你可以看到一系列.weights文件。在这里,仍然建议在创建数据集时设置一个验证集,以便验证集中地图的最高权重yolov4-tiny_best.weights可以被直接锁定以供后续使用。
IR是OpenVINO工具包的参考格式。我们将“Darknet”模型转换为带有中间“TensorFlow”和“IR”的“blob”。
在本节中,我们需要使用步骤1.5中创建的 obj.names 和 yolov4-tiny_best.weights 。
git clone https://github.com/RenLuXi/tensorflow-yolov4-tiny.git
cd tensorflow-yolov4-tiny
python convert_weights_pb.py --class_names obj.names --weights_file yolov4-tiny_best.weights --tiny
修改json配置文件:
打开tensorflow-yolov4-tiny目录下的yolo_v4_tiny.json文件,将classes值更改为自己的策略值。OpenVINO需要将该文件来进行TensorFlow转换。
替换json配置文件:
cp ./yolo_v4_tiny.json /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf
进入OpenVINO模型转换工具目录:
cd /opt/intel/openvino/deployment_tools/model_optimizer
转换命令:
python mo.py --input_model yolov4-tiny.pb --transformations_config ./extensions/front/tf/yolo_v4_tiny.json --batch 1 --data_type FP32 --reverse_input_channels
初始化OpenVINO环境,然后将之前创建的XML和bin文件进行转换。
source /opt/intel/openvino_2020.3.194/bin/setupvars.sh
cd /opt/intel/openvino_2020.3.194/deployment_tools/inference_engine/lib/intel64
cp /opt/intel/openvino/deployment_tools/model_optimizer/yolov4-tiny.xml ./
cp /opt/intel/openvino/deployment_tools/model_optimizer/yolov4-tiny.bin ./
/opt/intel/openvino_2020.3.194/deployment_tools/inference_engine/lib/intel64/myriad_compile -m yolov4-tiny.xml -o yolov4-tiny.blob -VPU_MYRIAD_PLATFORM VPU_MYRIAD_2480 -VPU_NUMBER_OF_SHAVES 6 -VPU_NUMBER_OF_CMX_SLICES 6
在本节中,需要将OpenNCC摄像头模块插入PC进行部署。
将XML、bin、blob放入OpenNCC-yolo,有关详细信息可以参阅Github仓库OpenNCC yolo。