教程YOLOv5模型转化-Android端部署
Posted _less is more
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程YOLOv5模型转化-Android端部署相关的知识,希望对你有一定的参考价值。
前言
最近做毕设使用到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修复了。
部署流程
-
准备好Android Studio
-
使用Android Studio打开前面用的zldrobit仓库中的Android文件夹,其实是个工程
-
打开后Android Studio会自动下载需要的依赖,如果想用虚拟机仿真一下,自己选择虚拟机机型
- 如果不进行仿真,接下来准备好.tflite模型和对应的标签文件
- 模型文件.tflite由前面转化得到
- 标签文件.txt需根据自己的数据集标签进行制作,因为我要识别的物体类别只有一个,所以标签文件里只有一个类别:ear
- 将这两个模型文件放到assets文件下
- 接下来用USB连接PC和Android手机,一般需要打开手机的开发者模式才能被Android Studio检测到。若成功检测到,则点击运行,app会下载到手机上,最终成功安装
效果展示
最后部署检测的效果如下
若需要使用其他的模型如MobileNet进行识别,可以参考博主的一个仓库,当然也只是换汤不换药而已,只要有数据集,想识别什么都可以
以上是关于教程YOLOv5模型转化-Android端部署的主要内容,如果未能解决你的问题,请参考以下文章
记录历经三天将自己的yolov5模型部署到Android安卓手机