- 这边文章将介绍基于dnn模块的yolov5 onnx模型的部署 包括读取模型和数据处理和后处理
- 先给出整个项目的源码
- yolov5版本为4.0
- opencv 为 4.5.2
- 使用的模型是自己训练的 类别数为5的模型
- 不同的版本此源码可能会报错 由于opencv版本报错解决办法
- 部署需要一些yolov5的基本知识支持 网上比比皆是
opencv dnn模块的使用
这里并不详细介绍 这里给出一篇详细的dnn模块的使用方法
关于深度学习实时检测的三种方法(三)——Opencv DNN加载ONNX模型
onnx模型导出
具体可以参考yolov5的官方github的Tutorials
- 运行py文件 yolov5-4.0/models/export.py即可导出onnx
python models/export.py --weights ./weights/yolov5s.pt --img 640 --batch 1
onnx模型分析
- 可以使用“Netron”这个软件去查看onnx模型的具体网络
-
上图可以看出网络输出有三层 由先到后为
- 1×3×80×80×10
- 1×3×40×40×10
- 1×3×20×20×10
-
10 == 类别数(5) + bbox 的 xywh + confidence
-
80 40 20分别为不同数量的grid cell 用于检测大物体 中物体 小物体
-
3 代表每个grid cell有三个anchor boxs
输出层数据处理
- 代码中每一行都有详细的注释
int n = 0, q = 0, i = 0, j = 0, nout = this->classes.size() + 5, row_ind = 0;
// 遍历三种大小的grid cell
for (n = 0; n < 3; n++)
{
int num_grid_x = (int)(this