Windows上用C++调用PyTorch模型

由于网上的教程不够具体,我根据官网的教程自己跑了一遍官网的demo,遇到了的一些坑,记录一下。

这是官网的教程:https://pytorch.org/tutorials/advanced/cpp_export.html#step-4-executing-the-script-module-in-c

Step1:Converting Your PyTorch Model to Torch Script

根据自己的模型选择对应的转换方法,一种是通过Trace的方法,调用torch.jit.trace(model,example)函数,可以获得一个torch.jit.ScriptModule对象。第二种是通过注释的方式,由于模型使用依赖于输入的控制流,所以tracing不合适了,所以用注解的方式转成ScriptModule对象。

Step2:Serializing Your Script Module to a File

python中用save方法来将模型保存到.pt文件中。

Step3:Loading Your Script Module in C++

写一个.cpp文件,这个文件中的内容就是官网上的A Minimal C++ Application,复制粘贴生成就完事了。(如果是在vs中写的,出现错误,不用管,因为项目中没有添加库目录,包含目录和附加依赖项,这个不用管,因为我们只需要.cpp文件就行。)

接下来用cmake来构建项目。所需要的有LibTorch库,还有就是cmake的环境配一下,不然cmd中不能执行cmake命令。

我们先创建一个CMakeLists.txt, 加入以下内容:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(custom_ops)

find_package(Torch REQUIRED)

add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)

 我们这部分内容详细分析一下:

        第一句意思是对cmake版本的最低要求做了限制。

        第二句意思是创建的项目名称。

        第三句意思是找到LibTorch包,这个照抄。

        第四句意思是执行刚才我们编写的.cpp文件,同时生成一个目标target,名称为example-app

        第五句意思是将目标和LibTorch库链接起来。

        第六句意思是设置属性,照抄。

接着,我们把CMakeLists.txt和.cpp文件(我们这里就命名为example-app.cpp,和官网的一样)放在同一个文件夹下面,后面我们执行cmake命令时,这个目录就是工作目录,我们把这个文件夹命名为example-app。

准备工作做完了,我们现在在cmd下先进入到example-app目录下,然后

mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/path/to/libtorch ..
cmake --build . --config Release

第三行的

/path/to/libtorch

是LibTorch的完整路径。

最后一行命令含义:. 的意思是路径名,后面是配置的版本,默认是Debug。

成功后结果应该是这样的:

 到这里为止,项目构建好了。。。

        注意1:打开项目,运行项目显示拒绝访问,把ALL_BUILD项目给删了就能运行。ALL_BUILD有啥作用呢?这边引用博客上的一段话: 一般CMake 在Vision studio 上 构建的工程(.sln “solution”)包含 三个工程(project),分别是:ALL_BUILD; 工程本身如:HelloCMake; ZERO_CHECK。HelloCMake就不用说了,自己要建立的那个工程;ALL_BUILD是管理整个项目的工程;ZERO_CHECK是实时监视CMakeLists.txt文件变化的工程,一旦CMakeLists.txt里的内容发生了任何变化,ZERO_CHECK就会告诉编译器要重新构建整个工程环境。详见)http://blog.163.com/jacky_ling0/blog/static/1373925712011072375418/?latestBlog

        注意2:我们需要在项目属性里设置命令参数,这个命令参数就是.pt文件所在的路径。

用cmake的好处可以看这篇文章 https://blog.csdn.net/bandaoyu/article/details/89031672

Step4:: Executing the Script Module in C++

接下来我们就可以测试一下C++项目中的模型了。

在main函数里添加

// 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(/*dim=*/1, /*start=*/0, /*end=*/5) << '\n';

再运行就能得到结果了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值