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