NCNN环境部署及yolov5pt转ncnn模型转换推理

时间:2025-01-30 10:15:53

该内容还未完整,笔记内容,持续补充。

〇开发环境版本

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命令 :

  1. mkdir build_vs
  2. cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
  3. nmake
  4. nmake install

2.编译ncnn

直接拉取GitHub源码,然后更新完整代码。

  1. git clone /Tencent/
  2. cd ncnn
  3. git submodule update --init

用以下命令编译,自行替换Protobuf的编译路径,其中DNCNN_VULKAN=ON表示使用Vunlkan加速

  1. mkdir build_vs
  2. cd build_vs
  3. 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 ..
  4. nmake
  5. nmake install

三、推理实现

待更新