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的关系。
文章图片
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
【yolov5学习|yolov5通过ncnn在安卓平台部署】如果报错就更换镜像源,比如你是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下载
文章图片
(3)将下载好的ncnn-20210525-android-vulkan.zip解压后放在放在ncnn/cpp下
文章图片
(4)将CMakeLists.txt图中蓝色部分路径名改成与包名一样
文章图片
改好之后可以运行试试,应用的模型是yolov5s,如果想要应用自己训练的模型请继续操作。
4.修改ncnn-android-yolov5源码
(1)将文章开头ncnn模型转换生成的bin和param文件导入assets(名字要一样)
文章图片
(2)修改.cpp文件
①把yolov5ncnn_jni.cpp文件的class_names改成自己数据集的
文章图片
②也是修改yolov5ncnn_jni.cpp文件改16,32步长参数(这个根据自己yolov5s.param文件的参数修改)
文章图片
文章图片
③改conf0.85(可选)
也是yolov5ncnn_jni.cpp文件的代码,这个代表置信度大于等于0.85才会显示
文章图片
(3)修改param文件
①第二行第一个参数(比如图中的186)减9改成(186-9=177)
这个根据自己param文件参数修改,不同模型参数也是不一样的
文章图片
②前10行删去,加一行yolov5foucs在第一行foxus 1 1 images 还有个数字等于下一行的第二个参数,如图
YoloV5Focusfocus1 1 images 159
修改器前
文章图片
修改后
文章图片
④支持动态尺寸输入,将reshape中的960,240,60更改为-1
文章图片
5.运行效果
修改完成后就可以运行在手机或者模拟器上,如下图所示
文章图片
文章图片
常见问题补充:
①安卓中文路径问题:使用英文路径
②gradle版本问题:修改build.gradle、gradle-wrapper.properties
推荐阅读
- 深度学习|YOLOV5部署全系列教程(1)
- Python|Python编程题每日一练day1(附答案)
- Python概述环境准备Python起步数据类型概述
- python从入门到实战|【Python编程】一、Python安装(Linux/Windows)与简介
- 笔记|Python基础(三)推导式
- 合并2个PDF,1行Python代码就够了。
- 如何利用Keras 深度学习库的进行回归
- 软件测试|接口测试之Fiddler抓包,定位接口测试问题详细教程
- 对抗样本|《Adversarial Attack and Defense》对抗攻击/防御报告观看笔记