踩坑到怀疑人生:win10下tensorRT加速YOLOV5

目录

版本

下载安装包

1.Go to:CUDA10.2

2.Go to:CUDNN

3.Go to:opencv340

4.Go to:pytorch官网

5.Go to:yolov5

6.Go to:tensorRT官网

7.安装pycuda

8.测试TensorRT实例 

1).配置VS2019

2).下载pgm文件

 9.yoloV5的TensorRT加速

1)克隆tensorrtx-5.0

2)下载文件dirent.h

3)生成yoloV5s.wts权重文件 

4)修改CMakeList.txt

5)编译tensorrtx下的yolov5

6)VS2019编译YOLOv5

10.执行TensorRT加速YOLOv5命令

总结

点赞 关注 收藏 不白嫖

引言:去改bug吧,去改不被定义的bug,在你茂密的头上留下一片激战bug后的痕迹


版本

YOLOV5-5.0,tensorrtx-5.0,cuda-10.2,tensorrt-7.0.0.11,opencv 3.4.0,cudnn需对应cuda

下载安装包

1.Go to:CUDA10.2

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第1张图片

后面还需要添加几个环境变量分别是sdk_path,sdk_lib,sdk_bin以及cuda_bin,cuda_lib

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2

CUDA_LIB_PATH = %CUDA_PATH%\lib\x64

CUDA_BIN_PATH = %CUDA_PATH%\bin

CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64

CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

在系统变量path的末尾添加

%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%

再添加5条默认的安装路径

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\CUPTI\lib64

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\bin\win64 C:\ProgramData\NVIDIA

Corporation\CUDA Samples\v10.2\common\lib\x64

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第2张图片

2.Go to:CUDNN

下载好的cudnn解压后,将cudnn中的bin,include,lib文件复制到cuda的文件夹下

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2

cmd测试是否安装成功

nvcc -V

 出现如下信息则为成功

3.Go to:opencv340

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第3张图片

 以上是opencv官网编译好的,如果想锻炼自己的编译水平可以看我的另一篇博客YOLOV5python训练到C++的dnn部署,这里不建议自己编译,懂得都懂。

下载后将解压后的文件路径添加到系统变量Path

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第4张图片

4.Go to:pytorch官网

安装版本需要对应cuda版本,这里小伙伴们自己找一下

5.Go to:yolov5

这里直接指向的是5.0的版本

a.下载后配置好环境python>=3.7后pip install requirements.txt 

b.下载YOLOv5的权重,这里需要注意的是前面所说的需要与版本对应

标签 ·Ultralytics/yolov5 ·GitHub

一切就绪后测试一下

python detect.py --source 图片路径 --weights 下载权重路径 --conf 0.4

6.Go to:tensorRT官网

注:首先 nvcc --version查看cuda版本 我的是10.2,所以我对应下载tensorRT 7.0版本

1)解压得到的TensorRT-7.0.0.11的文件夹,将里面的lib文件添加绝对路径到换将变量中

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第5张图片

 踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第6张图片

2)将tensorRT解压位置lib下的dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin

注:如果有多个cuda,比如本博主有10.0,11.2, 9.0等多个版本一定要对应当前使用的版本的bin目录下 

 7.安装pycuda

如果要是用python接口的tensorRT,需要安装pycuda

pip install pycuda

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第7张图片

8.测试TensorRT实例 

1).配置VS2019

用VS2019打开sampleMNIST示例(E:\TensorRT-7.0.0.11\samples\sampleMNIST)

a. 将E:\TensorRT-7.0.0.11\lib加入 项目->属性->VC++目录–>可执行文件目录

b.将E:\TensorRT-7.0.0.11\lib加入 VC++目录–>库目录

c. 将E:\TensorRT-7.0.0.11\include加入C/C++ --> 常规 --> 附加包含目录

d.将nvinfer.lib、nvinfer_plugin.lib、nvonnxparser.lib和nvparsers.lib加入链接器–>输入–>附加 依赖项

E:\TensorRT-7.0.0.11\lib\*.lib

2).下载pgm文件

到tensorrt目录下的data文件夹找到对应数据集的download_pgms.py,然后运行。运行的时候没输 出,等一会看到文件夹下有了x.pgm文件就说明下载好了。即执行:

python E:\TensorRT-7.0.0.11\data\mnist\download_pgms.py

注意:有的时候会显示为远程主机强迫关闭,这时候吧代码copy出来在pycharm中运行,一次不行多试几次, 直到目录中

把下载的x.pgm文件放置到E:\TensorRT-7.0.0.11\data\mnist

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第8张图片

 然后点击编译

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第9张图片

 编译成功踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第10张图片

 注意:有人可能会出现sdk错误,需要点击项目->重订目标解决方案,然后生成最新的sdk就OK了

随后点击调试->开始执行

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第11张图片

 黑窗口出现手写体数字识别,这里就已经可以用了踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第12张图片

 解释:5后面的******是识别出数字为5后对识别的结果进行的加密

 9.yoloV5的TensorRT加速

1)克隆tensorrtx-5.0

有git的小伙伴可以通过

git clone https://github.com/wang-xinyu/tensorrtx.git下载

如果没有可以点击传送门下载

2)下载文件dirent.h

点击传送门

