title | date | cover | categories | tags | ||||
---|---|---|---|---|---|---|---|---|
YOLOv5的Android部署,基于NCNN |
2023-03-17 07:52:04 -0700 |
/medias/page7.jpg |
|
|
ncnn
是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架。ncnn
从设计之初,就深刻考虑手机端的部署和使用,无需第三方依赖,跨平台,手机端 cpu
的速度快于目前所有已知的开源框架。基于 ncnn
,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP
,将 AI
带到你的指尖。
当我们训练了自己的检测模型后,就需要一种中介,通过它,可以实现在不同框架之间进行转换。 Open Neural Network Exchange
简称 ONNX
,意思是开放神经网络交换格式,它就是我们需要的中介。
-
安装依赖库
pip install onnx coremltools onnx-simplifier
-
执行命令
python models/export.py --weights runs/exp2/weights/best.pt
-
同时在
best.pt
的同级目录,还生成了best.onnx
、best.mlmodel
和best.torchscript.pt
-
接下来使用工具
onnx-simplifier
来简化onnx
,执行命令python -m onnxsim runs/exp2/weights/best.onnx runs/exp2/weights/best-sim.onnx
-
下面开始编译
ncnn
,首先准备基础环境sudo apt install build-essential libopencv-dev cmake
-
编译安装
protobuf
依赖库git 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
的命令行工具git clone https://github.com/Tencent/ncnn.git cd ncnn git submodule update --init mkdir build cd build cmake .. make -j8 make install
-
编译安装完成后,就可以使用
onnx2ncnn
工具进行转换了cd 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
的源码
https://github.com/nihui/ncnn-android-yolov5
- 下载编译好的包,选择[ncnn-xxxxx-android-vulkan.zip]
https://github.com/Tencent/ncnn/releases
- 下载解压后拷贝到
ncnn-android-yolov5
项目的app/src/main/jni
目录下,目录结构是这样的
- 然后修改同级目录下的
CMakeLists.txt
,将其中的ncnn_DIR
变量值修改成
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib/cmake/ncnn)
然后就可以连接手机进行部署了!
想要了解更多yolo压缩技术可以参考下面博主迷途小书童的Note - 编程、技术、分享迷途小书童的Note-- 编程、技术、分享 (xugaoxiang.com)