ONNX格式模型量化
深度學(xué)習(xí)模型量化支持深度學(xué)習(xí)模型部署框架支持的一種輕量化模型與加速模型推理的一種常用手段,ONNXRUNTIME支持模型的簡(jiǎn)化、量化等腳本操作,簡(jiǎn)單易學(xué),非常實(shí)用。 ONNX 模型量化常見的量化方法有三種:動(dòng)態(tài)量化、靜態(tài)量化、感知訓(xùn)練量化,其中ONNXRUNTIME支持的動(dòng)態(tài)量化機(jī)制非常簡(jiǎn)單有效,在保持模型精度基本不變的情況下可以有效減低模型的計(jì)算量,可以輕松實(shí)現(xiàn)INT8量化。
動(dòng)態(tài)量化:此方法動(dòng)態(tài)計(jì)算激活的量化參數(shù)(刻度和零點(diǎn))。 靜態(tài)量化:它利用校準(zhǔn)數(shù)據(jù)來計(jì)算激活的量化參數(shù)。 量化感知訓(xùn)練量化:在訓(xùn)練時(shí)計(jì)算激活的量化參數(shù),訓(xùn)練過程可以將激活控制在一定范圍內(nèi)。當(dāng)前ONNX支持的量化操作主要有:
Opset版本最低不能低于10,低于10不支持,必須重新轉(zhuǎn)化為大于opset>10的ONNX格式。模型量化與圖結(jié)構(gòu)優(yōu)化有些是不能疊加運(yùn)用的,模型開發(fā)者應(yīng)該意識(shí)這點(diǎn),選擇適當(dāng)?shù)哪P蛢?yōu)化方法。 ONNXRUNTIME提供的模型量化接口有如下三個(gè):
quantize_dynamic:動(dòng)態(tài)量化 quantize_static:靜態(tài)量化 quantize_qat:量化感知訓(xùn)練量化
FP16量化
首先需要安裝好ONNX支持的FP16量化包,然后調(diào)用相關(guān)接口即可實(shí)現(xiàn)FP16量化與混合精度量化。安裝FP16量化支持包命令行如下:
pip install onnx onnxconverter-common
實(shí)現(xiàn)FP16量化的代碼如下:
INT8量化
最簡(jiǎn)單的量化方式是動(dòng)態(tài)量化與靜態(tài)量化。選擇感知訓(xùn)練量化機(jī)制,即可根據(jù)輸入ONNX格式模型生成INT8量化模型,代碼如下:
案例說明
YOLOv8自定義模型ONNXINT8量化版本對(duì)象檢測(cè)演示 以作者訓(xùn)練自定義YOLOv8模型為例,導(dǎo)出DM檢測(cè)模型大小為,對(duì)比導(dǎo)出FP32版本與INT8版本模型大小,相關(guān)對(duì)比信息如下:
使用FP32版本實(shí)現(xiàn)DM碼檢測(cè),運(yùn)行截圖如下:
使用INT8版本實(shí)現(xiàn)DM碼檢測(cè),運(yùn)行截圖如下:
ONNXRUNTIME更多演示
YOLOv8對(duì)象檢測(cè) C++
YOLOv8實(shí)例分割模型 C++ 推理:
UNet語(yǔ)義分割模型 C++ 推理:
Mask-RCNN實(shí)例分割模型 C++ 推理:
YOLOv8姿態(tài)評(píng)估模型 C++ 推理:
人臉關(guān)鍵點(diǎn)檢測(cè)模型 C++ 推理:
人臉關(guān)鍵點(diǎn)檢測(cè)模型 Python SDK 推理:
學(xué)會(huì)用C++部署YOLOv5與YOLOv8對(duì)象檢測(cè),實(shí)例分割,姿態(tài)評(píng)估模型,TorchVision框架下支持的Faster-RCNN,RetinaNet對(duì)象檢測(cè)、MaskRCNN實(shí)例分割、Deeplabv3 語(yǔ)義分割模型等主流深度學(xué)習(xí)模型導(dǎo)出ONNX與C++推理部署,輕松解決Torchvision框架下模型訓(xùn)練到部署落地難題。
審核編輯:劉清
-
C++語(yǔ)言
+關(guān)注
關(guān)注
0文章
147瀏覽量
6951 -
python
+關(guān)注
關(guān)注
55文章
4768瀏覽量
84376
原文標(biāo)題:YOLOv8模型ONNX格式INT8量化輕松搞定
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論