放置到tensorrtx/include文件夹下 这里的include需要自己创建

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第13张图片

3)生成yoloV5s.wts权重文件 

将文件tensorrtx/yolov5/gen_wts.py 复制到 yolov5项目中

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第14张图片

执行 python gen_wts.py生成wts权重文件

重点必须强调:yolov5s.pt权重版本需要与YOLOv5版本对应下载,也就是说也需要下载5.0的版本

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第15张图片

生成的wts文件放到build下

4)修改CMakeList.txt

在 E:\tensorrtx\yolov5下的CMakeList.txt中,需要修改#1#2#3#4#5

cmake_minimum_required(VERSION 3.1.0)
 
project(yolov5)  
set(OpenCV_DIR "F:\\opencv340\\build")  #1
set(OpenCV_INCLUDE_DIRS "F:\\opencv340\\build\\include")  #2
set(OpenCV_LIBS "F:\\opencv340\\build\\x64\\vc15\\lib\\opencv_world340.lib") #3
set(TRT_DIR "F:\\TensorRT-7.0.0.11")  #4
 
add_definitions(-DAPI_EXPORTS) 
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)
include_directories(C:\\Users\\Lenovo\\Desktop\\yolov5-5.0\\yolov5-5.0\\tensorrtx-yolov5-v5.0\\tensorrtx-yolov5-v5.0\\include) #5
 
 
#find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_DIRS}\\opencv2) #6
 
 
# -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) #7
link_directories(${OpenCV_DIR}\\x64\\vc15\\lib) #8
 
add_executable(yolov5 ${PROJECT_SOURCE_DIR}/calibrator.cpp yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h)   #4
 
#add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h ${PROJECT_SOURCE_DIR}/preprocess.cu ${PROJECT_SOURCE_DIR}/preprocess.h) #4

target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")   #9
target_link_libraries(yolov5 ${OpenCV_LIBS})          #10
target_link_libraries(yolov5 ${CUDA_LIBRARIES})   #11
target_link_libraries(yolov5 Threads::Threads)       #12

5)编译tensorrtx下的yolov5

1.打开cmake设置好路径,与opencv的编译一样

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第16张图片

2.更改配置,在vs2019下的x64系统进行

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第17张图片

然后编译

以下是我编译遇到的问题以及解决方法:

问题1:

CMAKE_CUDA_ARCHITECTURES must bi valid if set

或者类似cuda框架找不到

这里建议把VS删干净重新装一边,不要头铁一直去解决,我已经帮你们试过了,头铁解决一个星期没解决,重新安装20分钟轻松搞定,原因就是系统不知道什么值一直默认它自己指定的,而不是你自己设定的值

问题2:

出现No CUDA toolset found.参考这位博主,不过这个路径得自己找

YYDS

总结(其实问题一二的问题是一样的,都是默认的这4个踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第18张图片写错了,但是问题一不知道在哪里修改,问题二是直接没有了这四个文件,如果有大神还有更的解好决办法,希望评论区见)

随后点击Generate进行检测,随后open Project。

6)VS2019编译YOLOv5

Release模式下生成解决方案

选中yolov5右击选择重新生成,如果不出意外的话你会遇到这些意外:dll找不到,opencv依赖找不到或者MSB3721报错信息等,在tensorrtx->yolov5>build>yolov5.dir->release->yolov5.log中找到这些详细的编译报错信息。

10.执行TensorRT加速YOLOv5命令

去yolov5/build/Release目录下CMD执行

yolov5.exe -s yolov5s.wts yolov5s.engine s 

出现 Build engine successfully时生成结束

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第19张图片

 随后你的文件夹中会出现yolov5s.engine的权重文件

如果出现以下报错信息:Network::addScale::434

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第20张图片

解决方法:

        1.我之前说的版本是否匹配

        2.可能是wts权重文件找不到,像我一样把权重文件放到yolov5.exe的同一级目录下

        3.你可能用了自己的权重文件需要在yolov5.cpp与yololayer.h中把相关的参数修改成自己的参数设定

最后生成内容

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第21张图片

 随后在yolov5.exe同一级目录中新建images文件夹,里面放入两张测试图片

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第22张图片

cmd下运行 yolov5.exe -d yolov5s.engine images

可以看到我们的两张图片处理的时间被打印出来,总费时间7ms

而之前没有做加速时两张图片的处理时间为0.9s 也就是相当于900ms

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第23张图片

 非常amazing啊,足足快了128倍还要多。接下来看一下生成效果

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第24张图片

 踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第25张图片

 值得注意的是为什么这些anocher框上的标签是数字而不是英文字母呢,细心的朋友们会发现,这些数字刚好对应coco数据集中标签的位置

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第26张图片

总结

别人说一杯茶,一包烟,一个bug改一天,我一直以为是玩笑话,直到我开始编译tensorrt加速时yolo发现我这6处编译bug改了9天!!!每一个编译问题全网都找不出一个有效的解决方法!!!我看着桌上的头发以及编译好的代码,我不经意的感慨到:Linux系统真好。愿世上再无bug。

踩坑到怀疑人生:win10下tensorRT加速YOLOV5_第27张图片

点赞 关注 收藏 不白嫖

你可能感兴趣的:(YOLO,深度学习,深度学习,人工智能)