学习笔记—使用NCNN将yolov5部署到android

运行DEMO

下载ncnn框架和ncnn-android的demo

链接: ncnn
链接: ncnn-android
在这里插入图片描述
下面的教程主要以带加速的ncnn-android-vulkan为例

  • 将下载好的压缩包解压
    在这里插入图片描述
  • 然后将ncnn-android-vulkan中的文件拷贝到ncnn-android-yolov5-master\app\src\main\jni中
    在这里插入图片描述
    打开android studio,选择ncnn-android-yolov5-master项目打开
    打开src/main/jni/CMakeList.txt,修改ncnn路径
    在这里插入图片描述
    将作者的根目录删除改为自己的路径,像上述操作后路径由
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)

在这里插入图片描述
重新同步,成功后,将app安装到手机上
在这里插入图片描述
出现这个问题的原因是,使用的新版本的ndk中不包含这个文件,需要将老版本,例如R21版本toolchains文件夹中对应文件拷贝到当前应用的ndk版本对应文件夹中,或者在local.properties文件中指定ndk路径
在这里插入图片描述
请添加图片描述

  • 这里如果出现点击gpu识别没有反应,大概率是因为下载的ncnn-android-vulkan版本与ndk版本新旧关系

换成自己的训练模型

  • 将训练好的模型转为NCNN需要的,需要通过一种中介,通过它在不同的框架之间进行转换,即Open Neural Network Exchange 简称 ONNX,意思是开放神经网络交换格式
  • 我们采用.pt ->onnx->ncnn的路线来转换自己训练的模型

1.首先,安装onnx包

在pytorch环境下安装onnx包
pip install onnx coremltools onnx-simplifier

2.使用YOLOv5自带的export.py进行转换

修改export文件内weights和data的路径
在这里插入图片描述
下面的train模式default=True,否则最终生成的APP会闪退
在这里插入图片描述
运行export.py,onnx会生成一个best.onnx
在这里插入图片描述
如果无法直接运行,可以在yolov5环境中运行脚本命令
python export.py --train --weights weights/yolov5s.pt --include torchscript onnx
weights/yolov5s.pt可以改为你自己的pt文件

3.对onnx进行压缩

python -m onnxsim best.onnx best-sim.onnx
在这里插入图片描述
压缩完之后会生成一个best-sim.onnx的文件,压缩可以去除一些不必要的结构,这一步很重要
在这里插入图片描述

4.将onnx文件转换成param文件

第一种方法是使用protobuf来完成这个onnx文件到ncnn权重的转换,但是现在有更好的解决方法,转换效率更高速度、更快,也更傻瓜化;这个过程在Ubuntu系统上完成,可以使用真的Ubuntu系统或者使用虚拟机。后续会有介绍,这里我们直接选择第二种方法使用onnxsim的在线端进行转换。得到best-sim-sim.bin和best-sim-sim.param两个文件

  • 将这两个文件替换掉assets文件夹下的两个文件

在这里插入图片描述
在这里可以修改文件名
在这里插入图片描述

5.修改param文件中的参数

搜索Reshape层,将后面对应的 0=6400、0=1600、0=400 均修改为 0=-1 ,这是为了解决实际中出现的多检测框的问题
在这里插入图片描述

6.修改yolov5ncnn_jni.cpp文件

将文件中的分类类别名改成自己模型的实际类别名
在这里插入图片描述

7.修改stride 16和32部分

我们使用Netron打开这个yolov5s.param文件,找到permute节点,这个permute节点一共有3个,分别是128,256,512尺寸的,我们需要的是256和512的输出维度,我们需要的是256和512的输出维度,将对应节点的输出名更改,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.安装测试在这里插入图片描述

https://github.com/fizzHEY/ncnn-android-yolo

使用protobuf完成onnx转ncnn

1.安装虚拟机

猜你喜欢

转载自blog.csdn.net/weixin_45178274/article/details/129614367