win7 vs2017 程序报错_windows + VS2017 配置libpytorch

83a342055e6927fb61a3b007ed598d9f.png

因为项目对实时性的要求,尝试一波c++直接调用libpytorch。实现的同时,整理了网上的相关资料,希望对效率追求的同学提供一份帮助。

0.下载准备

下载安装VS2017 和 cmake (3.0版本以上)

记得把bin目录添加到环境变量path中。这里解释一下,目前还不能直接使用VS直接配置成功libpytorch(如果读者成功了可以@我,这篇文档也就完成了使命就删了),而是先借助cmake先编译,达到曲线救国。

0a0b85401d58a45e68f67c4e6037f8db.png

下载安装opencv

可以参考博客:https://blog.csdn.net/qq_41175905/article/details/80560429,该博客中写的很详细。推荐opencv4.1.0

下载libtorch

下载地址:https://pytorch.org/get-started/locally/,这个根据自己情况选择下载,因为我自己的是cuda10,并且我选择使用release版本,所以我的选择如下:

1bc21c6f6633f9f8df249365c32481d5.png

1. 准备文件

接下来使用cmake来进行配置吧,我们首先自己创建一个文件夹,存放我们的主程序main.cpp还有CMakeLists.txt,然后我们再创建一个build的空文件夹,之后我们编译好的文件都存放在build文件夹里头。

目录结构大概就是这样,假设这个文件夹存放在D盘:

example:

  • build (文件夹)
  • torchscript.py
  • model.pt(由 python torchscript.py 生成)
  • main.cpp
  • CMakeLists.txt

touchscript.py

import torch
import torchvision

# An instance of your model.
model = torchvision.models.resnet18()

# 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("model.pt")

通过python touchscript.py ,则会生成我们上面main.cpp 需要的model.pt文件。

main.cpp

#include <torch/script.h> // One-stop header.
#include <iostream>
#include <memory>

int main() {
  // Deserialize the ScriptModule from a file using torch::jit::load().
  torch::jit::script::Module module  = torch::jit::load("F:/LabSources/PytorchCmake/model.pt");

  assert(module != nullptr);
  std::cout << "okn";
  // 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.
  torch::Tensor output = module.forward(inputs).toTensor();

  std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << 'n';
  while (1);
}

这是目前比较新的代码,旧的代码因为是测试版会出现语法错误,见 https://blog.csdn.net/qq_33507306/article/details/104427134

CMakeLists.txt

cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(example-app)

set(CMAKE_PREFIX_PATH "D:Space.DeveloplibtorchsharecmakeTorch")
find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)

if(NOT Torch_FOUND)
    message(FATAL_ERROR "Pytorch Not Found!")
endif(NOT Torch_FOUND)

message(STATUS "Pytorch status:")
message(STATUS "    libraries: ${TORCH_LIBRARIES}")

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")


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

其中,如果没有set(CMAKE_PREFIX_PATH "D:Space.Develop libtorchsharecmakeTorch"),可能有的同学会报错找不到Torch的错误。

2. Cmake编译

Cmake有GUI编译和命令行编译,本文主要操作GUI为主,命令行编译请见https://zhuanlan.zhihu.com/p/55292836。

首先我们打开cmake软件,然后打开我们创建的目录,我的目录是F:/LabSource/Pytorch Cmake, 填好两个目录(创建目录和其中的bin目录)。

a50c6c20ff44f080c5401bfa37b8df2d.png

选择generator,选择64位,因为CUDA不支持32位运算

a378ded8e89fb0b3083b242614f83a46.png

点击Configure,没问题的话再点击Configure,然后再点击Generate就成功了。

如果遇到以下错误:

4e3e90971f5ef88b9fa169bd241ad8ee.png

则我们根据错误,遇到下载缺少的资源,配在红色区域。(红色区域并不是都是错误,引起错误的是报错信息里日志里提示的缺少资源的NotFound)。

解决办法: 上图所示问题需要我们下载对应版本的CUDNN,并将资源配置(include、lib等)在对应的变量里。如下:

52037dcf358a61ae033e3b9902843afc.png

最后,如果日志出现warning,虽然也是红色警报,但是也可以继续Generate。进入下一步。

3. VS2017启动

然后打开build文件夹中的vcxporj文件,设置项目为启动项目,并更改为release的x64模式,生成解决方案。

e032652f6d84a3f6e17912b30d47b048.png

最后,还可能遇到两中情况:

1.如果提示缺少dll,可以把LibTorch的lib文件夹加入环境变量,

可以把lib文件夹的dll全拷到cpp目录下。

2.无法定位程序输入点到xxx.dll,

解决办法: 则到pytorchlib下面找到放到C:WindowsSystem32和C:WindowsSysWOW64下即可。

4.输出

已经配置好啦,希望大家都配置成功。

9197b1c8c5f2574866322fe4be142ef9.png

好的教程链接,本文基于以下教程更新:

https://blog.csdn.net/gulingfengze/article/details/92013360

https://zhuanlan.zhihu.com/p/68901339

https://zhuanlan.zhihu.com/p/55292836

问题解决链接:

https://www.cnblogs.com/yeshengCqupt/p/10448476.html

https://www.lizenghai.com/archives/29637.html

https://blog.csdn.net/qq_33507306/article/details/104427134

https://www.cnblogs.com/xym4869/p/11255598.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值