/ PYTORCH, PADDLE, CPLUSPLUS, DEEPLEARNING

windows下搭建libtorch和paddle的C++环境搭建

参考文章:NSTALLING C++ DISTRIBUTIONS OF PYTORCH安装与编译 Windows 预测库在C++中加载PYTORCH模型

一. 必要软件

  • vs2019:paddle和torch这里的编译都是由Visual Studio 2019完成的
  • libtorch:直接在官网上进行下载压缩包,这里说明下分为release和debug版本,直接下载release版本即可。
  • paddle:这里选择2.0-rc1的cpu版本的直接进行解压安装。
  • opencv:windows下直接安装exe到本地即可。
  • cmake:直接用scoop安装scoop install cmake

二. 安装libtorch环境

2.1 构建一个C++项目

目录层级如下:

├─example-app
	 ├─build // 新建一个空目录
	 ├─CMakeLists.txt // 构建一个cmakelist
	 └─example-app.cpp // 构建一个cpp文件用于测试

其中,CMakeList.txt具体设置如下:

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

# add CMAKE_PREFIX_PATH
#增加opencv和libtorch的路径
list(APPEND CMAKE_PREFIX_PATH "D:/software/opencv/opencv/build/x64/vc15/lib") 
# 注意这里如果是vs2015的版本,需要改成 /build/x64/vc14/lib
list(APPEND CMAKE_PREFIX_PATH "D:/software/libtorch")


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)

C++测试代码(example-app.cpp)如下(测试opencv和libtorch):

#include <torch/torch.h>
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main() {
  torch::Tensor tensor = torch::rand({2, 3});
  std::cout << tensor << std::endl;
  std::cout << "ok!" << std::endl;
  Mat img = imread("1.jpg");
  imshow("1",img);
  waitKey(0);
  return 0;
}

2.2 编译和生成项目

  • 进入到build目录:cd build
  • 利用cmake进行编译: cmake ..
  • 编译顺利的话,就可以看到build目录下生成了如下所示:

  • 利用vs2019打开项目example-app.sln
  • 点击example-app 右键选择设为启动项,并且将版本选择release版本,点击本地Windows调试器

2.3 调试问题的解决

  • 报错信息:由于找不到c10.dlltorch.dll这种找不到dll文件的,直接将dll文件(这些dll文件都在libtorch/lib路径下)复制到build/release文件夹下
  • opencv_world3411.dllopencv_ffmpeg3411_64.dll等都在opencv的opencv\opencv\build\x64\vc15\lib路径下。
  • 这里注意测试opencv的时候,需要将图片放置到和example-app.vcxproj同级目录下

2.4 exe生成文件的平台移植

  • 如果需要将生成的exe文件移植到其他PC上面,只需要将release文件夹下所有文件(包括dll文件和exe文件)复制到其他PC即可。
  • 生成的exe文件在找图片的时候也是同级目录下找,因此需要将图片放置到exe文件的同级目录下。

2.5 pytorch模型在C++平台的使用

PyTorch模型从Python到C++的转换由Torch Script实现。Torch Script是PyTorch模型的一种表示,可由Torch Script编译器理解,编译和序列化。一般利用trace将PyTorch模型转换为Torch脚本,必须将模型的实例以及样本输入传递给torch.jit.trace函数。这将生成一个 torch.jit.ScriptModule对象,并在模块的forward方法中嵌入模型评估的跟踪。

三. 安装paddle的C++环境

3.1 下载安装paddle

这里官网有2种方式在windows上安装paddle环境:一个是通过git下载paddle源码进行编译安装,另一种直接从官网下载zip编译好的文件(本文使用该种方式)。

3.2 结合paddleOCR测试并使用paddle预测库

  • paddleOCR的git地址:https://github.com/PaddlePaddle/PaddleOCR
  • 下载到本地之后,cd PaddleOCR\deploy\cpp_infer,修改CMakeList.txt文件
SET(PADDLE_LIB "D:/software/paddle_inference_install_dir") # 这里是下载的paddle预测库的路径
SET(OPENCV_DIR "D:/software/opencv/opencv") # 这里是下载的opencv的路径
find_package(OpenCV REQUIRED)
  • 新建一个build文件夹:mkdir build
  • 进入build:cd build , 编译:cmake ..
  • 同样的利用vs2019打开项目ocr_system.sln,生成即可。
  • 这里注意需要将paddle_fluid.dll放入到Release目录下。