在Android端部署yolov5

闲来无事,记录一下自己在安卓端部署yolov5的步骤,历时一天

不想部署想直接拿来玩玩的,可以直接下载手机软件: 

下载链接1: https://download.csdn.net/download/qq_45077760/87629448

下载链接2:https://github.com/up-up-up-up/data/releases/tag/yolov5%E9%83%A8%E7%BD%B2%E5%AE%89%E5%8D%93%E7%AB%AFapk

1.pt文件转onnx 

我用的是自己训练的权重文件,版本是6.1版本,直接执行以下代码对我的权重文件best.pt进行转化。过程可能会报错,如果报错就安装相应的库文件,一般是”no moudle named onnx”,直接pip install onnx==1.7.0;因为如果直接装onnx,可能还是会报错,所以直接装1.7.0的onnx

python export.py --weights best.pt

转换之前记住一个细节问题!!!记得把train这里加上True。一定要注意,要不下边步骤会报错

执行完以上步骤,你会得到对应的best.onnx文件,这里我把名字best.onnx直接改成yolov5s.onnx,方便讲解

2.onnx文件转bin和param文件

2.1 直接使用工具转化 

这里网上有很多方法,但是都需要配置环境,这里要感谢一个github博主,他直接做了一个转换界面,太厉害了,网址附上:https://convertmodel.com/

点击进入界面,把你的onnx文件放入,记得步骤1转换时候加上 default=True,要不这里转换会报错,成功转换界面如下,如果出现红色就代表转换失败

 转换后会生成两个文件,点击下载生成的两个文件:yolov5s-slm-opt.param和yolov5s-slm-opt.bin

继续把yolov5s-slm-opt.param和yolov5s-slm-opt.bin名字改成yolov5s.param和yolov5s.bin

这个步骤没有问题的话直接忽略步骤 2.2 ,跳转步骤3

2.2 使用Ubuntu部署 

 2.2.1 安装onnx-simplifier

pip install onnx-simplifier
pip install onnx-runtime
python -m onnxsim ./yolov5.onnx ./yolo5-sim.onnx  ##得到简化后的模型,这里使用你自己的路径

2.2.2  ncnn代码库编译

如果实在想自己编译,可以按照以下步骤进行,不过还是建议使用 2.1 直接用工具转化的方法

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

 2.2.3 onnx转ncnn

 将简化后的模型yolo5s-sim.onnx拖进ncnn/build/tools/onnx目录,cd 切换到该目录下进行操作

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

到这里你就得到 yolov5s.param 和 yolov5s.bin两个文件

2.2.4 注意事项

执行2.2.3步骤时候可能会出现以下问题,这是因为split和crop网络层高在ncnn中没有定义,我们需要做的是将这个网络层消除:

 打开yolov5s.param文件,对模型进行修改,将以下yolov5s.param文件开头代码

7767517
236 197
Input            images                   0 1 images
split            splitncnn_input          l 4 images images_splitncnn_0 images_splitncnn_l images_splitncnn_2 images_splitncnn_3
crop             slice_4                  l l images_splitncnn_3 171 -23309=1,6 -23310=1,2147483647 -2331l=1,l
crop             slice_9                  l 1 171 176 -23309=1,o -23310=1,2147483647 -23311=1,2
crop             slice_14                 l l images_splitncnn_2 181 -23309=1,1 -23310=1,2147483647 -2331l=1,1
crop             slice_i9                 l 1 181 186 -23309=1,0 -23310=1,2147483647 -2331l=1,2
crop             slice_24                 l l images_splitncnn_1 191 -23309=1,0 -23310=1,2147483647-2331l=1,1
crop             slice 29                 l 1 191 196 -23309=1,1 -23310=1,2147483647 -2331l=1,2
crop             slice_34                 l l images_splitncnn_0 201 -23309=1,1 -23310=1,2147483647 -23311=1,l
crop             slice_39                 l 1 201 206 -23309=1,1 -23310=1,2147483647 -2331l=1,2
concat           concat_40                4 1 176 186 196 206 207 0=0
Convolution      Conv_0                   1 1 images 122 0=32 1=6 11=6 2=1 12=1 3=2 13=2 4=2 14=2 15=2 16=2 5=1 6=3456
Swish            Mul_2                    1 1 122 124

