Pytorch目前是Facebook开发的深度学习框架,该框架具有环境搭建简单,接口方便等优点。该框架下具有两套巨口(python训练和预测接口和C++对应预测接口)。本文今天给大家介绍如何在VS2017环境下调用python训练好的模型文件进行预测。
我的系统和软件环境(本文默认你已经正确安装了以下的环境):
- 1. Windows10 专业版
- 2. CUDA10.1, CUDNN7.5.1
- 3. Visual studio2017
- 4. pytorch和libtorch,版本为1.0.1这里强调一下,pytorch的的版本和libtorch需要对应,否则一定会出现pytorch训练好的模型,C++的libtorch无法调用的情况。具体怎么将pytorch训练好的模型转换成C++对应的接口,将在其他篇幅进行介绍,网上也有很多。
- 可以使用如下的方式查看自己pytorch的版本。
- 5. opencv
- 6. cmake
使用cmake配置环境的方式
- 第一步:在电脑上安装CMake工具,并配相应的环境变量,进入cmd命令行键入:cmake --version。查看对应的版本:
- 新建一个main.cpp函数,使用最简单的libtorch框架写几句话即可,代码如下:
-
#include <torch/torch.h> #include "torch/script.h" #include <iostream> #include <chrono> #include <time.h> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace std; int main() { // 读取我们的权重信息 std::shared_ptr<torch::jit::script::Module> module = torch::jit::load("./models/test.pt"); module->to(at::kCUDA); assert(module != nullptr); // 建立一个输入,维度为(1,3,224,224),并移动至cuda std::vector<torch::jit::IValue> inputs; inputs.push_back(torch::ones({1, 3, 224, 224}).to(at::kCUDA)); // 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'; }
- 新建一个makelist文件用于执行Cmake编译,信息如下:
-
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(test) 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(test test.cpp) target_link_libraries(test ${TORCH_LIBRARIES} ${OpenCV_LIBS}) set_property(TARGET test PROPERTY CXX_STANDARD 11)
- 新建一个build目录,并将libtorch和opencv的源代码放在同级的目录下,在cmd命令行进入到build目录下,最终的目录结构如下:
- 在命令行键入如下命令:
cmake -DCMAKE_PREFIX_PATH=K:\libtorch_test\opencv\build\x64\vc15\lib;K:\libtorch_test\libtorch -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 15 Win64" ..
其中: K:\libtorch_test\opencv\build\x64\vc15\lib;: 表示opencv库的路径
K:\libtorch_test\libtorch:libtorch的路径
Visual Studio 15 Win64:使用visual studio2017 x64
- 运行成功后,进入build目录下,此时会生成如下信息:
- 双击打开test.sln使用VS2017编译test即可。
- 由于opencv 和libtorch太大了,上传不了,可以将下载好的opencv和libtorch按照上面的目录进行放置,注意编译的时候需要在VS环境下将对应的oepncv和libtorch目录改成你工程所在盘的目录。由于大家可能不一定能下载到libtorch对应1.0.1的版本,我下面放了两个下载地址,一个是工程的下载地址和libtorch1.0.1的下载地址,opencv网上很多版本随便。
- 工程下载地址:https://download.youkuaiyun.com/download/xiaolintyd/11673507
- libtorch1.0.1下载地址:https://pan.baidu.com/s/1nJuOfe74zEAwIxnO2yE-FA 提取码:vvro