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
- 下载yolo源码
git clone https:///ultralytics/yolov5.git
- 安装依赖包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
- 下载训练权重文件,并并放置在weights文件夹下
:权重下载
2.2 TensorRT安装:
- 英伟达官网下载与cuda和cudnn一致的TensorRT 我这里的版本如下
- 新建文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6(个人自定义的,下文均称为TensorRT目录)
- 将压缩包解压,解压后文件放入文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6如下:
将**TensorRT目录**\include下中所有头文件(*.h),复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
将**TensorRT目录**\lib下所有 .lib文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
将**TensorRT目录**\lib下中所有dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
- 完成TensorRT的安装
2.3 验证TensorRT安装:
1 . 用VS2017
打开TensorRT目录\samples\sampleMNIST
这里如果出现找不到 Windows SDK 版本10.0.17134.0,vs目标平台版本不一致问题,按照提示下载了一个对应版本安装,问题就解决了。参考链接
- 用python 进入
TensorRT目录\data\mnist
目录,运行
python download_pgms.py
下载完后会出现.pgm文件。
- 配置VS中的运行环境。
- 在项目属性中配置可执行文件目录:将
*TensorRT目录/lib
目录添加进入可执行文件目录
- 点击C/C++ -> 常规 -> 附加包含目录添加路径:
TensorRT目录\include
- 点击VC/C++目录 -> 库目录,增加
TensorRT目录\lib
- 点击链接器->输入->附加依赖项:
添加TensorRT目录\lib
目录中的所有.lib文件和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
中所有.lib文件
配置完成后运行项目,会出现如下图片,至此就配置完成了。
2.4 Cmake安装
- 去Cmake官网下载,我这里的版本是3.16,Cmake3.16下载链接。
- 下载后,解压。
- 添加Cmake环境变量,路径为
D:\softwareFai\cmake-3.16.0-rc1-win64-x64\cmake-3.16.0-rc1-win64-x64\bin
- 启动Cmake,进入bin目录,点击
cmake-gui.exe
。
2.5 OpenCV安装
opencv很早以前就装了,按照网上的教程安装,配置完环境变量。
e-g OpenCV的安装目录如下,后面会有相关设置
2.6 TensorRTX安装
TensorRTX是将pytorch模型转化为TensorRT格式的模式并部署。
- 去github上直接下载tensorRTX源码,tensorRTX地址
git clone -b yolov5-v3.1 https:///wang-xinyu/tensorrtx.git
(tensorRTX下载,版本与yolov5一致
) - 重命名文件夹,如下图
3. Cmake编译TensorRTX中的yolov5
3.1 编译前准备:
在
D:/github/tensorrtx_yolov5_3/yolov5
目录中新建include
目录- 下载文件
dirent.h
, 下载地址 将
dirent.h
文件放入D:/github/tensorrtx_yolov5_3/yolov5/include
目录中在
D:/github/tensorrtx_yolov5_3/yolov5
目录中新建build
目录生成yolov5.wts文件。通过运行程序gen_wts.py ,将转为.wts模型
将tensorrtx源码中的gen_wts.py复制到yolov5源码中并运行,生成.wts模型。将
yolov5s.wts
文件放入build
目录
3.2 Cmake编译yolov5 vs工程
tensorRTx中的yolov5目录如下
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}/ ${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
- Cmake界面配置
2.1 配置source code
目录D:/github/tensorrtx_yolov5_3/yolov5
(1:
包含yolov5.cpp源码的目录
)
2.2build the binaries
为配置VS工程目录D:\github\tensorrtx_yolov5_3\yolov5\build
2.3 点击左下方点击Configure
。
2.4 跳出弹窗,选择Visual Studio 15 2017
和 x64
。点击右下角Finish
。
完成Configure之后界面显示如下:
2.5 点击Generate
。生成完了,界面会提示generating done。
2.6 回到build目录下,出现了yolov5.sln
文件,双击。
2.7 点击 生成--》生成解决方案
生成完了提示如下:
Debug目录下生成三个文件
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转化后的模型会掉点。
总结
第一次写blog,写得太匆忙。不清楚的后续补充。
[1]: https:///wang-xinyu/tensorrtx
[2]: https:///ultralytics/yolov5/tree/v3.1