Yolov部署在Windows和Android上

本文介绍了如何将Yolov模型部署到Windows和Android平台,包括使用OpenCV4.8和onnxruntime进行图像处理和模型推理,特别关注了从PyTorch模型(.pt)转换为ONNX的过程,以及如何解决NMS模块兼容性问题。还提供了相应的Java和C++部署代码示例。
摘要由CSDN通过智能技术生成

前言

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

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模块,利用下面的方式编译

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++仍旧是块硬骨头,各种编译问题,光是强硬的类型转换就让人望而生畏。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Android Studio将YOLOv5模型部署Android设备上。首先,您需要将YOLOv5模型转换为TensorFlow Lite格式,然后将其添加到Android Studio项目中。接下来,您可以使用Java或Kotlin编写代码来加载模型并在Android设备上运行YOLOv5目标检测。具体的步骤和代码实现可以参考相关的教程和文档。 ### 回答2: 要将YOLOv5部署Android设备上,可以按照以下步骤进行: 1. 安装Android开发环境:确保已安装Java开发工具包(JDK)和Android Studio。这样可以使用Android Studio进行开发和构建。 2. 创建一个新的Android项目:在Android Studio中创建一个新的项目,并选择合适的项目名称和存储位置。 3. 添加YOLOv5模型:将YOLOv5的模型文件(如.weights或.pt文件)添加到Android项目的"assets"文件夹中。 4. 配置项目依赖项:在项目的build.gradle文件中,通过添加相应的依赖项,引入OpenCV和PyTorch库。 5. 配置JNI接口:创建一个JNI(Java Native Interface)接口文件,将其与YOLOv5模型集成。JNI接口可以通过调用本地C/C++代码来连接Java代码和模型。 6. 编写Java代码:编写适当的Java代码以加载YOLOv5模型并进行目标检测。这包括从相机捕获图像,调用JNI接口加载模型并获取检测结果。 7. 构建和打包项目:使用Android Studio进行构建,以生成一个或多个APK文件。确保配置AndroidManifest.xml文件以获取所需的权限和功能。 8. 安装和运行应用程序:将生成的APK文件发送到Android设备,并安装和运行应用程序。确保设备具有足够的性能和存储空间来运行YOLOv5模型。 通过以上步骤,您就可以将YOLOv5成功部署Android设备上,并使用相机进行实时目标检测。请注意,这个过程可能需要一些开发经验,并且可能需要在不同的环境中进行一些调整和修改,以适应您的具体需求和设备。 ### 回答3: 要将YOLOv5部署Android设备上,可以按照以下步骤进行操作: 首先,需要将YOLOv5模型转换为适用于Android设备的格式。可以使用ONNX或TFLite等工具将模型从PyTorch转换为可在Android上运行的格式。 接下来,创建一个Android项目,并将转换后的模型文件添加到项目中。 在Android项目中,需要使用相关的深度学习推理库,如TensorFlow Lite或NCNN。这些库支持在Android设备上运行深度学习模型。可以根据自己的需求选择合适的库,并将其集成到Android项目中。 然后,在Android项目中编写代码,加载转换后的模型,并使用深度学习推理库进行目标检测。可以使用相机API或视频流作为输入,对每一帧进行目标检测,并将检测结果显示在屏幕上。 为了提高目标检测的性能,可以使用一些优化技术。例如,可以使用图像预处理技术对输入图像进行调整和裁剪,以提高模型的准确性和速度。此外,还可以使用硬件加速技术,如GPU或NEON指令集,来加速推理过程。 最后,将整个Android项目构建为一个APK文件,并安装到Android设备上进行测试。可以在实际场景中测试模型的性能和准确性,并根据需要进行调整和优化。 总的来说,将YOLOv5部署Android设备上需要进行模型转换、库集成、代码编写和优化等步骤。这些步骤确保了将YOLOv5成功部署Android设备上,并实现在移动设备上进行实时目标检测的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值