使用OpenVINO实现 RT-DETR 模型 INT8量化推理加速
- 1. 使用 OpenVINO 实现 RT-DETR 模型 INT8量化
- 1.1 神经网络压缩框架 (NNCF)
-
- 1.2 准备校准数据集
-
- 1.2.1 下载COCO验证数据集
- 1.2.2 Validator包装器
- 1.2.3 转换用于量化的数据集
- 1.3 定义模型精度校验方法
- 1.4 模型量化
-
- 1.4.1 模型量化实现
- 1.4.2 量化前后精度测试
- 1.4.3 量化前后速度对比
- 2. Intel iGPU 推理加速RT-DETR 模型和速度比较
-
- 2.1 Intel iGPU 推理加速RT-DETR 模型实现
- 2.2 CPU与iGPU推理速度对比
- 3. 总结
RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了 《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》、 《基于 OpenVINO™ C++ API 部署 RT-DETR 模型 | 开发者实战》以及 《基于 OpenVINO™ C# API 部署 RT-DETR 模型 | 开发者实战》,实现了基于OpenVINO™ Python 、 C++ API 和C# 凭他向大家展示了的RT-DETR模型的部署流程,并分别展示了是否包含后处理的模型部署流程,为大家使用RT-DETR模型提供了很好的范例。
但是经过时间检测,使用OpenVINO™ 在CPU平台上运行RT-DETR模型,其推理速度最快可以达到3~4帧左右,但这对于视频数据预测是远远不够的。由于 OpenVINO™ 最新发行版2023.1.0在GPU平台对RT-DETR模型算子还不支持,所以在前面文章中我们没有在iGPU平台上进行测试。为了提高推理速度,在本文章中,我们将使用 OpenVINO 实现 RT-DETR 模型 INT8量化,通过模型优化技术实现模型推理加速;并且在 OpenVINO工程师指导下,通过修改OpenVINO 源码,重现编译了官方库,实现了GPU对RT-DETR 模型的支持。
项目所使用的全部代码已经在GitHub上开源,并且收藏在OpenVINO-CSharp-API项目里,项目所在目录链接为:
https://github.com/guojin-yan/OpenVINO-CSharp-API/tree/csharp3.0/tutorial_examples
也可以直接访问该项目,项目链接为:
https://github.com/guojin-yan/RT-DETR-OpenVINO.git
文章首发链接为:使用 OpenVINO™ 实现 RT-DETR 模型 INT8 量化推理加速 | 开发者实战
1. 使用 OpenVINO 实现 RT-DETR 模型 INT8量化
训练后模型优化是使用无需重新训练或微调的特殊方法,即可将模型转换为对硬件更友好的表示形式。目前最流行和使用最广泛使用的方法是INT8量化,具有以下优点:
- 它易于使用。
- 它不会对准确性造成太大影响。
- 它提供了显著的性能改进。
- 它适合许多库存硬件,因为它们中的大多数都原生支持 8 位计算。
INT 8量化将模型权重和激活函数的精度降低到 8 位,从而将模型占用空间减少近 4 倍,降低推理所需的吞吐量,并显著提高推理速度,量化过程在实际推理之前离线完成。通过OpenVINO实现模型的量化过程不需要源深度学习框架中的训练数据集或训练代码。
为了让大家更好的复现RT-DETR 模型 INT8量化流程,我们提供了完整的 Notebook文件,使用者可以根据文件操作流程进行一步步操作。使用 OpenVINO 实现 RT-DETR 模型 INT8量化的完整代码已经上传到GitHub中,文章链接为:
https://github.com/guojin-yan/RT-DETR-OpenVINO/blob/master/optimize/openvino-convert-and-optimize-rt-detr.ipynb
为了方便大家复现该项目,此处录制了演示视频,已经发布到B站,视频链接为:
https://www.bilibili.com/video/BV11N411T7m5/
使用 OpenVINO 实现 RT-DETR 模型 INT8量化推理加速
1.1 神经网络压缩框架 (NNCF)
神经网络压缩框架 (NNCF) 提供了 Python 中提供的训练后量化 API,旨在重用代码进行模型训练或验证,这些代码通常可用于源框架中的模型,例如 PyTorch 或 TensroFlow。NNCF API 是跨框架的,目前支持以下框架中的模型:OpenVINO、PyTorch、TensorFlow 2.x 和 ONNX。目前,OpenVINO中间表示中模型的训练后量化在支持的方法和模型覆盖率方面是最成熟的。

NNCF API 有两个方式来实现训练后INT 8量化:
- 基本量化:基本量化流程是将INT 8 量化应用于模型的最简单方法,它适用于OpenVINO、PyTorch、TensorFlow 2.x 和 ONNX框架中的模型。在这种情况下,只需要具有代表性的校准数据集进行。
- 具有精度控制的量化:这是高级量化流程,允许将INT 8 量化应用于模型,并通过验证函数控制精度指标。目前只支持OpenVINO框架中的模型。除了校准数据集之外,还需要验证数据集来计算准确性指标。
1.2 准备校准数据集
在本实验中,我们只实现基本量化,因此只需要准备校验数据集即可。RT-DETR模型预训练模型是在COCO数据集下训练的,因此我们只需要准备COCO验证数据集即可。为了更容易构建验证数据集,我们此处使用ultralytics框架下的API方法实现。
1.2.1 下载COCO验证数据集
COCO验证数据集可以通过官网直接下载,也可以通过下面的代码下载:
DATA_URL = "http://images.cocodataset.org/zips/val2017.zip"
LABELS_URL = "https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels-segments.zip"
CFG_URL = "https://raw.githubusercontent.com/ultralytics/ultralytics/8ebe94d1e928687feaa1fee6d5668987df5e43be/ultralytics/datasets/coco.yaml"
CACHE_URL = "https://github.com/guojin-yan/RT-DETR-OpenVINO/releases/download/Model2.0/val2017.cache"
OUT_DIR = Path('./datasets')
DATA_PATH = OUT_DIR / "val2017.zip"
LABELS_PATH = OUT_DIR / "coco2017labels-segments.zip"
CFG_PATH = OUT_DIR / "coco.yaml"
CACHE_PATH = OUT_DIR / "coco/labels/val2017.cache"
download_file(DATA_URL, DATA_PATH.name, DATA_PATH.parent)
download_file(LABELS_URL, LABELS_PATH.name, LABELS_PATH.parent)
download_file(CFG_URL, CFG_PATH.name, CFG_PATH.parent)
if not (OUT_DIR / "coco/labels").exists()

本文介绍了如何使用OpenVINO实现RT-DETR模型的INT8量化,通过NNCF框架进行模型压缩,优化了CPU和iGPU推理速度。通过量化,模型速度提升3-4倍,且占用内存减小,适用于边缘设备部署。
最低0.47元/天 解锁文章
934

被折叠的 条评论
为什么被折叠?



