ONNX格式模型量化
深度學(xué)習(xí)模型量化支持深度學(xué)習(xí)模型部署框架支持的一種輕量化模型與加速模型推理的一種常用手段,ONNXRUNTIME支持模型的簡(jiǎn)化、量化等腳本操作,簡(jiǎn)單易學(xué),非常實(shí)用。 ONNX 模型量化常見(jiàn)的量化方法有三種:動(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ù)來(lái)計(jì)算激活的量化參數(shù)。 量化感知訓(xùn)練量化:在訓(xùn)練時(shí)計(jì)算激活的量化參數(shù),訓(xùn)練過(guò)程可以將激活控制在一定范圍內(nèi)。當(dāng)前ONNX支持的量化操作主要有:
Opset版本最低不能低于10,低于10不支持,必須重新轉(zhuǎn)化為大于opset>10的ONNX格式。模型量化與圖結(jié)構(gòu)優(yōu)化有些是不能疊加運(yùn)用的,模型開(kāi)發(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量化模型,代碼如下:
案例說(shuō)明
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瀏覽量
7221 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86142
原文標(biāo)題:YOLOv8模型ONNX格式INT8量化輕松搞定
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
esp-dl int8量化模型數(shù)據(jù)集評(píng)估精度下降的疑問(wèn)求解?
是否可以輸入隨機(jī)數(shù)據(jù)集來(lái)生成INT8訓(xùn)練后量化模型?
labview調(diào)用yolov8/11目標(biāo)檢測(cè)、分割、分類(lèi)
yolov7 onnx模型在NPU上太慢了怎么解決?
INT8量化常見(jiàn)問(wèn)題的解決方案
【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】yolov8模型轉(zhuǎn)換
NCNN+Int8+yolov5部署和量化

使用YOLOv8做目標(biāo)檢測(cè)和實(shí)例分割的演示
在AI愛(ài)克斯開(kāi)發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

AI愛(ài)克斯開(kāi)發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測(cè)模型

教你如何用兩行代碼搞定YOLOv8各種模型推理

三種主流模型部署框架YOLOv8推理演示
OpenCV4.8+YOLOv8對(duì)象檢測(cè)C++推理演示

Yolo系列模型的部署、精度對(duì)齊與int8量化加速
基于YOLOv8的自定義醫(yī)學(xué)圖像分割

評(píng)論