前言

最近做毕设使用到yolov5,该模型为ultralytics公司的一个开源产品,由Glenn大佬实现,有很多合作的开发者参与了该项目,开发迭代速度非常快,三天两头就有更新。为了实现一个完整的毕业设计流程,就需要实现YOLOv5模型的训练、验证到最终的落地,也就是部署。

训练相对简单,只需要跟着官方教程即可,根据特定数据集进行预处理并训练👉👉链接

在这里插入图片描述
训练并验证后则需要考虑部署,具体部署方案有:

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

转化方法

官方的转化方法

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

不过要想从这三种模型进行二次转化为**.tflite**可不容易,博主尝试过很多种方法,但最终无果,也不是走投无路,就是转累了。。。

合作者的转化方法

那时我开始思考,官方明明白白地写了是PyTorch > ONNX > CoreML > TFLite,为什么最后没有.tflite模型文件呢,难不成上当了?其实没有,大佬zldrobit已经写出了转化代码,其pull request👉链接,该仓库的代码根据YOLOv5的发展也在改进,唯一不同的是增加了tflite转化的代码

博主在colab平台进行如下操作,具体使用方法如下:

  • 在👉链接处将代码库下载下来
!git clone https://github.com/zldrobit/yolov5.git
%cd yolov5
!git checkout tf-android # 或者tf-only-export
  • 安装所需要的库
!pip install -r requirements.txt
!pip install tensorflow==2.4.0
  • 运行yolov5/models路径下的tf.py代码即可
!python models/tf.py --weights weights/yolov5s.pt --cfg models/yolov5s.yaml --img 320

这样就能得到fp16的.tflite模型,若需要Int8的,则用如下命令

!python models/tf.py --weight weights/yolov5s.pt --cfg models/yolov5s.yaml --img 320 --tfl-int8 --source 你的数据集路径 --ncalib 图像数量

转化为int8的需要数据集来进行验证,所以需要添加自己数据集的路径,图像数量为你所用的用于验证的图像数。

转化完成后有如下结果:

在这里插入图片描述

量化

从转化的方式可以看出,其实不仅仅是转化了,还进行了量化,fp16和int8都是量化的结果。其实就是将模型文件中存储的权重参数从Float32转化为fp16或Int8类型,减少计算压力;.pt文件格式转化为.tflite格式,以便Android应用调用。

量化公式贴一贴:

在这里插入图片描述

不过大家没有太多精力也不用去细究,用就对了~

部署

从模型转化到部署大体流程如下:

在这里插入图片描述
其实最开始这个tflite转化的代码是有bug的,导致部署后识别失败,大家感受一下。。。

在这里插入图片描述

识别一堆乱七八糟的,剩我独自风中凌乱。。当时为了找到问题,苦苦思索和debug,最终找到了问题。不过不久后原作者就把bug修复了。

部署流程

  1. 准备好Android Studio
    在这里插入图片描述

  2. 使用Android Studio打开前面用的zldrobit仓库中的Android文件夹,其实是个工程
    在这里插入图片描述

  3. 打开后Android Studio会自动下载需要的依赖,如果想用虚拟机仿真一下,自己选择虚拟机机型

在这里插入图片描述

  1. 如果不进行仿真,接下来准备好.tflite模型和对应的标签文件
  • 模型文件.tflite由前面转化得到
    在这里插入图片描述
  • 标签文件.txt需根据自己的数据集标签进行制作,因为我要识别的物体类别只有一个,所以标签文件里只有一个类别:ear

在这里插入图片描述

  1. 将这两个模型文件放到assets文件下

在这里插入图片描述

  1. 接下来用USB连接PC和Android手机,一般需要打开手机的开发者模式才能被Android Studio检测到。若成功检测到,则点击运行,app会下载到手机上,最终成功安装

效果展示

最后部署检测的效果如下

在这里插入图片描述

若需要使用其他的模型如MobileNet进行识别,可以参考博主的一个仓库,当然也只是换汤不换药而已,只要有数据集,想识别什么都可以

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