删除 Split、Concat 和8个 Crop 节点,并且加入新的节点 YoloV5Focus ,替换成

7767517
227 265
Input            images                   0 1 images
YoloV5Focus      focus                    1 1 images 122
Convolution      Conv_0                   1 1 images 122 0=32 1=6 11=6 2=1 12=1 3=2 13=2 4=2 14=2 15=2 16=2 5=1 6=3456
Swish            Mul_2                    1 1 122 124

其中 227是由于之前的236网络层我们删除了10行,并用YoloV5Focus网络层代替,剩227个,而YoloV5Focus网络层中的images代表该层的输入,122代表输出名

详细步骤可见:https://zhuanlan.zhihu.com/p/275989233

( 注:推荐两个博主的步骤,一个Ubuntu系统,一个win系统:

1.Ubuntu系统:https://blog.csdn.net/qq_44696500/article/details/124195375

2.win系统:https://blog.csdn.net/qq_28664681/article/details/112650644  )

3.下载ncnn-android-yolov5和ncnn-20230223-android-vulkan

(1) 下载ncnn-android-yolov5文件,下载链接:https://github.com/nihui/ncnn-android-yolov5

解压后得到名为ncnn-android-yolov5-master的文件夹

(2)下载ncnn-20230223-android-vulkan文件,下载链接:https://github.com/Tencent/ncnn/releases

 解压后得到把文件夹里的以下四个文件拖进C:\Users\hp\Desktop\ncnn-android-yolov5-master\app\src\main\jni\这个路径

 (3)把步骤2生成的两个文件yolov5st.param和yolov5s.bin拉进C:\Users\hp\Desktop\ncnn-android-yolov5-master\app\src\main\assets这个文件夹里

 4.安装Android studio

下载链接:https://developer.android.google.cn/studio/

具体安装步骤网上都有,这里就不再写了

下载后用Android studio 打开ncnn-android-yolov5-master这个文件,然后点击左上角File-settings

再点击Android SDK,选择你手机的安卓版本,博主版本是9.0

 继续在这个界面点击SDK Tools,博主画红色框的记得选一下,SDK、cmake和NDK一定要选择

 配置一下NDK,点击左上角File–Project Structure, 这一步可能你的NDK选择会报错,因为正常情况下时会自动选择的,这是因为NDK版本装得太高了,可以执行上边步骤,重新安装低版本的NDK,我这里安装的是21.0.6113669,如果不行就多试几个版本就可以

5.修改源码

(1)修改CMakeLists.txt

打开ncnn-android-yolov5-master\app\src\main\jni\CMakeLists.txt,把里边的代码

set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20201218-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)

替换成下边代码

set(ncnn_DIR ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib/cmake/ncnn)

 (2)修改yolov5s.param

在yolov5s.param里搜索reshape,把reshape后边的数值全修改成0=-1,如果不修改的话,部署后会出现很多密密麻麻的小检测框

 (3)修改yolov5ncnn_jni.cpp

在yolov5s.param里搜索Permute,如图所示,记住最后两个Permute后边画框的数值,我这里是353和367

 打开yolov5ncnn_jni.cpp文件,把最后两个Permute的数值353和367分别写进下边图中

 修改yolov5ncnn_jni.cpp文件里的类别,改成你的全中所用的类别名称

 6.编译工程

(1)这里重复使用可能会混乱,如果文件夹里有build这个文件记得先删除,没有的话不用理会

 然后点击Build–Clean Project

(2)点击build gradle这个文件运行等待生成,我这里有两个build gradle文件,点击红色这个,记得不要点错了

 (3)生成project

 (4)连接手机,点击运行按钮将软件下载到手机

7.部署完成

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年4月22日
下一篇 2023年4月22日

相关推荐