参考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模式运行程序。

图片说明