将yolov5部署到安卓手机移动端
小白一枚,第一次在这上面记录总结,如有不合适的地方,木子接受批评,知错就改,善莫大焉。
直接先上参考文献:
参考视频
参考文章一and文章二
根据视频的流程,基本可以无障碍的将官方的yolov5训练模型部署到自己的安卓手机上。运行结果如下:
大体流程在视频中大哥已经讲的很好啦,我在这补充一下我踩到过的坑。
如果你是按照视频中的步骤来的,一定要把下面图中的蓝色部分(前后随便删一个斜杠)删掉!!!
有时候从网上下载的sdk包版本不同,里面的文件可能有差异,有的包会少东西,可以参考这篇文章。
其实通过这几天查资料发现,很多运行as的报错问题都和这个gradle版本有关,可以参考一下这篇文章,如果不能解决,自己多搜一下有关gradle报错的文章,一般都是可以解决的,我目前的版本如下:
我遇到的基本问题就是这几个,大家可以看看什么报错多搜一搜总会解决的。
本人电脑比较low,只能在谷歌免费的colab上跑模型,所以本小节代码是按照colab语法来的,大家在自己电脑里思路是一样的。
(1)在自己的yolov5环境里装onnx库包
!pip install onnx coremltools onnx-simplifier
(2)使用自带export.py进行转化(之前有的版本可能在model文件下)
执行命令前,修改成自己的weights和date文件及路径,我的如下:
执行export.py,然后会在自己的权重路径下生成一个onnx文件。
!python export.py --train
(3)对onnx文件进行压缩
!python -m onnxsim best.onnx best-sim.onnx
我的转化过程是是在虚拟机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
(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
sudo apt install autoconf automake
sudo apt install libtool
这样基本就能解决大部分的错了,基本就是缺啥补啥。
编译安装protobuf和ncnn时间会比较长,我在编译等待期间完成了学习强国的今日任务。
(4)编译完成后,把你的best-sim.onnx文件放在ncnn-master/build/tools/onnx文件夹下,如图:
cd 切换到ncnn-master/build/tools/onnx目录下进行操作
./onnx2ncnn best-sim.onnx yolov5s.param yolov5s.bin
然后你会生成两个文件yolov5s.param和 yolov5s.bin,如图
到这里基本最难的转化过程就差不多了。
以下是自己摸索的在yolov5.6.1的版本上进行的,param文件不需要修改很多,没那么麻烦啦。
(1)将生成的yolov5s.bin、yolov5s.param文件放到assets文件夹下并替换原来的
(2)打开并编辑yolov5s.param文件
将Reshape 后面对应的0=6400、0=1600、0=400均修改为0=-1,如图
(1)将分类类别名与自己模型对应起来
(2)修改stride 16和32部分
将param文件中permute部分与stride部分中blob_name后面的数字对应起来
本来是想查资料把yolo部署到树莓派上,因为学校一直封校,树莓派还没拿到手,就好奇看到了部署到手机上,没想到花了三天时间成了!在这也非常感谢一位山西的网友大佬给我指点了迷津。
大家可以结合我推荐的视频和文章,取其精华、去其糟粕,得到自己想要的东西。大家一定要注意对自己借鉴的代码消化吸收,就好比马克思先生是国外的,但是马克思中国化后的思想却是我们中华民族的瑰宝。
green hand 一枚,第一次发文章,希望能在这个网站上跟大家多多学习,多多交流,互相进步,中华民族的复兴,必定有你也有我!