yolov5通过ncnn在安卓平台部署

yolov5通过ncnn在安卓平台部署

目录

1.ncnn与yolov5的关系

2.ncnn模型转换

3.ncnn安卓环境部署

4.修改ncnn-android-yolov5源码

5.运行效果

--------------------------------------

1.ncnn与yolov5的关系

NCNN官方的定义:NCNN是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架。NCNN从设计之初,就深刻考虑手机端的部署和使用,无需第三方依赖,跨平台,手机端CPU的速度快于目前所有已知的开源框架。基于NCNN,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能APP,将AI带到你的指尖。
目前NCNN已经支持大部分的CNN网络,包括本文中用到的YOLOv5,如下图是YOLOv5 for Android与YOLOv5,ONNX,NCNN的关系。
yolov5通过ncnn在安卓平台部署_第1张图片

2.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三种文件。
(2)简化onnx文件

python -m onnxsim yolov5s.onnx yolov5s-sim.onnx

执行之后将yolov5s.onnx文件简化成yolov5s-sim.onnx文件
(3)通过onnxsim文件生成bin和param文件
①准备基础安装环境

sudo apt install build-essential libopencv-dev cmake

如果报错就更换镜像源,比如你是Ubuntu20,就搜ubuntu20镜像源更换。
②编译安装protobuf依赖库
下载protobuf源码放到ubuntu然后编译
下载地址:protobuf-master.

cd protobuf-master
./autogen.sh
./configure
make
sudo make install
sudo ldconfig

然后通过下面语句查看protoc是否安装成功

protoc --version

③保证protoc安装成功后,接着编译安装ncnn
下载ncnn源文件放进ubuntu然后编译
下载地址:ncnn-master.

cd ncnn-master
mkdir build
cd build
cmake ..
make
sudo make install

④make成功之后在ncnn-master/build/tools/onnx/onnx2ncnn的可执行文件
⑤最后在ncnn-master/build/tools/onnx下打开终端输入下面语句

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

执行之后得到yolov5s.param和yolov5s.bin文件就转换成功了

3.ncnn安卓环境部署

(1)下载ncnn-yolov5-android源码
下载地址:ncnn-android-yolov5.
(2)下载ncnn-android-vulkan包
下载地址: ncnn-releases.
选择ncnn-20210525-android-vulkan.zip下载 yolov5通过ncnn在安卓平台部署_第2张图片
(3)将下载好的ncnn-20210525-android-vulkan.zip解压后放在放在ncnn/cpp下
yolov5通过ncnn在安卓平台部署_第3张图片
(4)将CMakeLists.txt图中蓝色部分路径名改成与包名一样
yolov5通过ncnn在安卓平台部署_第4张图片
改好之后可以运行试试,应用的模型是yolov5s,如果想要应用自己训练的模型请继续操作。

4.修改ncnn-android-yolov5源码

(1)将文章开头ncnn模型转换生成的bin和param文件导入assets(名字要一样)
在这里插入图片描述
(2)修改.cpp文件
①把yolov5ncnn_jni.cpp文件的class_names改成自己数据集的
yolov5通过ncnn在安卓平台部署_第5张图片
②也是修改yolov5ncnn_jni.cpp文件改16,32步长参数(这个根据自己yolov5s.param文件的参数修改)
yolov5通过ncnn在安卓平台部署_第6张图片
yolov5通过ncnn在安卓平台部署_第7张图片
③改conf0.85(可选)
也是yolov5ncnn_jni.cpp文件的代码,这个代表置信度大于等于0.85才会显示
yolov5通过ncnn在安卓平台部署_第8张图片

(3)修改param文件
①第二行第一个参数(比如图中的186)减9改成(186-9=177)
这个根据自己param文件参数修改,不同模型参数也是不一样的
在这里插入图片描述
②前10行删去,加一行yolov5foucs在第一行foxus 1 1 images 还有个数字等于下一行的第二个参数,如图

YoloV5Focus		focus 	1 1 images 159

修改器前yolov5通过ncnn在安卓平台部署_第9张图片
修改后
在这里插入图片描述
④支持动态尺寸输入,将reshape中的960,240,60更改为-1
yolov5通过ncnn在安卓平台部署_第10张图片

5.运行效果

修改完成后就可以运行在手机或者模拟器上,如下图所示
yolov5通过ncnn在安卓平台部署_第11张图片
yolov5通过ncnn在安卓平台部署_第12张图片
常见问题补充:
①安卓中文路径问题:使用英文路径
②gradle版本问题:修改build.gradle、gradle-wrapper.properties

你可能感兴趣的:(yolov5学习,深度学习,python)