当前位置: 首页 > article >正文

目标检测模型量化---用POT工具实现YOLOv5模型INT8量化

POT工具是什么

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

https://www.jianshu.com/p/eb8e953ef985

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

安装POT工具

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

pip install openvino-dev

参考链接

OpenVINO内建工具集

在这里插入图片描述

POT 命令行方式 vs API方式

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

1.命令行方式:

命令行方式使用简单,通过命令行运行相应配置文件来调用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 等。

2.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模型
    在这里插入图片描述

以上两步,参考链接

第三步:准备量化用标定数据集coco128

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

  • 标定数据集
    在这里插入图片描述

在yolov5路径下,运行命令:

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

会自动下载coco128数据集:

  • coco128数据集位置
    在这里插入图片描述

第四步,运行olov5s_pot_int8_coco128.py

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:
    在这里插入图片描述

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

参考资料:
《基于 OpenVINO™️ 2022.1 POT API 实现 YOLOv5 模型 INT8 量化 | 开发者实战》
《Quantize the Ultralytics YOLOv5 model and check accuracy using the OpenVINO POT API》

链接:
OpenVINO™:https://docs.openvino.ai/latest/home.html


http://www.kler.cn/a/16442.html

相关文章:

  • Java 责任链模式 减少 if else 实战案例
  • Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件
  • React的基础API介绍(二)
  • WebGIS三维地图框架--Cesium
  • jmeter常用配置元件介绍总结之定时器
  • 【计算机网络】Socket编程接口
  • 详解Python web框架到底是怎么来的?
  • 设计 模式
  • C#手麻系统源码, 基于前端Winform+后端WCF +sqlserver 开发
  • KALI入门到高级【第五章】
  • Android 11.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析
  • MySQL表的插入详解
  • 12 网络管理的封装
  • SpringBoot 多数据源及事务解决方案
  • 实验5 彩色图像处理与图像变换
  • C语言学习第一次总结
  • Qt 信号与槽机制
  • keepalived脑裂现象
  • Android Input系统事件分发分析
  • 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.
  • “双碳”目标下二氧化碳地质封存技术应用前景及模型构建实践方法与讨论
  • 设备仪器仪表盘读数识别算法 yolov5
  • Eplan 部件库导入部件的方法
  • 自动化运维工具Ansible之playbooks剧本
  • Nginx原理解析
  • (基础算法)高精度加法,高精度减法