torch-onnx-ncnn 以yolov5为例子
安装ncnn
建议下载代码从gitee下载,速度会快很多
参考网站:https://yyingbiu.github.io/2019/08/21/linux-xia-bian-yi-an-zhuang-ncnn/
vulkansdk最好选择合适的下载
$ wget https://sdk.lunarg.com/sdk/download/1.1.92.1/linux/vulkansdk-linux-x86_64-1.1.92.1.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.1.92.1.tar.gz
$ tar -xf vulkansdk-linux-x86_64-1.1.92.1.tar.gz
$ export VULKAN_SDK=`pwd`/1.1.92.1/x86_64
按cpp编译流程走
$ git clone https://github.com/Tencent/ncnn.git
$ cd
$ mkdir -p build
$ cd build
$ cmake -DNCNN_VULKAN=OFF ..
$ make -j4
如果需要用vscode进行代码调试
在path_to_ncnn/CMakeList.txt中开头加入,后再编译
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g3 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
vscode打开方程后,在lanch.json中的program改为yolov5的执行路径就可以用vscode调试程序
注意:yolov5需要输入image路径,arg也需要添加图片路径
torch2onnx
教程:https://blog.csdn.net/excelNo1/article/details/119246829
针对模型的输出位置做修改:https://blog.csdn.net/x_248369/article/details/116503218
下载
下载yolov5
git clone -b v5.0 https://github.com/ultralytics/yolov5
下载预训练权重
https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
注意版本的选择(这里选择v5.0)
测试
测试代码(前提把requirement.txt内的库下载)
python3 detect.py --source inference/images --weights yolov5s.pt --conf 0.25
转换onnx
python3 models/export.py --weights yolov5s.pt --img 640 --batch 1
python3 -m onnxsim yolov5s.onnx yolov5s-sim.onnx
onnx2ncnn
1.生成param和bin文件
cd path_to_ncnn/build/tools/onnx
./onnx2ncnn yolov5s-sim.onnx yolov5s.param yolov5s.bin
2.打开生成的.param文件,去除不支持的网络层。
3.除去split 和crop 及concat层,一共十层,换成YoloV5Focus,总层数309变成300,如图所示。
在这里插入图片描述
4.将Permute的前一层Reshape 中0=xxx 改成 0 = -1。修改结果如下:
5. 用 ncnnoptimize 过一遍模型,顺便转为 fp16 存储减小模型体积
cd path_to_ncnn/build/tools
./ncnnoptimize yolov5s.param yolov5s.bin yolov5s-opt.param yolov5s-opt.bin 65536
6.修改param和bin位置(在path_to_ncnn/example/yolov5.cpp)
7.修改相关输出层位置
这三个位置看是否和param文件下的最后Permute层的输出位置是否相同
7.测试
cd path_to_ncnn/build/example/
./yolov5 imagepath
参考:
1、https://yyingbiu.github.io/2019/08/21/linux-xia-bian-yi-an-zhuang-ncnn/
2、https://blog.csdn.net/excelNo1/article/details/119246829
3、https://blog.csdn.net/x_248369/article/details/116503218