【實戰】yolov8 tensorrt win10部署
Win10下yolov8 tensorrt模型加速部署【實戰】
TensorRT-Alpha基于tensorrt+cuda c++實現模型end2end的gpu加速,支持win10、linux,在2023年已經更新模型:YOLOv8, YOLOv7, YOLOv6, YOLOv5, YOLOv4, YOLOv3, YOLOX, YOLOR,pphumanseg,u2net,EfficientDet。
關注倉庫《TensorRT-Alpha》:https://github.com/FeiYull/TensorRT-Alpha
一、加速結果展示
1.1 性能速覽
??快速看看yolov8n 在移動端RTX2070m(8G)的新能表現:
model | video resolution | model input size | GPU Memory-Usage | GPU-Util |
---|---|---|---|---|
yolov8n | 1920x1080 | 8x3x640x640 | 1093MiB/7982MiB | 14% |
下圖是yolov8n的運行時間開銷,單位是ms:
更多TensorRT-Alpha測試錄像在B站視頻:
B站:YOLOv8n
B站:YOLOv8s
1.2精度對齊
下面是左邊是python框架推理結果,右邊是TensorRT-Alpha推理結果。
YOLOv4 YOLOv3 YOLOR YOLOX略。
二、Windows10環境配置
三步解決win環境配置:
- 1、安裝vs2019、Nvidia驅動、cuda,cudnn、opencv、tensorrt;
- 2、創建屬性表;
- 3、工程設置,運行;
問題:為什么使用vs2019屬性表,而不用cmake?
回答:因為屬性表可以做到:一次創建,到處使用。
提示:如果您一定需要使用cmake+vs2019 or cmake + clion,請參考附錄,這是一位熱心觀眾的方法,供參考。
2.1 安裝VS2019
需要Microsoft賬號,如果您有別的途徑下載安裝也可以。
- 進入:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
- 選擇:[2019] -> [下載]
- 在新頁面選擇: Visual Studio Community 2019 (version 16.11)
- 下載完成之后安裝過程選擇如下圖:
2.2 安裝庫
注:Nvidia相關網站需要注冊賬號。
2.2.1 安裝Nvidia顯卡驅動
- 進入: https://www.nvidia.cn/Download/index.aspx?lang=cn#
- 依據實際情況選擇,如下圖是我的選擇(for RTX3070):
- 選擇:[搜索]->[下載] ->[雙擊默認安裝] -> [重啟系統] -> [進入cmd],輸入如下指令:
nvidia-smi
看到如下信息表明驅動正常:
2.2.2 安裝 cuda11.2
- 進入: https://developer.nvidia.com/cuda-toolkit-archive
- 選擇:CUDA Toolkit 11.2.0 (December 2020)
- 選擇:[Windows] -> [x86_64] -> [10] -> [exe(local)] -> [Download(2.9GB)]
- 雙擊安裝,重啟在cmd窗口輸入如下指令:
nvcc -V
CMD窗口打印如下信息表示cuda11.2安裝正常
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Nov_30_19:15:10_Pacific_Standard_Time_2020
Cuda compilation tools, release 11.2, V11.2.67
Build cuda_11.2.r11.2/compiler.29373293_0
note:cuda11.2 不需要手動設置環境變量,如下圖,環境變量都是自動設置的。
2.2.3 安裝 cudnn8.2.1
- 進入網站:https://developer.nvidia.com/rdp/cudnn-archive
- 選擇: Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x
- 選擇: cuDNN Library for Windows (x86)
- 你將會下載這個壓縮包: "cudnn-11.3-windows-x64-v8.2.1.32_2.zip"
- 解壓之后,cudnn的頭文件、庫文件都要拷貝到cuda安裝目錄。
- 如下圖,進入cudnn解壓所在文件夾中include,拷貝所有頭文件,粘貼到CUDA/v11.2/include中
- lib、bin中的文件也拷貝到對應cuda目錄中
- 重啟系統
2.2.4 下載 tensorrt8.4.2.4
- 進入網站: https://developer.nvidia.cn/nvidia-tensorrt-8x-download
- 把這個打勾: I Agree To the Terms of the NVIDIA TensorRT License Agreement
- 選擇: TensorRT 8.4 GA Update 1
- 選擇: TensorRT 8.4 GA Update 1 for Windows 10 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 ZIP Package
- 你將會下載這個壓縮包: "TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4.zip"
- 解壓到F:\ThirdParty,并重命名為:TensorRT-8.4.2.4
- 并將路徑"F:\ThirdParty\TensorRT-8.4.2.4\lib"添加到環境變量,如下圖:
- 重啟系統
2.2.5 OpenCV4.5.5安裝
- 進入:https://opencv.org/releases/
- 選擇:[OpenCV – 4.5.5] -> [Windows]
- 下載完成之后,是一個exe的自解壓格式,解壓到:D:\ThirdParty
- 并將路徑:"D:\ThirdParty\opencv4.5.5\build\bin" 和 "D:\ThirdParty\opencv4.5.5\build\x64\vc15\bin"添加到環境變量,如下圖:
- 重啟系統
note:我的opencv在D盤,tensorrt在E盤,根據實際情況修改就行了。
2.3 創建屬性表
一般地,Visual Studio 2019,一個庫對應兩個屬性表文件,分別對應:vs2019的debug模式和release模式,例如:本文中OpenCV創建了這兩種。而TensorRT和CUDA只需要創建一種屬性表(適用以上兩種模式)。
2.3.1 創建OpenCV屬性表
創建opencv庫debug屬性表:
- step1:基于VS2019隨便新建一個C++項目,如下圖,項目設置為Debug、X64模式
- step2:如下圖,選擇:[屬性窗口] -> [右擊Debug|x64] -> [添加新項目屬性表]
- step3:文件命名為:OpenCV4.5.5_DebugX64.props -> [添加]
- 編輯屬性表:[如下圖:雙擊屬性表]
- step4:如下圖,選擇:[通用屬性] -> [VC++目錄] -> [包含目錄] -> [編輯]
- step5:如下圖,將兩個OpenCV兩個頭文件目錄拷貝進去 -> [確認]
- step6:選擇:[通用屬性] -> [VC++目錄] -> [庫目錄] -> [編輯] -> 將路徑:"D:\ThirdParty\opencv4.5.5\build\x64\vc15\lib"拷貝進去 -> [確認]
- step7:選擇:[通用屬性] -> [鏈接器] -> [輸入] -> [附加依賴項] -> 將文件名"opencv_world455d.lib"拷貝進去->[確認]
小結:
到這里,opencv庫debug屬性表制作完成,release屬性表和上述流程一樣,唯一區別在于,如下圖,項目切換到Release x64模式,新建OpenCV4.5.5_ReleaseX64屬性表,然后在step7中,將文件名修改為:"opencv_world455.lib"
請記住,制作屬性表就3個步驟:
- 拷貝include路徑
- 拷貝lib路徑,外加設置dll到系統環境變量
- 拷貝lib文件名稱
2.3.2 創建TensorRT屬性表
右擊Debug|x64 or 右擊Release|x64新建屬性表,重命名為:TensorRT8.4.2.4_X64,
# include路徑
F:\ThirdParty\TensorRT-8.4.2.4\include
F:\ThirdParty\TensorRT-8.4.2.4\samples\common
F:\ThirdParty\TensorRT-8.4.2.4\samples\common\windows
# lib路徑
F:\ThirdParty\TensorRT-8.4.2.4\lib
# lib文件名稱(for release& debug)
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib
依照上一節3個步驟:
- step1:選擇:[通用屬性] -> [VC++目錄] -> [包含目錄] -> [編輯] -> 把上述3個include路徑拷貝進去
- step2:選擇:[通用屬性] -> [VC++目錄] -> [庫目錄] -> [編輯] -> 把上述lib路徑拷貝進去
- step3:選擇:[通用屬性] -> [鏈接器] -> [輸入] -> [附加依賴項] -> [編輯] -> 將上述lib文件名稱拷貝進去->[確認]
最后,修改tensorrt屬性表:[通用屬性] -> [C/C++] -> [預處理器] -> [預處理器定義] -> 添加指令:_CRT_SECURE_NO_WARNINGS -> [確認]
2.3.3 創建CUDA屬性表
CUDA屬性表直接白嫖官方,在路徑:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.2.props
最后,我們應該有了如下屬性表文件:
其中,cuda 和tensorrt的屬性表同時兼容release x64 和debug x64,你再新建TensorRT-Alpha中yolov8 yolov7 yolov6 等項目后,只需要把上述提前做好的屬性表引入到工程就行了,**當然項目還需要進行簡單設置**(設置NVCC,避免tensorrt的坑),在后文提到。屬性表做到了一次新建,到處使用。
三、YOLOv8模型部署
Windows10環境安裝YOLOv8,參考我的另一篇《Win10環境下yolov8快速配置與測試》:https://blog.csdn.net/m0_72734364/article/details/128815530
3.1 獲取YOLOv8onnx文件
直接在網盤下載 weiyun or google driver 或者使用如下命令導出onnx:
# ?? yolov8 官方倉庫: https://github.com/ultralytics/ultralytics
# ?? yolov8 官方教程: https://docs.ultralytics.com/quickstart/
# ??TensorRT-Alpha will be updated synchronously as soon as possible!
# 安裝 yolov8
conda create -n yolov8 python==3.8 -y
conda activate yolov8
pip install ultralytics==8.0.5
pip install onnx==1.12.0
# 下載官方權重(".pt" file)
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x6.pt
導出 onnx:
# 640
yolo mode=export model=yolov8n.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8s.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8m.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8l.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8x.pt format=onnx dynamic=True #simplify=True
# 1280
yolo mode=export model=yolov8x6.pt format=onnx dynamic=True #simplify=True
3.2 編譯 onnx
# trtexec.exe在路徑:F:\ThirdParty\TensorRT-8.4.2.4\bin
# 640
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8n.onnx --saveEngine=yolov8n.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8s.onnx --saveEngine=yolov8s.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8m.onnx --saveEngine=yolov8m.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8l.onnx --saveEngine=yolov8l.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8x.onnx --saveEngine=yolov8x.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
../../../../TensorRT-8.4.2.4/bin/trtexec.exe --onnx=yolov8x6.onnx --saveEngine=yolov8x6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
你將會的到例如:yolov8n.trt、yolov8s.trt、yolov8m.trt等文件。
3.3 編譯運行
3.3.1 新建、設置項目
下載TensorRT-Alpha倉庫:
git clone https://github.com/FeiYull/tensorrt-alpha
- 新建yolov8 C++項目:參考B站視頻【提示:從0分34秒開始,演示如何設置NVCC編譯,如何避免tensorrt在win環境的坑】:
yolov8 tensorrt 實戰之先導
小結:
后續創建TensorRT-Alpha中YOLOv7、 YOLOv6等工程之后,只需要將上文中的屬性表添加到工程,然后按照《yolov8 tensorrt 實戰之先導》提到的設置工程就OK。
這篇教程太詳細了,這年頭,好像很少有人愿意免費給出這么誠意的教程。
3.3.2 編譯運行
上面視頻在vs2019中設置命令行參數,您也可以在CMD命令行上運行程序,如下:
# 下面參數解釋
# --show 表示可視化結果
# --savePath 表示保存,默認保存在build目錄
# --savePath=../ 保存在上一級目錄
## 640
# 推理圖片
./app_yolov8.exe --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=1 --img=../../data/6406407.jpg --show --savePath
./app_yolov8.exe --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8 --video=../../data/people.mp4 --show --savePath
# 推理視頻
./app_yolov8.exe --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8 --video=../../data/people.mp4 --show --savePath=../
# 在線推理相機視頻
./app_yolov8.exe --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=2 --cam_id=0 --show
## 1280
# infer camera
./app_yolov8.exe --model=../../data/yolov8/yolov8x6.trt --size=1280 --batch_size=2 --cam_id=0 --show
我的B站所有視頻都在WIN10環境運行,https://space.bilibili.com/2028719613
[video(video-zRQTyZp3-1675415874102)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=778153500)(image-https://img-blog.csdnimg.cn/img_convert/4faa0b726044d139a1282d3883c6ed08.jpeg)(title-yolov8 tensorrt cuda模型推理加速部署TensorRT-Alpha《ski facility》)]
[video(video-Ej2C6hgr-1675415817040)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=650665729)(image-https://img-blog.csdnimg.cn/img_convert/04c8cb5b7ebe3fd410e4af53548a668f.jpeg)(title-yolov8 tensorrt cuda模型推理加速部署TensorRT-Alpha《NewYork-Stree》)]
[video(video-xbOkXTEV-1675415667896)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=565721755)(image-https://img-blog.csdnimg.cn/img_convert/a4469f9c7a048393d4fee5b7bba2893d.jpeg)(title-yolov7 tensorrt cuda模型推理加速部署TensorRT-Alpha《Korea-Night》)]
四、參考
https://github.com/FeiYull/TensorRT-Alpha
附錄
一位熱心小伙做的,他好努力,前幾天經常半夜2點、3點給我留言,太卷了,奮斗精神值得學習。