本文记录如何利用C++来调用PyTorch训练好的模型,其实也是利用官方强大的LibTorch库。
LibTorch的安装
虽然说安装,其实就是下载官方的LibTorch包而已,从[官方网站](PyTorch)中选择PyTorch ,libtorch,以及cuda的版本,其中会出现下载链接
上图中有两个下载链接,一个是release版本一个debug版本,有C++开发经验的小伙伴应该了解如何使用这种库:
下载好找个路径解压。解压完放在那不动!!!
我已经把解压文件移到我的D盘并修改了名称,这里面include是配置libtorch所需的头文件,在vs2019中配置环境的时候要添加进去;lib中有.lib和.dll两种文件,安装过opencv的小伙伴都知道,这两种文件一般是分到两个文件夹中的,.lib路径要在vs中进行设置,.dll一般添加到环境变量中,或者COPY到项目vcxproj文件所在的
目录中,我选择后者
使用VS2019创建一个空项目:
之所以使用VS2019主要原因是低版本的VS对C++新标准支持的程度可能比较低,在使用新版本库的时候可能会出现很多语法错误,这个是需要特别注意的。之前使用vs2017,出现不支持动态数组定义,不支持C99语法等:如 C10_DEFINE_DEPRECATED_USING Err code:E1866
踩了很多坑。
(1)设置配置管理器:
我安装的LibTorch是Debug版本的,所以选择Debug模式;Pytorch官网提供的库都是X64的,所以还要设置编译平台为X64。
(2)设置头文件路径:
我的工程里还用了opencv,所以在附加包含目录里还有opencv头文件路径,如果只是用LibTorch的话添加前两行就可以了。特别需要说明的是,这两个头文件路径中常用的头文件分别是:
#include "torch/torch.h"
#include "torch/script.h"
(3)设置链接库:
添加所需的lib文件
LibTorch简单C++示例
#include "torch/torch.h"
#include "torch/script.h"
int main()
{
torch::Tensor output = torch::randn({ 3,2 });
std::cout << output;
return 0;
}
将以下DLL文件复制到项目vcxproj文件所在目录
运行,结果如下: