Yolov5s 6 版模型训练设置与Tengine npu推理部署

一、目标:训练输出img_size=640 的16、32、64倍降采样模型,并实现rv1126npu推理;

二、模型修改与训练

1、u版githubultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite (github.com)https://github.com/ultralytics/yolov5

2、train.py

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第1张图片

 从models/hub/中拷贝一份yolov5s6.yaml到models下,尽量少在原文件修改。修改如下

 Yolov5s 6 版模型训练设置与Tengine npu推理部署_第2张图片

 修改类别nc和anchors,原文件为四组,这里修改为三组,保留16、32、64倍降采样输出。

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第3张图片

head的最下面修改检测头,同样保留三个。删除原文件第一个。

 三、pt模型转tmfile

3.1 pt模型转onnx

export.py需要将--train  = True     --opset = 11

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第4张图片

 3.2、onnx转Tengine tmfile模型

自行参考Tengine-lite  GitHub官网

3.3 onnx转换前使用yolov5s-opt.py进行模型优化,实现一个算子替换。替换后推理速度有明显提升。

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第5张图片

 替换前后模型结构如下:

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第6张图片Yolov5s 6 版模型训练设置与Tengine npu推理部署_第7张图片

两种激活函数如下:

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第8张图片

3.4、onnx 转tmfile  参考Tengine官网教程

3.5、模型量化  参考Tengine官网教程

./tools/quantize/quant_tool_uint8 -m best-opt.tmfile -i imgs/ -o best-opt-uint8.tmfile -g 3,640,640    -w 0,0,0 -s 0.003921,0.003921,0.003921 -c 0 -t 1 -y 640,640

imgs中存放图片,用于计算量化时的截断参数;

四、模型的部署

参考Tengine官方github,修改tm_yolov5s_timvx.cpp即可实现。这里需要注意anchors的具体值需要从yolov5的detect.py中获取,具体方式为:

使用debug detect.py检测过程,在yolo.py中打断点,查看anchor_grid变量。

Yolov5s 6 版模型训练设置与Tengine npu推理部署_第9张图片

到此,模型边可以在npu中进行推理了。rv1126 为2t的算力,推理时间在131ms左右。

这里anchors得尺寸推理和训练是不同,是什么原因导致得还得进一步看源码才知道,短时间内可以这样偷懒解决。

你可能感兴趣的:(深度学习,人工智能)