LibTorch何许人也?
从PyTorch进入1.0时代起,faceBook就上架了Pytorch支持C++导入模型的torch.jit API, 用于生成支持C++ API的模型文件,那么这个C++ API 叫什么呢?他就是本期主角LibTorch

作为系列篇的第一篇,我们先讲讲环境配置。
同样和Python端有没有GPU分配置无GPU的Libtorch和有GPU的LibTorch。作者仅配置过无GPU的LibTorch,这里也以配置无GPU的LibTorch为例。有GPU的配置方法应该类似。(不代表作者没有GPU哈)


Updated On 2020.1.4
我重新在新电脑上配置了一番,发现只有有几步操作不对,并且少了一些操作。现在做更正。现在的内容全是正确的了。

下载库文件

打开官网,系统选择windows,库选择LibTorch,同时发现语言自动切换为C++,因为LibTorch仅支持C++,CUDA选择None,意味着下载无GPU的LibTorch库。下载Release版本。目前版本是1.3

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_windows配置


下载完了选择解压在一个文件夹中。解压之后应该是这样的。我解压在了LibTorch文件夹中。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_Pytorch生成的模型进行CPU部署_02

安装VS2017或者VS2015

我们可能在一些其他教程中看到别人是使用Cmake来生成项目的,可是这个玩意对于不熟悉Cmake写法的人来说,理解起来太吃力,而且不支持调试,天知道我写的代码对不对,没有调试该怎么活。
有没有办法能像配置opencv库的方式,配置LibTorch呢。当然有!!

新建VS2017空项目。作者以 VS2015为例子。

开始配置

新建VS空项目。打开属性管理器,在release| Win x64那一栏右击添加新项目属性表

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_windows配置_03


然后给这个属性表命名,以及设置好存放地址。以后有其他工程,只需要把这个属性表添加到那个工程里面,就算是配置好LibTorch了,很方便。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_Pytorch生成的模型进行CPU部署_04

接下来分三步。

第一步,指定包含目录和库目录。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_windows配置_05


第二步,链接器->常规, 配置附加库目录

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_Pytorch生成的模型进行CPU部署_06

第三步,链接器-> 输入,配置附加依赖项。有两个文件,分别是c10.lib, torch.lib, caffe2.lib(caffe2.lib这个文件在1.3版本消失了),添加进去。这是两个文件在解压得到的文件夹下的lib目录下。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_#include_07


然后写进去就行了。和配置opencv附加依赖项的方式一致。只不过我们以相对路径,选择在项目目录中的这三个文件。所以对于新建其他项目,还是要copy这两个文件到其他项目中。注意,要从解压的lib目录下,对于每个项目,都要复制这五个文件,复制到和源.cpp一样的目录下。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_C++_08


第四步:

双击Release | x64, C++ ->常规 -> SDL检测 设置为否

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_#include_09

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_C++_10


Pytorch生成的模型进行CPU部署 pytorch模型c++部署_LibTorch_11


别忘了运行环境也要设置为Release x64。

测试

新建源文件。
这三个头文件必不可少。

#include <torch/script.h>
#include <iostream>
#include <memory>

#include <torch/script.h> // One-stop header.
#include <iostream>
#include <memory>
int main() {
	torch::Tensor tensor = torch::rand({ 2, 3 });
	std::cout << tensor << std::endl;
}

然后运行,能输出就成功配置了。

Pytorch生成的模型进行CPU部署 pytorch模型c++部署_C++_12


注意cmd中显示类型是CPUType,因为我们配置的是CPU版的LibTorch啊。