目标检测模型量化---用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16499.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL-数据库管理(上)

一、数据库概述 一、数据库基本概念 1.1 数据 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。…

Mask2Former来了!用于通用图像分割的 Masked-attention Mask Transformer

原理https://blog.csdn.net/bikahuli/article/details/121991697 源码解析 论文地址:http://arxiv.org/abs/2112.01527 项目地址:https://bowenc0221.github.io/mask2former Mask2Former的整体架构由三个组件组成: 主干特征提取器&#xff…

【Java笔试强训 29】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥求正数数…

UNIX环境高级编程——进程关系

9.1 引言 本章详细说明进程组以及会话的概念,还将介绍登录shell(登录时所调用的)和所有从登录shell启动的进程之间的关系。 9.2 终端登录 9.3 网络登录 9.4 进程组 每个进程除了有一进程ID之外,还属于一个进程组,进…

chatgpt 数据相关应用论文策略简介

hatGPT等预训练大模型,一个核心能力就是经过海量语料的训练加上强化学习的引导,其具有强大的接近人类的文本生成能力。这个能力的一大用途,就是可以为我们生产数据或者标注数据,再基于这些数据训练我们自己的模型。 On the Feasi…

如何让ChatGPT成为科研工作中的小助手?(附使用指南)

大家好,我是带我去滑雪! 从2022年年底发布叫ChatGPT的人工智能聊天机器人以来,逐渐强势进入了各行各业,一夜火爆全网,它使用自然语言处理技术来与用户进行交互和沟通,可以回答用户关于知识、娱乐、生活等方…

【计算机专业漫谈】【计算机系统基础学习笔记】W1-计算机系统概述

利用空档期时间学习一下计算机系统基础,以前对这些知识只停留在应试层面,今天终于能详细理解一下了。参考课程为南京大学袁春风老师的计算机系统基础MOOC,参考书籍也是袁老师的教材,这是我的听课自查资料整理后的笔记,…

上市公司碳排放测算数据(1992-2022年)

根据《温室气体核算体系》,企业的碳排放可以分为三个范围。 范围一是直接温室气体排放,产生于企业拥有或控制的排放源,例如企业拥有或控制的锅炉、熔炉、车辆等产生的燃烧排放;拥有或控制的工艺设备进行化工生产所产生的排放。 范…

第十五章 角色移动旋转实例

本章节我们创建一个“RoleDemoProject”工程,然后导入我们之前创建地形章节中的“TerrainDemo.unitypackage”资源包,这个场景很大,大家需要调整场景视角才能看清。 接下来,我们添加一个人物模型,操作方式就是将模型文…

基于GWO灰狼优化算法的城市路径优化问题GWO-TSP(MATLAB程序)

资源地址: 基于GWO灰狼优化算法的城市路径优化问题GWO-TSP(MATLAB程序)资源-CSDN文库 主要内容: 主要采用灰狼优化算法对城市间的路径进行规划。城市分布图如图所示。 部分代码: % 产生问题模型 model CreateModel(Oliver30.…

kafka常见问题QA(六)

六、常见问题QA 6.1 无消息丢失如何配置 producer 调用方式 (1)网络抖动导致消息丢失,Producer 端可以进行重试。 (2)消息大小不合格,可以进行适当调整,符合 Broker 承受范围再发送。 不要使用…

【C++】STL标准库之vector

STL标准库之vector vector类的简介常用的vector类的接口构造容量遍历及访问增删查改迭代器迭代器失效问题 vector类的简介 vector是大小可变数组的序列容器,与string相比,vector中可以存任何类型的数据,而string中存储的只能是字符类型。 因为…

asp.net基于web的音乐管理网站dzkf17A9程序

本系统主要包含了等系统用户管理、公告信息管理、音乐资讯管理、音乐类型管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块:管理员登录系统对本系统其他管理模块进行管理。 用户的登录模块:用户登录本系统,对个…

真题详解(有向图)-软件设计(六十二)

真题详解(极限编程)-软件设计(六十一)https://blog.csdn.net/ke1ying/article/details/130435971 CMM指软件成熟度模型,一般1级成熟度最低,5级成熟度最高,采用更高级的CMM模型可以提高软件质量。 初始&am…

Spring框架中的单例Beans是线程安全的么?

在Spring框架中,单例Beans默认是线程安全的。 当你在Spring框架中声明一个单例Bean并配置为默认的单例作用域时,Spring会确保对该Bean的并发访问是线程安全的。以下是一个简单的代码演示: 假设我们有一个名为 SingletonBean 的单例 Bean 类…

看看人家的MyBatis批量插入数据优化,从120s到2.5s,那叫一个优雅!

粗略的实验 最后 最近在压测一批接口的时候,我发现接口处理速度比我们预期的要慢。这让我感到有点奇怪,因为我们之前已经对这些接口进行了优化。但是,当我们进行排查时,发现问题出在数据库批量保存这块。 我们的项目使用了 myb…

Java使用 Scanner连续输入int, String 异常错误输出原因分析

目录 一、Scanner常用语法 1、sc.nextInt()介绍 2、sc.next()介绍 3、sc.nextLine()介绍 4、sc.hasNext()介绍 二、报错案例 1、使用next()来接收带有空格的字符串会输出异常 2、先输入数字再输入字符串的输出异常 一、Scanner常用语法 Scanner sc new Scanner(System.…

零基础学会 Java,这是你需要按照学习的步骤,加油,新加入的你

学习 Java 需要遵循一定的步骤,首先需要学习计算机基础知识,例如算法、数据结构、计算机组成原理等。如果没有相关背景知识,可以参加计算机相关课程进行学习。其次是学习编程基础知识,例如控制流、变量、函数等,你可以…

@Autowired和@Resource注解之间的关系区别,Bean的作用域和生命周期,Spring的执行流程

目录 一. Autowired 和 Resource 注解 二. Bean的作用域 1. singleton(单例模式) 2. prototype(原型模式)(多例模式) 3. 请求作用域:request 4. 会话作用域:session 三. Spring 的执行流程 四. Bean 的生命周期 1. 实例化 2. 设置属性 3. Bea…

函数的栈帧与销毁(栈帧可不是战争哦)

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言》专栏,笔者用重金(时间和精力)打造,将C语言知识一网打尽,希望可…