yolov5平台模型格式转换&安卓端部署完整记录

0 效果演示:

在这里插入图片描述
Android Studio安装教程

1具体部署方案

  • ONNX:该模型格式可以在不同的平台所需的模型格式之间进行转化
  • CoreML:该格式的模型可以部署到Apple上,那至少需要有苹果两件套(iphone和Mac),前者作为部署端,后者用于开发苹果应用程序
  • TFLite:Google的轻量级推理库,这种TensorFLow Lite格式的模型文件可以部署到基于Android的移动端上,这也是最理想的一种方式

模型转换方法

方法一 yolov5官方的转换方法:

PyTorch > ONNX > CoreML > TFLite,最后从原始训练得到的pt模型文件转化为mlmodel、onnx和torchscript.pt
在这里插入图片描述
在这里插入图片描述

方法二

直接转换,参考链接,同样是使用yolov5的export.py导出,不过更加清晰直观
在这里插入图片描述
此方法为
zldrobit在yolov5官方的issue提出,现在已内置到yolov5,参见方法一;
建议直接使用yolov5官方进行模型转换

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
#安装所需要的库
pip install -r requirements.txt  # install
pip install tensorflow==2.4.0
#运行yolov5/models路径下的tf.py
python export.py --weights yolov5s.pt --include tflite --img 320

部署

在这里插入图片描述

Android Studio安装

安装教程(最新版,如果你是第一次安装,跟着这篇教程走),重装请务必卸载干净
卸载参考我的另外一篇文章

使用Android Studio打开前面用的zldrobit仓库中的Android文件夹

在这里插入图片描述

3 打开后Android Studio,自动下载需要的依赖,选择虚拟机机型(或直接使用手机开发者选项,打开USB调试)

在这里插入图片描述

标签文件.txt需根据自己的数据集标签进行制作,这里使用默认的coco数据集对应的txt文件
在这里插入图片描述
将这两个模型文件放到assets文件下
接下来用USB连接PC和Android手机,一般需要打开手机的开发者模式才能被Android Studio检测到。若成功检测到,则点击运行,app会下载到手机上,最终成功安装

Android Studio详细开发教程(java):yolov5 tflite量化原理及android部署详解
核心内容概括:

1 yolov5 tflite

(1)demo演示
在这里插入图片描述
(2)tflite量化原理

(3)tflite量化导出, 模型文件细节

3.2 Android部署(以摄像头检测为例)

(1)android部署整体流程
(2)相关依赖
(3)模型加载,输入与输出定义
(4)NNAPI代理,gpu代理,多线程加速
(5)tflite task和support的区别
(6)布局文件示例
(7)cameraX 摄像头数据细节
(8)摄像头逐帧分析器
(9)异步计算,避免UI刷新卡顿

3.3 替换自己的yolov5模型

(1)assert文件替换

  • 导出自己的yolov5.tflite模型,建议用yolov5s,同时量化为fp16或者动态范围
  • 定义自己的label.txt文件,每行为一个类名
  • 将label.txt和yolov5.tflite放到assert目录下
    在这里插入图片描述

(2)输入与输出修改

修改以下这4个地方(detetor/Yolov5TFLiteDetector.java):

  • 1 修改input size和output size:

    private final Size INPNUT_SIZE = new Size(320, 320);
    private final int[] OUTPUT_SIZE = new int[]{
          
          1, 6300, 85};
    
  • 2 修改模型名/标签文件名:

    private final String MODEL_YOLOV5S = "yolov5s-fp16-320-metadata.tflite";
    private final String LABEL_FILE = "coco_label.txt";
    
  • 3 如果模型是int8格式,则需要修改input/output的量化参数:

    MetadataExtractor.QuantizationParams input5SINT8QuantParams = new
    MetadataExtractor.QuantizationParams(0.003921568859368563f, 0);
    MetadataExtractor.QuantizationParams output5SINT8QuantParams = new
    MetadataExtractor.QuantizationParams(0.006305381190031767f, 5);
    
  • 4 如果模型是int8格式,还需要修改setModelFile()方法里面:

    case "yolov5s":
    IS_INT8 = true;
    

总结:

如果模型是fp16或者动态量化的,只需要执行1,2步骤
如果模型是int8的,需要执行1,2,3,4步骤

参考链接:
1.在Android上运行YOLOv5目标检测
2.记录历经三天将自己的yolov5模型部署到Android安卓手机
3.YOLOv5学习记录(二): 模型转化及Android端部署
4.yolov5笔记(3)——移动端部署自己的模型(随5.0更新),个人认为是最值得参考的系列文章

猜你喜欢

转载自blog.csdn.net/weixin_48936263/article/details/125516306