测试环境:
- 0、Windows 10
- 1、OpenCV412
- 2、CUDA11.0(cuda_11.0.2_451.48_win10.exe)
- 3、cuDNN8.0 (cudnn-11.0-windows-x64-v8.0.4.30.zip)
- 4、TensorRT-7.1(TensorRT-7.1.3.4.Windows10.x86_64.cuda-11.0.cudnn8.0)
- 5、vs2017(ReleaseX64)
- 6、yolo-tensorrt-master(一个开源转换方案,地址:https://github.com/enazoe/yolo-tensorrt
https://github.com/enazoe/yolo-tensorrt/blob/master/yolov5_tutorial.md)
一、安装CUDA11.0
具体文件名:cuda_11.0.2_451.48_win10.exe
下载地址:https://developer.nvidia.com/cuda-11.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
二、安装cuDNN8.0
下载地址:https://developer.nvidia.com/rdp/cudnn-download
需要你注册NVIDIA账号,搞一个吧。
下载完毕之后,在桌面解压文件,得到如下图内容(绿色框):
cuDNN是官方编译好的库,仅需要手动拷贝即可,具体参考上图(CUDA已经安装)
三、TensorRT 7.1安装、测试
下载地址:https://developer.nvidia.com/nvidia-tensorrt-7x-download
下载完毕后解压到D盘根目录:
然后在python环境(我这里用的是conda虚拟环境:yolo5)下安装两个python包:uff和graphsurgeon
pip install uff-0.6.9-py2.py3-none-any.whl
pip install graphsurgeon-0.4.5-py2.py3-none-any.whl
接着用vs2017打开samples文件夹下的手写文字识别例程,如图:
修改项目属性,其实就是SDK版本
新建tensorRT属性表,命名为:TensorRT_X64_Release(以后用得着)
包含目录:D:\TensorRT-7.1.3.4\include
库目录:D:\TensorRT-7.1.3.4\lib
链接器:
myelin64_1.lib
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib
接着编译生成exe文件,由于这里是测试手写数字识别,但是没有数据,需要下载:
执行如下图脚本下载图像数据,如图,我已经下载完毕:
python download_pgms.py
这时候执行上述执行exe文件,使用以下指令:
PS D:\TensorRT-7.1.3.4\bin> .\sample_mnist.exe --datadir D:\TensorRT-7.1.3.4\data\mnist
四、环境变量设置
在环境变量中添加两个路径(CUDA和TensorRT的动态库,cuDNN其实已经包含在CUDA中)
D:\TensorRT-7.1.3.4\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin
重启系统生效
五、编译yolo-tensorrt-master工程
使用vs2017打开源码包sln文件夹下的sln文件,可能弹框上你升级工程管理文件,确认就行(作者用的是vs2015)。
设置为release x64模式,看到两个工程,先卸载下面的test_dll,一起批量编译会报错(猜测是下面工程依赖上面生成库)。
第一个工程dll_detector依赖cuda(含cuDNN),tensorRT、opencv,如图,作者已经新建了空的属性表,
在这里,opencv有现成的,tensorRT在上面已经建好了,而CUDA,我也懒得去修改,这里教大家一个技巧:
我们打开CUDA的安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\visual_studio_integration\MSBuildExtensions
可以发现有建立好的CUDA属性表
直接加载进去就行
上图绿色圈内实我自定义加进去的属性表,好了,直接编译就行了,编译成功后,我们再编译第二个项目,第二个项目只需要把opencv的属性表加进去就行了
六、模型转换与测试
以下是yolov5原版本测试图:
yolo5x(pytorch版) yolo5s(pytorch版)
yolo5x(tensorRT版) yolo5s(tensorRT版)
效果自行评价
参考:https://blog.csdn.net/gulingfengze/article/details/108425949?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://blog.csdn.net/qianshuqinghan/article/details/104776612?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param