Yolov部署在Windows和Android上

Yolov部署在Windows和Android上

前言

Yolov是目标检测的利器,工业中运用得很火。尽管网上的Yolov部署资料很多,但是这块内容目前做得还算上成熟。为了将Yolov部署在Android和Windows上费了些功夫,这里稍微做一些填坑记录。

主要模块

  1. OpenCV 4.8 ,图像处理
  2. onnx runtime,微软的模型推理模块,支持onnx模型格式
  3. Yolov7,改为单类模型,用于瑕疵检测

尽管OpenCV自带DNN模块,可以加载ONNX模型,但是经过测试,能力非常有限。特别是对于端对端输出的yolov结构,基本不支持。因此这里使用微软的ONNX模型。

主要流程

训练Yolov模型,得到权重文件pt,将pt转换为ONNX模型。这里的转换参数非常重要,为了解析方便,模型直接用端对端编译输出,这样不需要额外做非极大值抑制NMS算法。但是这导致OpenCV的DNN模块无法解析模型。

转换为ONNX

bash 复制代码
python export.py --weights ./runs/train/exp6/weights/best.pt --grid --end2end --simplify --topk-all 10 --iou-thres 0.45 --conf-thres 0.25 --img-size 640 640 

https://netron.app/查看onnx模型结构,可以看到

EfficientNMS_TRT是NMS算法部分,输出结果很清晰,但是ONNX模块不支持,加载模型出错。解决方法是替换NMS模块,利用下面的方式编译

bash 复制代码
python export.py --weights ./runs/train/exp6/weights/best.pt --grid --end2end --simplify --topk-all 10 --iou-thres 0.45 --conf-thres 0.25 --img-size 640 640 --max-wh 640

新模型输出结构如图,完全符合要求。第一个维度代表了检测目标的个数,第二个维度有7个参数,分别是 batch_id,x0,y0,x1,y1,cls_id,score。需要注意的是,对于单类模型,score值是偏低的

如果模型不要求是端对端,估计OpenCV也能支持,就是需要自己准备NMS算法,不是懒人喜欢的方式。

部署代码

部署代码网上很多,这里不再赘述,需要注意的是,解析的代码要和自己的网络结构要一致。

JAVA

参考 https://gitee.com/agricultureiot/yolo-onnx-java

C++

参考 https://github.com/itsnine/yolov5-onnxruntime

里面有现成封装好的类,支持NMS,不过可能需要根据自己的网络输出调整。有好多年没拿起visual studio,感觉还相当怀旧。只是多年未见,C++仍旧是块硬骨头,各种编译问题,光是强硬的类型转换就让人望而生畏。

相关推荐
feasibility.3 小时前
OpenCV图像滤波算法应用:常见滤波器的原理与效果对比(含c++/python代码与中文显示)
c++·opencv·算法
Daydream.V5 小时前
OpenCV——DNN模块实现风格迁移
人工智能·opencv·dnn
qwy7152292581635 小时前
Conda 安装 OpenCV 完整教程(国内镜像极速版)
opencv·计算机视觉·conda
ComputerInBook16 小时前
opencv图像处理——存储结构 Mat (Matrices)
图像处理·人工智能·opencv
Daydream.V16 小时前
OpenCV高端操作——光流估计(附案例)
人工智能·opencv·计算机视觉
格林威1 天前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
格林威1 天前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
格林威1 天前
Baumer相机铝箔表面针孔检测:提升包装阻隔性的 7 个核心策略,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
不懒不懒1 天前
【OpenCV 计算机视觉四大核心实战:从背景建模到目标跟踪】
人工智能·python·opencv·机器学习·计算机视觉
格林威1 天前
Baumer相机芯片引脚共面性检测:保障电子装配精度的 5 个实用方案,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·opencv·计算机视觉·c#·视觉检测·工业相机