測試環境:
- 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