YOLOv5的Android部署,基于NCNN
NCNN是什么
ncnn
是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架。ncnn
从设计之初,就深刻考虑手机端的部署和使用,无需第三方依赖,跨平台,手机端 cpu
的速度快于目前所有已知的开源框架。基于 ncnn
,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP
,将 AI
带到你的指尖。
模型转化
当我们训练了自己的检测模型后,就需要一种中介,通过它,可以实现在不同框架之间进行转换。 Open Neural Network Exchange
简称 ONNX
,意思是开放神经网络交换格式,它就是我们需要的中介。
安装依赖库
1
pip install onnx coremltools onnx-simplifier
执行命令
1
python models/export.py --weights runs/exp2/weights/best.pt
同时在
best.pt
的同级目录,还生成了best.onnx
、best.mlmodel
和best.torchscript.pt
接下来使用工具
onnx-simplifier
来简化onnx
,执行命令1
python -m onnxsim runs/exp2/weights/best.onnx runs/exp2/weights/best-sim.onnx
下面开始编译
ncnn
,首先准备基础环境1
sudo apt install build-essential libopencv-dev cmake
编译安装
protobuf
依赖库1
2
3
4
5
6
7
8git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make install
sudo ldconfig编译安装好以后,可以查看下
protobuf
的版本号接下来,需要编译
ncnn
,目的是生成onnx
转ncnn
的命令行工具1
2
3
4
5
6
7
8git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build
cd build
cmake ..
make -j8
make install编译安装完成后,就可以使用
onnx2ncnn
工具进行转换了1
2cd tools/onnx
./onnx2ncnn ~/Works/weights/best-sim.onnx ~/Works/weights/model.param ~/Works/weights/model.bin接下来就可以替换原
android
工程中assets
文件夹下的yolov5s.param
和yolov5s.bin
项目部署
- 设置你的android的版本,选择兼容的NDK和CMake,这里我选择的NDK是21.3.6528147,CMake是3.10.2.4988404(调了一下午,才找到与gradle版本不冲突的NDK和CMake版本)
- 下载
yolov5 for android
的源码
1 | https://github.com/nihui/ncnn-android-yolov5 |
- 下载编译好的包,选择[ncnn-xxxxx-android-vulkan.zip]
1 | https://github.com/Tencent/ncnn/releases |
- 下载解压后拷贝到
ncnn-android-yolov5
项目的app/src/main/jni
目录下,目录结构是这样的
- 然后修改同级目录下的
CMakeLists.txt
,将其中的ncnn_DIR
变量值修改成
1 | set(ncnn_DIR ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib/cmake/ncnn) |
然后就可以连接手机进行部署了!
想要了解更多yolo压缩技术可以参考下面博主迷途小书童的Note - 编程、技术、分享迷途小书童的Note– 编程、技术、分享 (xugaoxiang.com)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 houWenk's Blog!