用POT工具实现YOLOv5模型INT8量化

什么是POT工具?

POT工具,全称:Post-training Optimization Tool,即训练后优化工具,主要功能是将YOLOv5 OpenVINO™ FP32 模型进行 INT8 量化,实现模型文件压缩,从而进一步提高模型推理性能。

不同于 Quantization-aware Training 方法,POT使用起来更加简单,在改善 CPU 和硬件加速器延迟的同时缩减模型大小,且几乎不会降低模型准确率,因此广泛地被应用于工业界的量化实践中。

安装POT工具

POT工具已经集成到OpenVINO™ 开发套件中,只需一条命令,可以完成全部内建工具的安装。

pip install openvino-dev

参考链接:https://pypi.org/project/openvino-dev/

OpenVINO内建工具集

POT 命令行方式 vs API方式

POT提供了以下两种使用方式:命令行方式和API方式

  • 命令行方式:使用简单,通过命令行运行相应配置文件来调用OpenVINO™ Accuracy Checker Tool预定义DataLoader, Metric, Adapter, Pre/Postprocessing 等模块,这种方式适用于 OpenVINO™ Open Model Zoo 支持模型或类似模型的 INT8 量化。
"engine": {
        "type": "accuracy_checker",
        "config": "./configs/examples/accuracy_checker/mobilenet_v2.yaml"
    }

pot默认调用accuracy_checker, 这个工具默认支持Open Model Zoo的模型,并通过accuracy_checker检查模型精度。accuracy_checker的配置文件accuracy-check.yml文件定义好了adapter、datasets、preprocessing、postprocessing、metrics等。若您将要优化的模型,不在Open Model Zoo里面,则需要用API方式,自定义DataLoader 和 Metric 等。

  • API方式:用户通过继承 DataLoader 来定义客制化的数据集加载及预处理模块,通过继承 Metric 来定义客制化的后处理和精度计算的模块,这种方式更加灵活,可以适用不同客制化模型的量化需求。
    POT工具API使用方式

    由于YOLOv5,并不在Open Model Zoo中,所以本文选择API方式实现YOLOv5模型INT8量化。
    YOLOv5不在Open Model Zoo中

用POT工具的API方式实现YOLOv5模型INT8量化

  • 第一步:配置YOLOv5和 OpenVINO™开发环境。

git clone https://github.com/ultralytics/yolov5.git
cd yolov5 && pip install -r requirements.txt && pip install openvino-dev[onnx]

  • 第二步:导出YOLOv5 OpenVINO IR模型。
    在yolov5路径下,运行

python export.py --weights yolov5s.pt --include onnx openvino

导出YOLOv5 OpenVINO IR模型

以上两步,参考链接:https://github.com/ultralytics/yolov5

  • 第三步:准备量化用标定数据集coco128COCO128数据集是从COCO Train2017中抽取了前128张图片制作的数据集。POT在做训练后INT8量化时,需要一个标定数据,即大约300张的标注图片,coco128数据集很适合做标定数据集。
    标定数据集

在yolov5路径下,运行命令:

python train.py --data data\coco128.yaml

会自动下载coco128数据集:
coco128数据集位置
yolov5s_pot_int8_coco128.py运行结果
  • 第五步,将量化算法从DefaultQuantization更改为AccuracyAwareQuantization,再次运行,对比不同算法INT8量化结果
    DefaultQuantization
    AccuracyAwareQuantization

选择量化算法的最佳工程实践是:先用DefaultQuantization算法,若INT8量化后,精度满足要求,则完成INT8量化任务;若精度不满足下降要求,则运行AccuracyAwareQuantization。
AccuracyAwareQuantization算法会根据量化层对精度下降的贡献,将量化层恢复为浮点精度,直到满足全精度模型所需的精度下降为止,运行时间比DefaultQuantization算法长很多(十倍以上)。
注意,由于 AccuracyAwareQuantization 算法会将部分量化层恢复为浮点精度,所以可能出现AccuracyAwareQuantization算法对模型的加速低于模型完全量化(DefaultQuantization)的速度 。

由于YOLOv5模型预训练参数INT8量化效果相当好,所以DefaultQuantization和AccuracyAwareQuantization算法运行结果几乎是一致的。
dq vs aaq 模型大小比较

运行benchmark_app结果@i7-8700k:

model latency@CPU Throughtput@CPU model size
yolov5s_aaq 90.77ms 44.01 FPS 7.5MB
yolov5s_dq 90.02ms 44.37 FPS 7.4MB
yolov5s_fp16 148.90ms 26.83 FPS 14.3MB
yolov5s_fp32 150.93ms 26.47 FPS 28.6MB
model latency@iGPU Throughtput@iGPU model size
yolov5s_aaq 468.56ms 17.04 FPS 7.5MB
yolov5s_dq 483.24ms 16.52 FPS 7.4MB
yolov5s_fp16 69.59ms 28.71 FPS 14.3MB
yolov5s_fp32 112.10ms 17.83 FPS 28.6MB

结论:INT8是CPU友好精度;FP16是集成显卡友好精度!

参考资料:

  1. 《基于 OpenVINO™️ 2022.1 POT API 实现 YOLOv5 模型 INT8 量化 | 开发者实战》
  2. 《Quantize the Ultralytics YOLOv5 model and check accuracy using the OpenVINO POT API》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容