OpenVINO应用案例:部署YOLO模型到边缘计算摄像头

一、实现路径

通过OpenVINO部署YOLO模型到边缘计算摄像头,其实现路径为:训练(YOLO)->转换(OpenVINO)->部署运行(OpenNCC)。
OpenVINO应用案例:部署YOLO模型到边缘计算摄像头_第1张图片

二、具体步骤

1、训练YOLO模型

1.1 安装环境依赖

有关安装详情请参阅 https://github.com/AlexeyAB/darknet#requirements-for-windows-linux-and-macos 。

1.2 编译训练工具

git clone https://github.com/AlexeyAB/darknetcd darknet
mkdir build_releasecd build_release
cmake ..
cmake --build . --target install --parallel 8

1.3 准备数据集

将训练集图片放入train文件夹,以及验证集放入Val文件夹。

1.4 标记数据集

git clone https://hub.fastgit.org/AlexeyAB/Yolo_mark.git
cmake .
make
./linux_mark.sh

具体详情参阅Yolo_mark目录下的 README.md。

1.5 配置参数文件

除了这两个数据集之外,在开始训练之前还需要配置几个参数文件。

  • obj.data: 其说明了上述所有文件的路径和策略的数量。如果使用自己的数据集,请在标记之前修改相应的参数。
  • obj.name: 该文件包含所有目标类的名称;
  • train.txt:该文件包含所有图片路径,val.txt文件不一定需要。你可以手动从训练文件中分割30%图像以获得认证。
    上述三个文件将在Yolo_mark/x64/Release/data目录下自动生成。
  • yolo.cfg:模型结构参数
  • Yolo.conv:预训练权重

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。
OpenVINO应用案例:部署YOLO模型到边缘计算摄像头_第2张图片
yolov4-tiny.cfg 有两个yolo层, 因此有四个参数需要修改。

1.6 训练

如果步骤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.
OpenVINO应用案例:部署YOLO模型到边缘计算摄像头_第3张图片
在训练结束之后,你可以看到一系列.weights文件。在这里,仍然建议在创建数据集时设置一个验证集,以便验证集中地图的最高权重yolov4-tiny_best.weights可以被直接锁定以供后续使用。

2、转换模型格式

IR是OpenVINO工具包的参考格式。我们将“Darknet”模型转换为带有中间“TensorFlow”和“IR”的“blob”。

2.1 Darknet转换为TensorFlow

在本节中,我们需要使用步骤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

2.2 Tensorflow 转换为 IR

修改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

2.3 IR 转换为 blob

初始化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

3、将模型部署到OpenNCC Edge-AI摄像头模块

在本节中,需要将OpenNCC摄像头模块插入PC进行部署。
OpenVINO应用案例:部署YOLO模型到边缘计算摄像头_第4张图片
将XML、bin、blob放入OpenNCC-yolo,有关详细信息可以参阅Github仓库OpenNCC yolo。

最终结果如下:
OpenVINO应用案例:部署YOLO模型到边缘计算摄像头_第5张图片

你可能感兴趣的:(工具套件,人工智能,openvino)