【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型

安装libtorch

        pytorch的c++接口,PyTorch C ++ API - 也称为LibTorch,能够将pytorch训练的模型在C++环境下进行部署。它可以直接从官网下载得到 Start Locally | PyTorch

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第1张图片

 我的电脑没有GPU,因此计算模式选择CPU,根据下面的下载链接选择debug版或者release版本,下载解压即可。

新建VS2017项目

需要注意的是,这里一定要使用VS2017,因为pytorch中使用了C++14标准,老版本的VS2015对标准支持不完全。

新建libtorch属性表

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第2张图片

 有两个位置需要配准,VC++目录-包含目录和库目录,和链接器->输入->附加依赖项

包含目录是libtorch解压后的include目录

库目录是libtorch解压后的lib目录

附加依赖项是lib目录中的dll文件

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第3张图片

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第4张图片

 创建测试文件

创建main.cpp 编写测试代码

#include
#include

int main() {
	auto t1 = torch::tensor({ 1,2,3,4,5,6,7,8,9 }).reshape({ 3,3 });
	auto t2 = torch::tensor({ 1,0,2,6,1,1,5,3,2 }).reshape({ 3,3 });
	auto t3 = t1.mul(t2);
	std::cout << t3 << std::endl;

	system("pause");
}

以release模式编译运行,会报找不到c10.dll的错误,此时将lib目录下的所有dll文件拷贝到项目的release目录下即可

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第5张图片

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第6张图片

注意,如果编译报std相关的错误,只需要点击

调试->当前项目属性->C/C++->语言->符合模式 改成否 即可

测试通过!

【pytorch】在win10 VS2017环境下使用libtorch部署pytorch模型_第7张图片

保存python环境下训练好的模型

注意这里需要进行模型转换!否则会报错:

有未经处理的异常:Microsoft C++异常:c10::Error,位于内存位置xxx处

模型转换有两种方式,可以参考这篇文章

在windows10下安装libtorch(pytorch1.0)_adyf3的博客-CSDN博客_libtorch

这里给出我的示例代码,保存后得到model.pt文件

import torch
from model import HardNet

model = HardNet()
model.load_state_dict(torch.load("model-train.pt"))
model.cpu().eval()

traced_script_module = torch.jit.trace(model, torch.rand(1,1,32,32))
traced_script_module.save("model.pt")

 测试模型读取和预测

int main() {
	torch::jit::script::Module module = torch::jit::load("model.pt");
	assert(module != nullptr);
	std::cout << "Load model successful!" << std::endl;
	module.eval();

	cv::Mat image = cv::imread("000000.jpg", 0);
	cv::resize(image, image, cv::Size(32, 32));
	torch::Tensor img_tensor = torch::from_blob(image.data, { 1, image.rows, image.cols, 1 }, torch::kByte).to(torch::kCPU);
	img_tensor = img_tensor.permute({ 0, 3, 1, 2 });
	img_tensor = img_tensor.toType(torch::kFloat);
	img_tensor = img_tensor.div(255);

	torch::Tensor output = module.forward({ img_tensor }).toTensor();
	std::vector v(output.data_ptr(), output.data_ptr() + output.numel());
	std::cout << v << std::endl;
}

类似的测试代码很多,可以参考:

利用LibTorch部署PyTorch模型 - 知乎

吐血总结:windows下libtorch调用pytorch模型,并读取本地图片进行预测_biao169的博客-CSDN博客

你可能感兴趣的:(机器学习,pytorch,libtorch,VS2017,libtorch,win10使用libtorch)