1、首先进入pytorch官网下载对应版本的libtorch,如果你需要安装GPU版本那么在前面你需要提前在本地下载安装好相应版本的cuda环境,,安装cpu版本则不需要配置GPU。现在最新版本为1.12并且cuda是11.3官网上一般只提供最新版本 当前我们教程中用的版本是1.11,cuda是11.3 后续我会将所有东西上传到我的网盘里面欢迎大家下载。提取码:7y2e
2、下载完以后将其解压到本地 注意解压路径不要有中文路径不要有中文 建议解压到某个盘的根目录:
3、配置环境变量 找到libtorch 中的bin 目录和lib目录将其添加到path环境变量中
打开项目属性中 点击VC++目录
包含目录中添加
C:libtorchincludetorchcsrcapiinclude
C:libtorchinclude
并在库目录中添加:
然后在连接器 附加依赖项中 添加lib目录下所有lib结尾的文件
由于1.11版本有bug 所以需要在强制链接cuda 的lib 函数 因此需要在连接器的命令行中输入:
/INCLUDE:“?ignore_this_library_placeholder@@YAHXZ”
其他版本的如果cuda不能用也可以尝试配一下指令详情参加这篇博客
测试:首先打开自己的jupyter notebook 插入以下代码进行测试和运行 ,注意让你pytorch的版本尽量和libtorch保持一致,运行后会训练生成一个pt权重文件
from torchvision.models import resnet34
import torch.nn.functional as F
import torch.nn as nn
import torch
import cv2
#read a picture, convert to [1,3,224,224] float tensor
image = cv2.imread("flower.jpg")
image = cv2.resize(image,(224,224))
input_tensor = torch.tensor(image).permute(2,0,1).unsqueeze(0).float()/225.0
#define resnet34 and load ImageNet pretrained
model = resnet34(pretrained=True)
model.eval()
#check outputs
output = model(input_tensor)
output = F.softmax(output,1)
print("predicted class:{}th,prob:{}".format(torch.argmax(output),output.max()))
#generate .pt
#使用GPU训练
#model=model.to(torch.device(0))
model.eval()
#使用GPU创建测试样例
#var=torch.ones((1,3,224,224)).to(torch.device(0))
var=torch.ones((1,3,224,224))
#traced_script_module = torch.jit.trace(model, var)
traced_script_module = torch.jit.trace(model,var)
traced_script_module.save("resnet341.pt")
然后下载这个.pt的经过脚本转换的权重文件自己创建一个visual studio项目 在这里除了需要按照我们这个来配置pytorch 还需要配置opencv 配置opencv的教程大家可以去看我上一篇博客,
我的文件夹大致是这样的大家将下载好的pt权重文件和测试图像放在项目文件里面
然后在visualstudio 中写下如下代码 路径需要同学们自己根据自己路径来进行更改
#include#include #include #include #include using namespace std; using namespace cv; int main() { //定义使用cuda auto device = torch::Device(torch::kCUDA,0); //torch::Device device(torch::kCPU); //读取图片 auto image = imread("C:\Users\Administrator\Desktop\C++练习\opencv\opencv\flower.jpg"); imshow("Image", image); imwrite("test.jpg", image); waitKey(0); //缩放至指定大小 resize(image, image, Size(224, 224)); //转成张量 auto input_tensor = torch::from_blob(image.data, { image.rows, image.cols, 3 }, torch::kByte).permute({ 2, 0, 1 }).unsqueeze(0).to(torch::kFloat32) / 225.0; //加载模型 auto model = torch::jit::load("C:\Users\Administrator\Desktop\C++练习\opencv\opencv\resnet34.pt"); //cpu版本 //auto model = torch::jit::load("C:\Users\Administrator\Desktop\C++练习\opencv\opencv\resnet341.pt"); model.to(device); model.eval(); //前向传播 auto output = model.forward({ input_tensor.to(device) }).toTensor(); output = torch::softmax(output, 1); cout << "模型预测结果为第" << torch::argmax(output) << "类,置信度为" << output.max() << endl; waitKey(0);
运行后会先弹窗出现一个图像,关掉后,然后控制台按下enter健后出现如下的控制台



