记录历经三天将自己的yolov5模型部署到Android安卓手机

将yolov5部署到安卓手机移动端

记录历经三天小白将自己的yolov5模型部署到安卓手机

  • 一、前言
  • 二、具体流程
    • (一).部署官方yolo到安卓
      • 1.CMakeLists.txt文件修改
      • 2.sdk相关文件报错问题
      • 3.build.gradle文件
    • (二).转化自己模型
      • 1.导出需要的onnx文件
      • 2.将onnx文件转化成param文件
    • (三).部署自己模型到手机上
      • 1.修改param文件
      • 2.修改yolov5ncnn_jni.cpp文件
  • 三.总结

一、前言

小白一枚,第一次在这上面记录总结,如有不合适的地方,木子接受批评,知错就改,善莫大焉。
直接先上参考文献:
参考视频
参考文章一and文章二


二、具体流程

(一).部署官方yolo到安卓

根据视频的流程,基本可以无障碍的将官方的yolov5训练模型部署到自己的安卓手机上。运行结果如下:
记录历经三天将自己的yolov5模型部署到Android安卓手机_第1张图片
大体流程在视频中大哥已经讲的很好啦,我在这补充一下我踩到过的坑。

1.CMakeLists.txt文件修改

如果你是按照视频中的步骤来的,一定要把下面图中的蓝色部分(前后随便删一个斜杠)删掉!!!
记录历经三天将自己的yolov5模型部署到Android安卓手机_第2张图片记录历经三天将自己的yolov5模型部署到Android安卓手机_第3张图片

2.sdk相关文件报错问题

有时候从网上下载的sdk包版本不同,里面的文件可能有差异,有的包会少东西,可以参考这篇文章。

3.build.gradle文件

其实通过这几天查资料发现,很多运行as的报错问题都和这个gradle版本有关,可以参考一下这篇文章,如果不能解决,自己多搜一下有关gradle报错的文章,一般都是可以解决的,我目前的版本如下:
记录历经三天将自己的yolov5模型部署到Android安卓手机_第4张图片
我遇到的基本问题就是这几个,大家可以看看什么报错多搜一搜总会解决的。

(二).转化自己模型

1.导出需要的onnx文件

本人电脑比较low,只能在谷歌免费的colab上跑模型,所以本小节代码是按照colab语法来的,大家在自己电脑里思路是一样的。
(1)在自己的yolov5环境里装onnx库包

!pip install onnx coremltools onnx-simplifier

(2)使用自带export.py进行转化(之前有的版本可能在model文件下)
执行命令前,修改成自己的weights和date文件及路径,我的如下:
记录历经三天将自己的yolov5模型部署到Android安卓手机_第5张图片
执行export.py,然后会在自己的权重路径下生成一个onnx文件。

!python export.py --train

(3)对onnx文件进行压缩

!python -m onnxsim best.onnx best-sim.onnx

2.将onnx文件转化成param文件

我的转化过程是是在虚拟机Ubuntu上进行的。
相关步骤可以看一下参考文章一,我这里简单复述一下并补充一下文章中没有提到的细节记录一下自己踩过的坑。
(1)首先准备基础环境

sudo apt install build-essential libopencv-dev cmake

编译安装 protobuf 依赖库

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make install
sudo ldconfig

成功之后是可以查看版本号的

protoc --version

记录历经三天将自己的yolov5模型部署到Android安卓手机_第6张图片
(2)下面编译 ncnn,目的是生成 onnx 转 ncnn 的命令行工具

git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build
cd build
cmake ..
make -j8
make install

(3)踩过的坑
像我这样的报错:
记录历经三天将自己的yolov5模型部署到Android安卓手机_第7张图片
执行命令:

sudo apt install autoconf automake 
sudo apt install libtool

这样基本就能解决大部分的错了,基本就是缺啥补啥。
编译安装protobuf和ncnn时间会比较长,我在编译等待期间完成了学习强国的今日任务。
(4)编译完成后,把你的best-sim.onnx文件放在ncnn-master/build/tools/onnx文件夹下,如图:
记录历经三天将自己的yolov5模型部署到Android安卓手机_第8张图片
cd 切换到ncnn-master/build/tools/onnx目录下进行操作

./onnx2ncnn best-sim.onnx yolov5s.param yolov5s.bin

然后你会生成两个文件yolov5s.param和 yolov5s.bin,如图
记录历经三天将自己的yolov5模型部署到Android安卓手机_第9张图片
到这里基本最难的转化过程就差不多了。

(三).部署自己模型到手机上

以下是自己摸索的在yolov5.6.1的版本上进行的,param文件不需要修改很多,没那么麻烦啦。

1.修改param文件

(1)将生成的yolov5s.bin、yolov5s.param文件放到assets文件夹下并替换原来的
记录历经三天将自己的yolov5模型部署到Android安卓手机_第10张图片
(2)打开并编辑yolov5s.param文件
将Reshape 后面对应的0=6400、0=1600、0=400均修改为0=-1,如图
记录历经三天将自己的yolov5模型部署到Android安卓手机_第11张图片
记录历经三天将自己的yolov5模型部署到Android安卓手机_第12张图片

2.修改yolov5ncnn_jni.cpp文件

(1)将分类类别名与自己模型对应起来
记录历经三天将自己的yolov5模型部署到Android安卓手机_第13张图片
(2)修改stride 16和32部分
将param文件中permute部分与stride部分中blob_name后面的数字对应起来

在这里插入图片描述
记录历经三天将自己的yolov5模型部署到Android安卓手机_第14张图片
然后保存运行就可以啦

三.总结

先上图看效果
记录历经三天将自己的yolov5模型部署到Android安卓手机_第15张图片

本来是想查资料把yolo部署到树莓派上,因为学校一直封校,树莓派还没拿到手,就好奇看到了部署到手机上,没想到花了三天时间成了!在这也非常感谢一位山西的网友大佬给我指点了迷津。

大家可以结合我推荐的视频和文章,取其精华、去其糟粕,得到自己想要的东西。大家一定要注意对自己借鉴的代码消化吸收,就好比马克思先生是国外的,但是马克思中国化后的思想却是我们中华民族的瑰宝。

green hand 一枚,第一次发文章,希望能在这个网站上跟大家多多学习,多多交流,互相进步,中华民族的复兴,必定有你也有我!

你可能感兴趣的:(目标检测,Android,android,python,目标检测)