visual studio +libtorch +cuda 11.3 配置pytorch C++环境

visual studio +libtorch +cuda 11.3 配置pytorch C++环境

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:\libtorch\include\torch\csrc\api\include
C:\libtorch\include

在这里插入图片描述

并在库目录中添加:

在这里插入图片描述

然后在连接器 附加依赖项中 添加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 <iostream>
#include <opencv.hpp>
#include <cmath>
#include <torch/torch.h>
#include <torch/script.h> 
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健后出现如下的控制台
在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值