TensorRT int8 量化部署 yolov5s 5.0 模型


TensorRT int8 量化部署 yolov5s 5.0 模型

一.yolov5簡介

如果說在目標檢測領域落地最廣的算法,yolo系列當之無愧,從yolov1到現在的"yolov5",雖然yolov5這個名字飽受爭議,但是阻止不了算法部署工程師對他的喜愛,因為他確實又快又好,從kaggle全球小麥檢測競賽霸榜,到star數短短不到一年突破8k,無疑,用硬實力證明了自己。總而言之,用他,用他,用他!(在我的3080顯卡上測試640*640的圖片,yolov5s 5.0 的模型 tensorrt int8 量化后,inference做到了4.6ms一幀!)

二.環境

ubuntu:18.04
cuda:11.1
cudnn:8.0
tensorrt:7.2.2.3
OpenCV:4.5.0
做INT8模型轉換之前,我建議你至少要有搭建Tensorrt的經驗,如yolov5的yolov5s.pt轉yolov5s.engine模型,並且且測試通過的。

此處對環境的安裝就省略了,如果不知道怎么搭建環境,可以參考我之前的記錄:https://www.cnblogs.com/KdeS/p/14928201.html

如有疑問,郵箱聯系

三.yolov5s模型轉換onnx

3.1安裝需要用到的庫

pip install onnx
pip install onnx-simplifier

3.2 轉換onnx

git clone https://github.com/ultralytics/yolov5.git

cd yolov5/models

vim common.py

把BottleneckCSP類下的激活函數替換為relu,tensorrt對leakyRelu int8量化不穩定(這是一個深坑,大家記得避開)即修改為self.act = nn.ReLU(inplace=True)

訓練得到模型后

cd yolov5

python models/export.py --weights 訓練得到的模型權重路徑 --img-size 訓練圖片輸入尺寸
就會產生如下幾個文件

python3 -m onnxsim onnx模型名稱 yolov5s-simple.onnx 得到最終簡化后的onnx模型

如果你的Tensorrt中有models/export.py ,那么上面的項目就不用出伏拉取了,可以直接用export.py 轉onnx模型,操作步驟不變

四.onnx模型轉換為 int8 tensorrt引擎

git clone https://github.com/Wulingtian/yolov5_tensorrt_int8_tools.git(求star)

cd yolov5_tensorrt_int8_tools

vim convert_trt_quant.py 修改如下參數

BATCH_SIZE 模型量化一次輸入多少張圖片

BATCH 模型量化次數

height width 輸入圖片寬和高

CALIB_IMG_DIR 訓練圖片路徑,用於量化

onnx_model_path onnx模型路徑

python3 convert_trt_quant.py 量化后的模型存到models_save目錄下

成功后會產生兩個文件:

注意:

此處有兩點注意事項

1.BATCH_SIZE*BATCH要小於或等於訓練圖片數量,否則會報錯

2.測試前models_save目錄不能有其他文件,如果models_save目錄沒有則需要自己創建,否則會報錯

五.tensorrt模型推理

git clone https://github.com/Wulingtian/yolov5_tensorrt_int8.git(求star)

cd yolov5_tensorrt_int8

5.1 修改 vim CMakeLists.txt

修改USER_DIR參數為自己的用戶根目錄,圖中划線的位置都需要根據自己的環境做修改

5.2修改 vim http://yolov5s_infer.cc 修改如下參數

output_name1 output_name2 output_name3 yolov5模型有3個輸出(這里目錄可按照下圖填上去,不能隨便填)

trt_model_path 量化的的tensorrt推理引擎(models_save目錄下trt后綴的文件)

test_img 測試圖片路徑

INPUT_W INPUT_H 輸入圖片寬高

NUM_CLASS 訓練的模型有多少類

NMS_THRESH nms閾值

CONF_THRESH 置信度

5.3 安裝netron

我們可以通過netron查看模型輸出名

pip install netron 安裝netron

vim netron_yolov5s.py 把如下內容粘貼

import netron

netron.start('此處填充簡化后的onnx模型路徑', port=3344)

python3 netron_yolov5s.py 即可查看 模型輸出名

參數配置完畢 !

5.4 編譯

mkdir build
cd build
cmake ..
make

./RepVGGsEngine 輸出平均推理時間,實測平均推理時間小於1ms一幀,不得不說,RepVGG真的很香!至此,部署完成!由於我訓練的是貓狗識別下面放一張貓狗同框的圖片結尾。

參考文獻:
https://zhuanlan.zhihu.com/p/348110519
https://my.oschina.net/u/4580321/blog/4951406


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM