该内容还未完整,笔记内容,持续补充。
〇开发环境版本
vs2022
cmake3.21.1
ncnn20231027发行版
yolov5s v6.2(注意:这个版本是我目前模型转换通过的,其他版本自行测试)
vunlkan1.2.198.1
Protobuf3.20.0
Opencv3.4.1
一、模型转换(这步可以放在部署环境后操作)
yolov5s v6.2训练的pt模型,直接导出tourchscript,然后使用ncnn里面的pnnx工具直接转换为ncnn。
这个地方别去pt转onnx转ncnn的了,踩了多少坑才出来的,有能力的可以去踩。
官方文档:
/pnnx/pnnxhttps:///pnnx/pnnx
导出tourchscript使用yolov5里面
tourchscript转pnnx命令(pnnx可以自己编译也可以直接下载ncnn-windows里面有编译好的):
inputshape=[1,3,640,640] inputshape2=[1,3,320,320]
优化算子,其中flag为0指fp32, 为1指fp16
ncnnoptimize .bin -opt.bin 0
将ncnn模型中的可见字符去除(简单理解就是加密模型),执行以下命令可生成*. 和两个静态数组的代码文件,加载时需要导入.h头文件
ncnn2mem -opt.bin -opt.id.h
二、部署环境
注意:cmake编译需要使用x64 Native Tools Command Prompt for VS 2022工具里面,cmd是没效果的。
1.安装Protobuf3.20.0版本
源码下载地址:
/protocolbuffers/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.:///protocolbuffers/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.
官方文档:
/Tencent/ncnn/wiki/:///Tencent/ncnn/wiki/
编译Protobuf命令 :
-
mkdir build_vs
-
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
-
nmake
-
nmake install
2.编译ncnn
直接拉取GitHub源码,然后更新完整代码。
-
git clone /Tencent/
-
cd ncnn
-
git submodule update --init
用以下命令编译,自行替换Protobuf的编译路径,其中DNCNN_VULKAN=ON表示使用Vunlkan加速
-
mkdir build_vs
-
cd build_vs
-
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=D:\protobuf-cpp-3.20.0\protobuf-cpp-3.20.0\protobuf-3.20.0\build_vs\install/include -DProtobuf_LIBRARIES=D:\protobuf-cpp-3.20.0\protobuf-cpp-3.20.0\protobuf-3.20.0\build_vs\install/lib/ -Dprotobuf_DIR=D:\protobuf-cpp-3.20.0\protobuf-cpp-3.20.0\protobuf-3.20.0\build_vs/install/cmake -DProtobuf_PROTOC_EXECUTABLE=D:\protobuf-cpp-3.20.0\protobuf-cpp-3.20.0\protobuf-3.20.0\build_vs\install/bin/ -DNCNN_VULKAN=ON ..
-
nmake
-
nmake install
三、推理实现
待更新