yolov5通过ncnn在安卓平台部署

ncnn与yolov5的关系

在这里插入图片描述

ncnn安卓环境部署

(1)下载ncnn-yolov5-android源码
下载
(2)下载ncnn-android-vulkan包
下载
在这里插入图片描述
选择ncnn-20210525-android-vulkan.zip下载
(3)将下载好的ncnn-20210525-android-vulkan.zip解压后放在放在ncnn/cpp下:
在这里插入图片描述
在这里插入图片描述

3.ncnn模型转换

首先安装相关库
在这里插入图片描述
pip install onnx coremltools onnx-simplifier

(1)用/yolov5/module/export.py生成onnx文件
在yolov5文件中cmd进入命令行输入以下语句转换模型(–weights为需要转换权重文件位置和名字)
在这里插入图片描述
python models/export.py --weights yolov5s.pt
执行这句之后,会在权重文件相同文件夹下生成yolov5s.onnx、yolov5s.mlmodel和yolov5s.torchscript.pt三种文件。

转化onnx到ncnn

在这里插入图片描述
转换工具网址

在这里插入图片描述
选择刚刚生成的onnx进行转换ncnn,如果转换成功则后续可以直接部署到Android,但是如果有报错的话我们需要对生成的文件进行一点小小的修改才能部署Android。
在这里插入图片描述
上述报错解决方法:
首先我们把生成的两个文件下载下来。

在这里插入图片描述使用文本编辑器打开这个.param的文件准备,这里我就直接用pycharm打开了
在这里插入图片描述
这里推荐一个工具:Netron ,我们可以使用这个先打开我们的.param文件看看模型数据。
Netron

在这里插入图片描述
找到Concat,记录下倒数第二个参数。(等下要用到)
然后再Input下面添加 “ YoloV5Focus focus 1 1 images ”+之前记录的参数 “/model.0/Concat_output_0”
修改后的param见下。原来有181行,删掉 Split、Crop、Concat 层,新增YoloV5Focus层后,6个op换成了1个op,一共减少5行,将开头的 layer count 减去5,改写为176。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
stride16和stride32的修改根据.param文件里的Permute后的数字进行修改,如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
改完这些就ok了。
下面是运行效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/officewords/article/details/130230572