Yolo系列模型的部署、精度對(duì)齊與int8量化加速
大家好,我是海濱。寫(xiě)這篇文章的目的是為宣傳我在23年初到現(xiàn)在完成的一項(xiàng)工作---Yolo系列模型在TensorRT上的部署與量化加速,目前以通過(guò)視頻的形式在B站發(fā)布(不收費(fèi),只圖一個(gè)一劍三連)。
麻雀雖小但五臟俱全,本項(xiàng)目系統(tǒng)介紹了YOLO系列模型在TensorRT上的量化方案,工程型較強(qiáng),我們給出的工具可以實(shí)現(xiàn)不同量化方案在Yolo系列模型的量化部署,無(wú)論是工程實(shí)踐還是學(xué)術(shù)實(shí)驗(yàn),相信都會(huì)對(duì)你帶來(lái)一定的幫助。
B站地址(求關(guān)注和三連):https://www.bilibili.com/video/BV1Ds4y1k7yr/
Github開(kāi)源地址(求star):https://github.com/thb1314/mmyolo_tensorrt/
當(dāng)時(shí)想做這個(gè)的目的是是為了總結(jié)一下目標(biāo)檢測(cè)模型的量化加速到底會(huì)遇到什么坑,只是沒(méi)想到不量化坑都會(huì)很多。
比如即使是以FP32形式推理,由于TensorRT算子參數(shù)的一些限制和TRT和torch內(nèi)部實(shí)現(xiàn)的不同,導(dǎo)致torch推理結(jié)果會(huì)和TensorRT推理結(jié)果天然的不統(tǒng)一,至于為什么不統(tǒng)一這里賣(mài)個(gè)關(guān)子大家感興趣可以看下視頻。
下面說(shuō)一下我們這個(gè)項(xiàng)目做了哪些事情
YOLO系列模型在tensorrt上的部署與精度對(duì)齊
該項(xiàng)目詳細(xì)介紹了Yolo系列模型在TensorRT上的FP32的精度部署,基于mmyolo框架導(dǎo)出各種yolo模型的onnx,在coco val數(shù)據(jù)集上對(duì)齊torch版本與TensorRT版本的精度。
在此過(guò)程中我們發(fā)現(xiàn),由于TopK算子限制和NMS算子實(shí)現(xiàn)上的不同,我們無(wú)法完全對(duì)齊torch和yolo模型的精度,不過(guò)這種風(fēng)險(xiǎn)是可解釋且可控的。
詳解TensorRT量化的三種實(shí)現(xiàn)方式
TensorRT量化的三種實(shí)現(xiàn)方式包括trt7自帶量化、dynamic range api,trt8引入的QDQ算子。
Dynamic range api會(huì)在采用基于MQbench框架做PTQ時(shí)講解。
TensorRT引入的QDQ算子方式在針對(duì)Yolo模型的PTQ和QAT方式時(shí)都有詳細(xì)的闡述,當(dāng)然這個(gè)過(guò)程也沒(méi)有那么順利。
在基于PytorchQuantization導(dǎo)出的含有QDQ節(jié)點(diǎn)的onnx時(shí),我們發(fā)現(xiàn)盡管量化版本的torch模型精度很高,但是在TensorRT部署時(shí)精度卻很低,TRT部署收精度損失很?chē)?yán)重,通過(guò)可視化其他量化形式的engine和問(wèn)題engine進(jìn)行對(duì)比,我們發(fā)現(xiàn)是一些層的int8量化會(huì)出問(wèn)題,由此找出問(wèn)題量化節(jié)點(diǎn)解決。
詳解MQbench量化工具包在TensorRT上的應(yīng)用
我們研究了基于MQbench框架的普通PTQ算法和包括Adaround高階PTQ算法,且啟發(fā)于Adaround高階PTQ算法。
我們將torch版本中的HistogramObserver引入到MQBench中,activation采用HistogramObserverweight采用MinMaxObserver,在PTQ過(guò)程中,weight的校準(zhǔn)前向傳播一次,activation的校準(zhǔn)需要多次因此我們將weight的PTQ過(guò)程和activation的PTQ過(guò)程分開(kāi)進(jìn)行,加速PTQ量化。實(shí)踐證明,我們采用上述配置的分離PTQ量化在yolov8上可以取得基本不掉點(diǎn)的int8量化精度。
針對(duì)YoloV6這種難量化模型,分別采用部分量化和QAT來(lái)彌補(bǔ)量化精度損失
在部分量化階段,我們采用量化敏感層分析技術(shù)來(lái)判斷哪些層最需要恢復(fù)原始精度,給出各種metric的量化敏感層實(shí)現(xiàn)。
在QAT階段,不同于原始Yolov6論文中蒸餾+RepOPT的方式,我們直接采用上述部分量化后的模型做出初始模型進(jìn)行finetune,結(jié)果發(fā)現(xiàn)finetune后的模型依然取得不錯(cuò)效果。
針對(duì)旋轉(zhuǎn)目標(biāo)檢測(cè),我們同樣給出一種端到端方案,最后的輸出就是NMS后的結(jié)果。通過(guò)將TensorRT中的EfficientNMS Plugin和mmcv中旋轉(zhuǎn)框iou計(jì)算的cuda實(shí)現(xiàn)相結(jié)合,給出EfficientNMS for rotated box版本,經(jīng)過(guò)簡(jiǎn)單驗(yàn)證我們的TRT版本與Torch版本模型輸出基本對(duì)齊。
以上就是我們這個(gè)項(xiàng)目做的事情,歡迎各位看官關(guān)注b站和一劍三連。同時(shí),如果各位有更好的想法也歡迎給我們的git倉(cāng)庫(kù)提PR。
-
算法
+關(guān)注
關(guān)注
23文章
4687瀏覽量
94441 -
模型
+關(guān)注
關(guān)注
1文章
3471瀏覽量
49868 -
精度
+關(guān)注
關(guān)注
0文章
263瀏覽量
20328
原文標(biāo)題:Yolo系列模型的部署、精度對(duì)齊與int8量化加速
文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
i.mx95的EIQ轉(zhuǎn)換器將int8更改為uint8后出現(xiàn)報(bào)錯(cuò)怎么解決?
在OpenVINO?工具套件的深度學(xué)習(xí)工作臺(tái)中無(wú)法導(dǎo)出INT8模型怎么解決?
是否可以輸入隨機(jī)數(shù)據(jù)集來(lái)生成INT8訓(xùn)練后量化模型?
首個(gè)Mamba系列模型量化方案MambaQuant解讀

添越智創(chuàng)基于 RK3588 開(kāi)發(fā)板部署測(cè)試 DeepSeek 模型全攻略
AI模型部署邊緣設(shè)備的奇妙之旅:如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別
助力AIoT應(yīng)用:在米爾FPGA開(kāi)發(fā)板上實(shí)現(xiàn)Tiny YOLO V4
TensorRT-LLM低精度推理優(yōu)化

OrangePi KunPeng Pro部署AI模型介紹

源2.0-M32大模型發(fā)布量化版 運(yùn)行顯存僅需23GB 性能可媲美LLaMA3

深度神經(jīng)網(wǎng)絡(luò)模型量化的基本方法
深度學(xué)習(xí)模型量化方法

評(píng)論