环境:win10 + vs2019+cuda11.0+pytorch1.7.1
1. vs2019配置opencv4.4和libtorch1.7.1
https://download.pytorch.org/libtorch/cu110/libtorch-win-shared-with-deps-1.7.1%2Bcu110.zip
libtorch的GPU release版本。
下载完成后解压在任意地址即可,这里假定文件在F:\libtorch中。libtorch文件夹内容如下。
1)环境变量设置
安装完成后,右键“此电脑”->“属性”->“高级系统设置”->点击系统变量中的Path->添加dll路径。(lib中有.lib和.dll两种文件,安装过opencv的小伙伴都知道,这两种文件一般是分到两个文件夹中的,.lib路径要在vs中进行设置,.dll一般要添加到环境变量中。)
加入"F:\libtorch\lib",“F:\opencv\build\x64\vc15\bin”(具体前缀地址以你实际放置的地址为准)
2)VS2019的环境配置
新建项目,“项目”->“属性”,将配置改为“Release”,平台设为“x64”。
选择“调试”->“环境”,添加
PATH=%PATH%;F:\libtorch\lib
选择“包含目录”,添加
F:\libtorch\include\torch\csrc\api\include
F:\libtorch\include
F:\opencv\build\include
选择“库目录”,添加
F:\libtorch\lib
F:\opencv\build\x64\vc15\lib
选择“链接器”->“附加依赖项”,添加
F:\opencv\build\x64\vc15\lib\opencv_world440.lib
F:\opencv\build\x64\vc15\lib\opencv_world440d.lib(用于debug版) (具体地址与opencv_world后缀以实际为准)
c10.lib
torch.lib
torch_cpu.lib
torch_cuda.lib
“链接器”->“命令行”,在其他选项中输入 /INCLUDE:?warp_size@cuda@at@@YAHXZ
这个命令大概是用来链接cuda库的,cpu版无需输入。
3) vs测试
torch::cuda::is_available()输出为1即为成功。
// for gpu version test
#include <opencv2/opencv.hpp>
#include <torch/script.h>
#include <torch/torch.h>
#include <iostream>
int main()
{
std::cout << torch::cuda::is_available() << std::endl;
torch::DeviceType device_type = at::kCUDA;
std::cout << device_type << std::endl;
torch::Tensor tensor = torch::rand({ 5,3 }).to(device_type);
std::cout << tensor << std::endl;
cv::Mat img = cv::imread("D:/test.png");
cv::imshow("", img);
cv::waitKey(1000);
return 0;
}
2. pytorch模型转化为torch script
Export-gpu.py将pt模型转化为torchscript.pt
3. 在c++中使用libtorch调用yolov5模型进行测试
在Python环境下对训练好的模型进行转换以后,咱们须要C++环境下的PyTorch来读取模型并进行编译部署。这种C++环境下的PyTorch就是libtorch。由于libtorch一般用来做为PyTorch模型的C++接口,libtorch也称之为PyTorch的C++前端。
下载GitHub - ncdhz/YoloV5-LibTorch: 一个 C++ 版本的 YoloV5 封装库。在自己的项目中新建main.cpp, YoloV5.cpp和YoloV5.h,分别将YoloV5-LibTorch工程中的test文件夹中的test.cpp, src文件夹中的YoloV5.cpp和include文件夹中的YoloV5.h的代码复制到对应的main.cpp,YoloV5.cpp和YoloV5.h中。Main.cpp中设置的pt文件和coco.txt文件分别修改为上步转化的torchscript.pt和自己训练的类别。