参考https://pytorch.apachecn.org/docs/1.4/30.html
1. 开发环境
Visual Studio 2017 (切记不能用Visual Studio 2015和Visual Studio 2013)。
2. 转换Pytorch模型
import torch
import torchvision
# An instance of your model.
model = torchvision.models.resnet50()
# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 224, 224)
# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("resnet50.pt")注:生成的resnet50.pt将会用于C++项目中。
3. 准备工作
(1) 在Pytorch官网下载所需要的Libtorch版本,在此我们选择Stable(1.5),CPU,Release版本(百度网盘:https://pan.baidu.com/s/16P6OiwQnwQ6Vn4bNrUi4Nw,提取码:ip87)。
(2) 解压得到一个新的文件夹,后面我们会主要用到/include和/lib两个文件夹的绝对路径。
4. 构建C++应用程序
(1) 用VS 2017新建一个C++项目(LibTorchTest),点击项目右键属性,将C++语言标准设置为C++ 14(需要结合下载LibTorch的版本)。
(2) 在属性管理器中(发现没有这个可以在菜单栏“视图->其他窗口->属性管理器”调出)新添加一个属性表,最好不要在Microsoft.Cpp.x64.user里直接设置。
(3) 进行配置属性(类似opencv的配置方法),VC++目录下的“包含目录”设置为前面下载好的libtorch中“/include文件夹的路径”,“库目录”设置为“/lib文件夹的路径”,“链接器->输入->附加依赖项”进行添加如下的库。
asmjit.lib c10.lib caffe2_detectron_ops.lib caffe2_module_test_dynamic.lib clog.lib cpuinfo.lib fbgemm.lib libprotobuf.lib libprotobuf-lite.lib libprotoc.lib mkldnn.lib torch.lib torch_cpu.lib
(4) 编写调用resnet.pt模型的测试程序。
#include <torch/script.h> // One-stop header.
#include <iostream>
#include <memory>
int main(void) {
// Deserialize the ScriptModule from a file using torch::jit::load().
torch::jit::script::Module module = torch::jit::load("F:/LibTorch/resnet50.pt");
assert(module != nullptr);
std::cout << "ok\n";
// Create a vector of inputs.
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({ 1, 3, 224, 224 }));
// Execute the model and turn its output into a tensor.
at::Tensor output = module.forward(inputs).toTensor();
std::cout << output.slice(1, 0, 5) << '\n';
return 0;
}(5) 将/lib文件夹下所有的.dll文件拷贝到/x64/release文件夹下。
(6) 使用Release,x64模式运行程序。

京公网安备 11010502036488号