yolov5 + tensorRT + windows GPU C++部署

yolov5 + tensorRT + C++ windows GPU部署

  • 1. 环境介绍
    • 2. 软件安装
      • 2.1 yolov5安装:
      • 2.2 TensorRT安装:
      • 2.3 验证TensorRT安装:
      • 2.4 Cmake安装
      • 2.5 OpenCV安装
      • 2.6 TensorRTX安装
    • 3. Cmake编译TensorRTX中的yolov5
      • 3.1 编译前准备:
      • 3.2 Cmake编译yolov5 vs工程

1. 环境介绍

yolov5在win10上的部署,yolov5原始版本为pytorch,libtorch在windows下的部署折腾了半天放弃,转而拥抱tensorRT。在此记录一下整个部署过程。
pytorch的inference环境

  • win10
  • cuda10.2
  • pytorch1.8
  • python3.8
  • cudnn7.6.5
  • yolov5 v3.1
    tensorRT推理环境
  • tensorRT 7.0:
  •  TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6(与上面的cuda和cudnn软件版本一致)
    
  • VS2017
  • OpenCV 3.4.0

2. 软件安装

安装好pytorch的gpu的环境,这部分属于python环境部署,这里不做详细介绍。
cuda和cudnn的安装网上资料很多,我就不截图了。

2.1 yolov5安装:

链接地址:yolov5 v3.1

  1. 下载yolo源码
  • git clone https://github.com/ultralytics/yolov5.git
  1. 安装依赖包
  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  1. 下载训练权重文件,并并放置在weights文件夹下
    yolov5s.pt:权重下载

2.2 TensorRT安装:

  1. 英伟达官网下载与cuda和cudnn一致的TensorRT
    我这里的版本如下
    TensorRT版本
  2. 新建文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6(个人自定义的,下文均称为TensorRT目录
  3. 将压缩包解压,解压后文件放入文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6如下:
    yolov5 + tensorRT + windows GPU C++部署_第1张图片
  4. 将**TensorRT目录**\include下中所有头文件(*.h),复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
  5. 将**TensorRT目录**\lib下所有 .lib文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
  6. 将**TensorRT目录**\lib下中所有dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
  7. 完成TensorRT的安装

2.3 验证TensorRT安装:

1 . 用VS2017打开TensorRT目录\samples\sampleMNIST
yolov5 + tensorRT + windows GPU C++部署_第2张图片
这里如果出现找不到 Windows SDK 版本10.0.17134.0,vs目标平台版本不一致问题,按照提示下载了一个对应版本安装,问题就解决了。参考链接

  1. 用python 进入TensorRT目录\data\mnist目录,运行
python download_pgms.py

下载完后会出现.pgm文件。
yolov5 + tensorRT + windows GPU C++部署_第3张图片

  1. 配置VS中的运行环境。
  • 在项目属性中配置可执行文件目录:将*TensorRT目录/lib目录添加进入可执行文件目录yolov5 + tensorRT + windows GPU C++部署_第4张图片
    yolov5 + tensorRT + windows GPU C++部署_第5张图片
  1. 点击C/C++ -> 常规 -> 附加包含目录添加路径:TensorRT目录\include
    yolov5 + tensorRT + windows GPU C++部署_第6张图片
  2. 点击VC/C++目录 -> 库目录,增加TensorRT目录\lib
    yolov5 + tensorRT + windows GPU C++部署_第7张图片
  3. 点击链接器->输入->附加依赖项:
    yolov5 + tensorRT + windows GPU C++部署_第8张图片 添加TensorRT目录\lib 目录中的所有.lib文件和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64中所有.lib文件
    yolov5 + tensorRT + windows GPU C++部署_第9张图片
    配置完成后运行项目,会出现如下图片,至此就配置完成了。
    yolov5 + tensorRT + windows GPU C++部署_第10张图片

2.4 Cmake安装

  1. 去Cmake官网下载,我这里的版本是3.16,Cmake3.16下载链接。
  2. 下载后,解压。
    yolov5 + tensorRT + windows GPU C++部署_第11张图片
  3. 添加Cmake环境变量,路径为D:\softwareFai\cmake-3.16.0-rc1-win64-x64\cmake-3.16.0-rc1-win64-x64\bin
    yolov5 + tensorRT + windows GPU C++部署_第12张图片
  4. 启动Cmake,进入bin目录,点击cmake-gui.exe
    yolov5 + tensorRT + windows GPU C++部署_第13张图片
    yolov5 + tensorRT + windows GPU C++部署_第14张图片

2.5 OpenCV安装

opencv很早以前就装了,按照网上的教程安装,配置完环境变量。
e-g OpenCV的安装目录如下,后面会有相关设置
yolov5 + tensorRT + windows GPU C++部署_第15张图片

yolov5 + tensorRT + windows GPU C++部署_第16张图片

2.6 TensorRTX安装

TensorRTX是将pytorch模型转化为TensorRT格式的模式并部署。

  1. 去github上直接下载tensorRTX源码,tensorRTX地址
    git clone -b yolov5-v3.1 https://github.com/wang-xinyu/tensorrtx.gittensorRTX下载,版本与yolov5一致
  2. 重命名文件夹,如下图
    yolov5 + tensorRT + windows GPU C++部署_第17张图片

3. Cmake编译TensorRTX中的yolov5

3.1 编译前准备:

  1. D:/github/tensorrtx_yolov5_3/yolov5目录中新建include目录

  2. 下载文件dirent.h, 下载地址
    yolov5 + tensorRT + windows GPU C++部署_第18张图片

  3. dirent.h文件放入D:/github/tensorrtx_yolov5_3/yolov5/include目录中

  4. D:/github/tensorrtx_yolov5_3/yolov5目录中新建build目录

  5. 生成yolov5.wts文件。通过运行程序gen_wts.py ,将yolov5s.pt转为.wts模型
    将tensorrtx源码中的gen_wts.py复制到yolov5源码中并运行,生成.wts模型。

    在这里插入图片描述
    yolov5 + tensorRT + windows GPU C++部署_第19张图片

  6. yolov5s.wts 文件放入build目录

3.2 Cmake编译yolov5 vs工程

tensorRTx中的yolov5目录如下
yolov5 + tensorRT + windows GPU C++部署_第20张图片

1. 修改Cmake文件
1.1 参考github上的指南:How to Compile and Run on Windows
1.2 删除原有的CMakeLists.txt文件(原有的),将上述地址上的Cmake文件复制命名为CMakeLists.txt
1.3 Cmake文件如下,一共有8个地方修改,#标注出来了。

	#1 project name, set according to your project name (根据需要设置项目名称)
	#2 your opencv path (改为**opencv**路径)
	#3 your tensorrt path (改为**tensorrt**路径)
	#4 source file needed, including .cpp .cu .h   (没有改)
	#5-#8 libs needed (没有改)
cmake_minimum_required(VERSION 2.6)

project(yolov5) # 1
set(OpenCV_DIR "D:\\opencv\\opencv346\\build")  #2
set(TRT_DIR "D:\\TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6\\TensorRT-7.0.0.11")  #3

add_definitions(-std=c++11)
option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads)

