libtorch学习历程(1)环境搭建:VS+libtorch

1. 开发环境

  • Win11
  • VS 2022 Community
  • RTX4060
  • pytorch 2.4.0+cu121(事先安装好)
  • libtorch 2.4.0+cu121 release版
  • opencv 4.10.0

2.软件下载

2.1 VS

直接去官网下载即可,最好是2017版本之后,需要选择C++的桌面开发。
在这里插入图片描述

2.1 opencv

下载链接
直接去官网下载即可,版本最好是4.5之后的。安装目录不能包含英文。

2.2 libtorch

libtorch使用所需要的环境和训练最好保持一致,其中cuda,显卡驱动以及libtorch版本配置一般不应低于训练环境。尤其是libtorch版本要求更为严格,否则部分pytorch的api无法在libtorch中使用。最好pytorch与libtorch的版本是一样的。

下载链接
本文中以libtorch2.4为例介绍,读者最新版2.4.0使用,亲测可用。下载时以release版本为佳,避免一些不必要的错误。
在这里插入图片描述
下载会得到一个压缩包,然后解压
在这里插入图片描述

3. VS项目环境配置

新建一个控制台项目

在这里插入图片描述

编译环境

使用 Release 与 x64。
注意这步要先做,否则后面配置项目环境时可能会配置了Debug的,导致白费功夫。
在这里插入图片描述

配置项目环境

include

① 右键点击项目,打开属性
在这里插入图片描述
在这里插入图片描述
② 选择VC++目录,编辑包含目录,增加以下语句:

您的libtorch地址\libtorch\include\torch\csrc\api\include
您的libtorch地址\libtorch\include
你的opencv地址\opencv\build\include

在这里插入图片描述

lib

选择VC++目录,编辑库目录,添加以下语句:

你的libtorch位置\libtorch\lib
你的opencv位置\build\x64\vc16\lib

其中VS2022对应着vc16,而其他版本的对应关系查看链接
在这里插入图片描述

link

点击链接器->输入->附加依赖项,添加 (你的libtorch位置\libtorch\lib) 这个地址下的所有lib文件名。
在这里插入图片描述
此外还需添加opencv的.lib文件,地址:你的opencv位置\build\x64\vc16\lib
在这里插入图片描述
将各个文件名都添加。
在这里插入图片描述

dll

有两种方法:
① 拷贝opencv和libtorch中的dll文件到项目的执行目录中,在项目编译后执行时报错缺啥拷贝啥。

② 将opencv和libtorch中的dll路径配置到VS项目中:
地址:

你的libtorch位置\libtorch\lib
你的opencv位置\build\x64\vc16\lib

方法:配置方法

4. 测试

4.1 使用pytorch生成分类模型。

以ResNet34分类模型为例尝试部署分类模型。准备一张图片用以判断是否部署成功,本文用例图如下
在这里插入图片描述
接下来先和官网类似生成torchscript模型,亦即本文中的pt文件。本文使用代码如下:

from torchvision.models import resnet34
import torch.nn.functional as F
import torch.nn as nn
import torch
import cv2

#读取一张图片,并转换成[1,3,224,224]的float张量并归一化
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

#定义并加载resnet34模型在imagenet预训练的权重
model = resnet34(pretrained=True)
model.eval()
#查看模型预测该付图的结果
output = model(input_tensor)
output = F.softmax(output,1)
print("模型预测结果为第{}类,置信度为{}".format(torch.argmax(output),output.max()))

#生成pt模型,按照官网来即可
model=model.to(torch.device("cpu"))
model.eval()
var=torch.ones((1,3,224,224))
traced_script_module = torch.jit.trace(model, var)
traced_script_module.save("resnet34.pt")

输出结果为:

模型预测结果为第723类,置信度为0.5916505455970764

代码运行结束即可生成.pt文件。

4.2 VS

#include<opencv2/opencv.hpp>
#include <torch/torch.h>
#include <torch/script.h> 

int main()
{
	//定义使用cuda
	auto device = torch::Device(torch::kCUDA,0);
	//读取图片
	auto image = cv::imread("你的地址\\flower.jpg");
	//缩放至指定大小
	cv::resize(image, image, cv::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("你的地址\\resnet34.pt");
	model.to(device);
	model.eval();
	//前向传播
	auto output = model.forward({input_tensor.to(device)}).toTensor();
	output = torch::softmax(output, 1);
	std::cout << "模型预测结果为第" << torch::argmax(output) << "类,置信度为" << output.max() << std::endl;
	return 0;
}

编译执行,代码的输出结果为:

模型预测结果为第723
[ CUDALongType{} ]类,置信度为0.591652
[ CUDAFloatType{} ]

5 报错处理

错误1:无法使用GPU、model.eval()无法执行

处理方法

错误2:需要编译器标志"/std:c++17"

打开属性页,设置C++语音标准为C++ 17
在这里插入图片描述

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值