pytorch的c++接口,PyTorch C ++ API - 也称为LibTorch,能够将pytorch训练的模型在C++环境下进行部署。它可以直接从官网下载得到 Start Locally | PyTorch
我的电脑没有GPU,因此计算模式选择CPU,根据下面的下载链接选择debug版或者release版本,下载解压即可。
需要注意的是,这里一定要使用VS2017,因为pytorch中使用了C++14标准,老版本的VS2015对标准支持不完全。
新建libtorch属性表
有两个位置需要配准,VC++目录-包含目录和库目录,和链接器->输入->附加依赖项
包含目录是libtorch解压后的include目录
库目录是libtorch解压后的lib目录
附加依赖项是lib目录中的dll文件
创建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目录下即可
注意,如果编译报std相关的错误,只需要点击
调试->当前项目属性->C/C++->语言->符合模式 改成否 即可
测试通过!
注意这里需要进行模型转换!否则会报错:
模型转换有两种方式,可以参考这篇文章
在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博客