WIN10+VS2019+libtorch(CPU版)配置

配置环境:
–系统:Win10
–开发工具:VS2019
–opencv版本:3.4.14
–torch版本:1.4
–torchvision版本:0.5.0

主要步骤:
–1.安装libtorch
–2.python版torch权重文件生成(应用于后续实验)
–3.VS中libtorch配置

第一部分:安装libtorch
(1)直接上pytorch官网下载libtorch,其中libtorch尽量和环境下的torch版本一致;如下图所示,可根据自己下载的libtorch版本更改红线中版本号即可,本文主要是下载1.4.0的release版本
在这里插入图片描述
在这里插入图片描述
第二部分:python版torch权重文件生成(应用于后续实验)
(1)使用以下代码生成 “.pt” 权重文件,以ResNet34分类网络为例,代码如下所示:
运行以下代码,在本地获取 "resnet34.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("dog.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")

第三部分:VS中libtorch配置
(1)VS中Opencv配置可参考博客
(2)打开VS2019->新建空白c++项目->右键新建项 “main.cpp”;同时,在项目的管理器中设置项目编译为Release,平台选择x64在这里插入图片描述
(3)项目右键属性,配置 “VC++目录” 和 “链接器”
①在配置"VC++目录"中:
– 选择包含目录:添加libtorch文件路径:“D:\vs_config\libtorch_release\include” 和 “D:\vs_config\libtorch_release\include\torch\csrc\api\include”;
– 选择库目录:添加libtorch文件路径 “D:\vs_config\libtorch_release\lib”;
②配置链接器,“链接器->输入->附加依赖项”:
将libtorch路径 “D:\vs_config\libtorch_release\lib” 下的 “.lib” 文件都加入 “附加依赖项”;
在这里插入图片描述
在这里插入图片描述
(4)动态链接库dll文件放置
将libtorch路径 “D:\vs_config\libtorch_release\lib” 下的 “.dll” 文件直接复制到VS2019项目的执行目录中
另外,也可以直接libtorch中的lib文件夹路径添加到path环境变量中;
在这里插入图片描述
在这里插入图片描述
(5)测试
测试代码如下:

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

int main()
{
	//定义使用cuda
	//auto device = torch::Device(torch::kCUDA, 0);
	auto device = torch::Device(torch::kCPU);
	//读取图片
	auto image = cv::imread("E:/C++_workplace/libtorch_epx/demo/dog.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("E:/C++_workplace/libtorch_epx/demo/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;
}

测试结果:
在这里插入图片描述
本文主要参考博客
欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值