YOLOv5部署到Windows的C++(使用LibTorch)
前言
由于项目需要,我们要将YOLOv5部署到Windows上的C++程序使用,本文使用LibTorch将YOLOv5部署到Visual Studios 2019上。
准备内容
首先我们下载准备好需要的内容:
- Visual Studios 2019
- LibTorch (要和你的Pytorch版本对应,Debug 和 Release 版本均可,和后续C++版本统一即可)
- OpenCV
- Libtorch-Yolov5
- Cmake
- CUDA & cuDNN
配置环境
配置 OpenCV 和 LibTorch 环境,二者配置内容大体一致(以下路径地址按个人安装路径调整)。
- 配置系统环境变量:
在系统环境变量中分别添加 OpenCV 和 LibTorch 的路径
Opencv:
D:\opencv\build\x64\vc15\bin
Libtorch:
D:\libtorch\lib - VS2019 新建 C++ 空项目;
- 项目属性 -> VC++目录 -> 包含目录:
Opencv:
D:\opencv\build\include
D:\opencv\build\include\opencv2
Libtorch:
D:\libtorch\include
D:\libtorch\include\torch\csrc\api\include - 项目属性 -> VC++目录 -> 库目录:
Opencv:
D:\opencv\build\x64\vc15\lib
Libtorch:
D:\libtorch\lib - 项目属性 -> 链接器-> 输入-> 附加依赖项:
Opencv:
将D:\opencv\build\x64\vc15\lib文件中的 .lib 文件放入附加依赖项里面,两个版本和你项目版本一致:
opencv_world452d.lib(Debug)
opencv_world452.lib(Release)
Libtorch:
将D:\libtorch\lib中的 .lib 文件全部放入附加依赖项里面。 - 项目属性 -> C/C++ -> 附加包含目录:
D:\opencv\build\include
D:\libtorch\include
D:\libtorch\include\torch\csrc\api\include - 项目属性 -> C/C++ -> 常规 SDL检查 改为 否
- 项目属性 -> C/C++ -> 语言 -> 符合模式 符合模式 改为 否
- 项目属性 -> 调试 -> 环境:
Opencv:
D:\opencv\build\x64\vc15\lib;
Libtorch:
D:\libtorch\lib; - 测试OpenCV:
运行以下代码检查是否正确配置OpenCV:解释#include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("图片路径"); cv::imshow("", img); cv::waitKey(0); return 0; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 测试LibTorch:
运行以下代码检查是否正确配置LibTorch:解释#include <torch/torch.h> #include <iostream> int main() { std::cout << "cuda::is_available():" << torch::cuda::is_available() << std::endl; torch::Tensor tensor = torch::rand({ 3, 4 }); std::cout << tensor << std::endl; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
编译
- 打开 Libtorch-Yolov5 中的 CMakeLists.txt,在以下两行中给出 OpenCV 和 LibTorch 的路径:
set(OpenCV_DIR D:/opencv/build)
set(Torch_DIR D:/libtorch/share/cmake/Torch/) - 打开CMD
mkdir build # 建立build文件夹 cd build # 进入build文件夹 cmake .. # 编译
- 1
- 2
- 3
YOLOv5 检测
- 将 D:/libtorch-yolov5/weights 中的coco.names中的类别名称改为自己的数据集类别名称,训练好的权重文件可放于此文件夹(.pt 权重文件先使用 yolov5 的 export.py 转化为 .torchscript.pt 文件);
- D:/libtorch-yolov5/src 中的文件就是检测函数 detector.cpp 和主函数 main.cpp,具体内容按照个人需求更改。
可能遇到的问题
- 无法打开源文件 opencv2/opencv.hpp 或 torch/torch.h: 环境未配置好。
- 编译时找不到 OpenCV 或者 LibTorch 的文件: 检查 CMakeLists.txt 中的路径地址是否填写正确,注意斜杠方向,是否有注释符号,是否添加到系统环境变量。
- 编译时找不到 CUDA: CUDA 未正确安装或未添加到系统环境变量中。
- 推理速度缓慢 或 模型加载缓慢: 检查 pytorch 版本以及 CUDA 版本是否对应正确。