# yolov7-ncnn-pnnx **Repository Path**: sun-zhenxing/yolov7-ncnn-pnnx ## Basic Information - **Project Name**: yolov7-ncnn-pnnx - **Description**: NCNN/PNNX 部署 YOLOv7 - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-09-24 - **Last Updated**: 2024-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YOLOv7 NCNN 代码部分移植自 NCNN 项目源码,请遵循原协议 BSD-3 使用本项目。 本项目使用 CMake,确认 CMake 可用,版本大于 3.9,并确保本机编译环境支持 C++17 。 需要的依赖: - OpenCV - VulkanSDK ## 初始化项目 将 NCNN 官方发布的 `ncnn-20220729-windows-vs2019-shared.zip` 下载并解压到 `lib` 文件夹下面,本项目需要的目录结构为 `lib/ncnn/x64/` 。 如果是使用 VS Code 调试,请将 `settings.json` 的 `"cmake.environment"` 字段内容替换为本机的环境依赖,包括 OpenCV 和 Vulkan,并 替换 `c_cpp_properties.json` 文件中的 `"includePath"`,将 OpenCV 的 `Include` 地址复制到此。 如果使用 Linux 系统进行编译,编译前使用 `export` 命令传递本机依赖地址: ```bash export OPENCV=... export VULKAN_SDK=... ``` ## 编译代码 ```bash cmake . -A x64 cmake --build . --config Release -j 6 ``` 使用 VS Code 编译: - Windows 使用 VS 作为编译后端 - Linux 使用 GUN 编译套件作为编译后端 - 选择 CMake:Release - 选择后端为 VS[2017 | 2019 | ...] | GUN gcc:AMD64(x64) - CMake:Configure - CMake:Build 构建完成发布时除了要将对应模型文件复制到可执行文件所在目录,还需要复制以下依赖: - `ncnn.dll` 或者 `ncnn.so` - `opencv_world[4xx].dll` 或者 `opencv_world[4xx].so` 部署示例: - `ncnn.dll` - `opencv_world460.dll` - `yolov7-pnnx.bin` - `yolov7-pnnx.param` - `yolov7pnnx.exe` 如果 `opencv_world[4xx].dll` 过大,可以选择部分编译,使用 CMake 手动编译 OpenCV 源码即可。 ## 转换模型 部分模型可以在 [ncnn-assets](https://github.com/nihui/ncnn-assets/tree/master/models) 下载。 下载 [pnnx](https://github.com/pnnx/pnnx) 最新的 Release 版本并安装。 转换模型: ```bash git clone https://github.com/WongKinYiu/yolov7 cd yolov7 wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt python export.py --weights yolov7.pt pnnx yolov7.torchscript.pt inputshape=[1,3,640,640] inputshape2=[1,3,320,320] ``` 得到 `yolov7.torchscript.ncnn.param` 和 `yolov7.torchscript.ncnn.bin` 即为 PNNX 模型文件。 如果需要转换其他 `.onnx` 模型到 NCNN,参考网络上如何使用 `onnx2ncnn` 来转换和简化模型的相关内容。