# setup CUDA
find_package(CUDA REQUIRED)
message(STATUS "    libraries: ${CUDA_LIBRARIES}")
message(STATUS "    include path: ${CUDA_INCLUDE_DIRS}")

include_directories(${CUDA_INCLUDE_DIRS})

####
enable_language(CUDA)  # add this line, then no need to setup cuda path in vs
####
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${TRT_DIR}\\include)

# -D_MWAITXINTRIN_H_INCLUDED for solving error: identifier "__builtin_ia32_mwaitx" is undefined
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED")

# setup opencv
find_package(OpenCV QUIET
    NO_MODULE
    NO_DEFAULT_PATH
    NO_CMAKE_PATH
    NO_CMAKE_ENVIRONMENT_PATH
    NO_SYSTEM_ENVIRONMENT_PATH
    NO_CMAKE_PACKAGE_REGISTRY
    NO_CMAKE_BUILDS_PATH
    NO_CMAKE_SYSTEM_PATH
    NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
)

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

include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${TRT_DIR}\\lib)

add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h)   #4

target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")   #5
target_link_libraries(yolov5 ${OpenCV_LIBS})          #6
target_link_libraries(yolov5 ${CUDA_LIBRARIES})   #7
target_link_libraries(yolov5 Threads::Threads)       #8
  1. Cmake界面配置
    2.1 配置source code目录 D:/github/tensorrtx_yolov5_3/yolov51: 包含yolov5.cpp源码的目录
    2.2 build the binaries为配置VS工程目录 D:\github\tensorrtx_yolov5_3\yolov5\build
    2.3 点击左下方点击Configure
    yolov5 + tensorRT + windows GPU C++部署_第21张图片

2.4 跳出弹窗,选择Visual Studio 15 2017x64。点击右下角Finishyolov5 + tensorRT + windows GPU C++部署_第22张图片
完成Configure之后界面显示如下:
yolov5 + tensorRT + windows GPU C++部署_第23张图片
2.5 点击Generate。生成完了,界面会提示generating done。
yolov5 + tensorRT + windows GPU C++部署_第24张图片
2.6 回到build目录下,出现了yolov5.sln文件,双击。
yolov5 + tensorRT + windows GPU C++部署_第25张图片
2.7 点击 生成--》生成解决方案
yolov5 + tensorRT + windows GPU C++部署_第26张图片
生成完了提示如下:
yolov5 + tensorRT + windows GPU C++部署_第27张图片
Debug目录下生成三个文件
yolov5 + tensorRT + windows GPU C++部署_第28张图片
2.8 转到yolov5.exe目录 (e.g. D:\github\tensorrtx_yolov5_3\yolov5\build\Debug)
2.9 运行yolov5.exe -s,生成’yolov5s.engine’

yolov5.exe -s             // serialize model to plan file i.e. 'yolov5s.engine'

2.10 推理图片放入D:\github\tensorrtx_yolov5_3\yolov5\build\images,运行 yolov5.exe -d ../images

yolov5.exe -d  ../images // deserialize plan file and run inference, the images in samples will be processed.

2.11 检测结果,.pt转化后的模型会掉点。
yolov5 + tensorRT + windows GPU C++部署_第29张图片
总结
第一次写blog,写得太匆忙。不清楚的后续补充。
[1]: https://github.com/wang-xinyu/tensorrtx
[2]: https://github.com/ultralytics/yolov5/tree/v3.1
[3]: https://blog.csdn.net/weixin_41552975/article/details/114398669

你可能感兴趣的:(c++,python,opencv,深度学习,计算机视觉)