加速44%!RT-DETR量化无损压缩优秀实战

这篇具有很好参考价值的文章主要介绍了加速44%!RT-DETR量化无损压缩优秀实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RT-DETR 模型是飞桨目标检测套件 PaddleDetection 最新发布的 SOTA 目标检测模型。其是一种基于 DETR 架构的端到端目标检测器,在速度和精度上均取得了 SOTA 性能。在实际部署中,为了追求“更准、更小、更快”的效率能力,本文使用飞桨模型压缩工具 PaddleSlim 中的自动压缩工具(ACT, Auto Compression Toolkit)将针对 RT-DETR 进行量化压缩及部署实战。使用 ACT 工具只需要几十分钟,即可完成量化压缩全流程。在模型精度持平的情况下,RT-DETR 模型体积压缩为原来的四分之一,GPU 推理加速44%

加速44%!RT-DETR量化无损压缩优秀实战

注:上述表格测试使用 Paddle Inference 开启 TensorRT,由于包含 D2H 拷贝时延,和论文 FP16 FPS 相比略慢。

传送门

https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/detection

1. RT-DETR 模型快速开始

RT-DETR 在一众 YOLO 模型中脱颖而出,成为新 SOTA,它的效果如下图所示。

加速44%!RT-DETR量化无损压缩优秀实战

点击下方文章,获取更多RT-DETR信息:

  • 超越YOLOv8,飞桨推出精度最高的实时检测器RT-DETR!

为了更方便开发者体验 RT-DETR 的效果,快速跑通从数据校验,模型训练开发到部署的全流程,飞桨在 AI Studio 全新上线了 PaddleX 模型产线。开发者只需要在模型库中选择创建模型产线,即可通过工具箱或者开发者模式快速体验 RT-DETR 模型产线全流程,非常方便易用,欢迎开发者在线体验。

加速44%!RT-DETR量化无损压缩优秀实战

快速体验地址:https://aistudio.baidu.com/aistudio/modelsoverview

2. RT-DETR 模型分析

在对 RT-DETR 量化压缩前,我们对它进行了分析。RT-DETR 网络模型主要由两个部分组成,分别是 ResNet 或者 HGNetv2 构成的 backbone 和 RT-DETR 构成的检测头。在模型的 backbone 中有大量的卷积层,此外在检测头中也有大量的矩阵乘计算,这些操作均可进行量化,从模型结构上分析来看,RT-DETR 模型拥有足够的量化加速潜力。我们使用了量化分析工具分析了各层的激活值分布:

加速44%!RT-DETR量化无损压缩优秀实战

大部分激活值分布都比较集中,离群点很少,这对量化很友好。同时我们分析了各层的权重数值分布:

加速44%!RT-DETR量化无损压缩优秀实战

可以看到权重的数据分布基本上符合正态分布,且数值较小,这样的权重分布比较适合量化。分析发现 RT-DETR 有较好的量化压缩潜力,并且为了进一步提升模型部署的性能,我们就开始量化压缩实战吧。

3. RT-DETR 模型压缩实战

RT-DETR 模型准备

PaddleDetection 中提供了官方训练好的使用了不同 backbone 的模型,我们直接使用这些模型作为原始的模型即可。在 PaddleDetection 的环境下按照其流程将模型导出成为静态图模型,这些静态图用于量化压缩和部署测试。

python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams trt=True \
              --output_dir=output_inference





数据集准备

使用 PaddleSlim 自动压缩工具量化模型需要少量的校准数据,这里我们使用标准的 COCO 数据集进行测试,可以按照 PaddleDetection 中数据准备教程进行准备,数据格式如下所示:

>>tree dataset/coco/
├── annotations
│   ├── instances_train2017.json
│   ├── instances_val2017.json
├── train2017
│   ├── 000000000009.jpg
│   │  ...
├── val2017
│   ├── 000000000139.jpg
│   │  ...





数据准备教程:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.6/docs/tutorials/data/PrepareDetDataSet.md

模型量化压缩

量化压缩一般是指降低模型存储和计算所用数值的位数,达到减少计算量、存储资源和提升推理速度的效果。在飞桨家族中,PaddleSlim 是一个模型压缩工具库,包含模型剪裁、量化、知识蒸馏、超参搜索和模型结构搜索等一系列模型压缩策略。其中的自动化压缩工具通过无源码的方式,自动对预测模型进行压缩,压缩后模型可直接部署应用。我们使用自动化压缩工具进行模型压缩分为以下3个步骤:

  • 准备预处理配置文件

数据预处理的配置和 PaddleDetection 中的模型配置对齐即可:

EvalReader:
  sample_transforms:
    - Decode: {}
    - Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}
    - NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}
    - Permute: {}
  batch_size: 1
  shuffle: false
  drop_last: false





  • 定义量化配置文件

定义量化训练的配置文件,Distillation 表示蒸馏参数配置,QuantAware 表示量化参数配置,TrainConfig 表示训练时的训练轮数、优化器等设置。具体超参的设置可以参考 ACT 超参设置文档:https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/hyperparameter_tutorial.md

Global:
  reader_config: configs/rtdetr_reader.yml
  model_dir: /rtdetr_r50vd_6x_coco/
  ……
Distillation:
  alpha: 1.0
  loss: soft_label

QuantAware:
  onnx_format: true
  activation_quantize_type: 'moving_average_abs_max'
  quantize_op_types:
  - conv2d
  - matmul_v2

TrainConfig:
  train_iter: 1000
  eval_iter: 100
  learning_rate:  0.00001
  optimizer_builder:
    optimizer: 
      type: SGD
    weight_decay: 4.0e-05





  • 开始运行

少量代码就可以开始 ACT 量化训练。启动 ACT 时,需要传入模型文件的路径(model_dir)、模型文件名(model_filename)、参数文件名称(params_filename)、压缩后模型存储路径(save_dir)、压缩配置文件(config)、dataloader和评估精度的 eval_callback。

    ac = AutoCompression(
        model_dir=global_config["model_dir"],
        model_filename=global_config["model_filename"],
        params_filename=global_config["params_filename"],
        save_dir=FLAGS.save_dir,
        config=all_config,
        train_dataloader=train_loader,
        eval_callback=eval_func)
    ac.compress()





以上是精简后的关键代码,如果想快速体验,可以根据下方链接中的示例文档及代码进行体验:
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/detection

如果使用GPU 训练,在几十分钟内就可以完成整个压缩过程。训练完成后会在 save_dir 路径下产出 model.pdmodel和model.pdiparams文件。至此,完成了模型训练压缩工作。

4. RT-DETR 模型部署

飞桨原生推理库 Paddle Inference 性能优异,针对不同平台不同的应用场景进行了深度的适配优化,做到高吞吐、低时延,支持了本项目 RT-DETR 模型的 INT8 加速推理。所以在 RT-DETR 量化压缩后,我们使用 Paddle Inference 推理库进行部署。

推理环境准备

  • 硬件环境

需要一台载有支持 INT8 加速推理的 NVIDIA tesla T4 显卡或者 A10 的推理主主机。

  • 软件环境

PaddlePaddle develop 版本我们使用以下代码进行量化模型推理速度和精度测试:https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/detection/paddle_inference_eval.py

具体地,将压缩后的模型拷贝到指定位置,运行指令:

python paddle_inference_eval.py \
    --model_path=./rtdetr_r50_quant/ \
    --reader_config=configs/rtdetr_reader.yml \
    --use_trt=True --precision=int8





值得注意的是,需要运行两次上述指令。第一次运行会收集模型信息并保存 dynamic_shape.txt,用于构建 TensorRT 加速引擎,之后运行会直接加载该文件进行实际预测。最终测试的量化模型的效果如下表所示:
加速44%!RT-DETR量化无损压缩优秀实战

-上表测试环境:Tesla T4,TensorRT 8.6.0,CUDA 11.7,batch_size=1

加速44%!RT-DETR量化无损压缩优秀实战

-上表测试环境:A10,TensorRT 8.6.0,CUDA 11.6,batch_size=1-mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95

⭐Star收藏⭐ 这么好的项目,欢迎大家点star鼓励并前来体验! https://github.com/PaddlePaddle/PaddleSlim

5. 总结与展望

本文对 RT-DETR 检测模型进行了量化压缩的全流程实践,在极小的成本下生成了能高速推理的压缩模型。在 Paddle Inference 中,经过压缩后模型的精度损失几乎可以忽略不计,但是带来的加速效果十分明显,相较于原模型最高加速比为44% 。希望看到这篇文章的开发者们,如果想进一步对 RT-DETR 进行模型压缩和部署,可以动手实践一下,亲自体验加速AI模型的快乐,希望 PaddleSlim 和 Paddle Inference 能够助力更多模型的部署落地。

项目地址

  • GitHub

https://github.com/PaddlePaddle/PaddleSlim

  • Gitee

https://gitee.com/paddlepaddle/PaddleSlim

拓展阅读

无需训练代码,推理性能提升1.4~7.1倍,业界首个自动模型压缩工具开源!

RT-DETR 快速体验地址

https://aistudio.baidu.com/aistudio/modelsoverview文章来源地址https://www.toymoban.com/news/detail-490384.html

到了这里,关于加速44%!RT-DETR量化无损压缩优秀实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenVINO】基于 OpenVINO C# API 部署 RT-DETR 模型

      RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO™ C++ API 部署 RT-DETR 模型 | 开发者实

    2024年01月23日
    浏览(40)
  • 【OpenVINO】基于 OpenVINO C++ API 部署 RT-DETR 模型

      RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于OpenVINO™ Python API 向大家展

    2024年01月22日
    浏览(43)
  • 【OpenVINO】基于 OpenVINO Python API 部署 RT-DETR 模型

    目录 1. RT-DETR 2.OpenVINO 3.环境配置 3.1模型下载环境 3.2模型部署环境 4.模型下载与转换 4.1PaddlePaddle模型下载 4.2IR模型转换 5.Python代码实现 5.1模型推理流程实现 6.预测结果展示 7.总结   RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一

    2024年02月02日
    浏览(68)
  • RT-DETR原理与简介(干翻YOLO的最新目标检测项目)

    RT-DETR是一种实时目标检测模型,它结合了两种经典的目标检测方法:Transformer和DETR(Detection Transformer)。Transformer是一种用于序列建模的神经网络架构,最初是用于自然语言处理,但已经被证明在计算机视觉领域也非常有效。DETR是一种端到端的目标检测模型,它将目标检测任

    2024年02月10日
    浏览(32)
  • RT-DETR论文阅读笔记(包括YOLO版本训练和官方版本训练)

    论文地址: RT-DETR论文地址 代码地址: RT-DETR官方下载地址 大家如果想看更详细训练、推理、部署、验证等教程可以看我的另一篇博客里面有更详细的介绍 内容回顾: 详解RT-DETR网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署  目录 一、介绍  二、相关工作 2.1、实

    2024年02月03日
    浏览(27)
  • 简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

    【前言】 本文版权属于GiantPandaCV,未经许可,请勿转账! 前几天疯狂刷屏的RT-DETR赚足了眼球,在精度和速度上体现的优势和性价比远远高于YOLO,而今年ChatGPT、Sam的出现,也让一些吃瓜群众知乎CNN没有未来了,今天的文章,我们简单聊一聊RT-DETR的骨干网络,HGNetv2。 一、R

    2023年04月27日
    浏览(23)
  • 【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

    本文给大家带来的改进机制是 EMAttention注意力机制 ,它的 核心思想是 ,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级别

    2024年02月21日
    浏览(33)
  • 【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

    👑欢迎大家订阅本专栏,一起学习RT-DETR👑     本文给大家带来的特征提取网络是华为 | Ghostnetv1其是一种专为移动端设计的特征提取网络,网络模型非常的小,其推理速度非常快,对于追求极致FPS的读者来说其是一个非常好的选择,其网络效果也是完爆经典模型MobileNet系列

    2024年01月21日
    浏览(30)
  • 【RT-DETR有效改进】华为 | GhostnetV2移动端的特征提取网络效果完爆MobileNet系列

    👑 欢迎大家订阅本专栏,一起学习RT-DETR 👑  本文给大家带来的改进机制是华为移动端模型GhostNetV2,华为 GhostNetV2 是为 移动应用设计的轻量级卷积神经网络(CNN) ,旨在提供更快的推理速度,其引入了一种硬件友好的注意力机制,称为DFC注意力。这个注意力机制是基于全

    2024年01月22日
    浏览(39)
  • 【RT-DETR有效改进】ShapeIoU、InnerShapeIoU关注边界框本身的IoU(包含二次创新)

    👑欢迎大家订阅本专栏,一起学习RT-DETR👑  本文给大家带来的改进机制是ShapeIoU其是一种关注边界框本身形状和尺度的边界框回归方法(IoU),同时本文的内容包括过去到现在的百分之九十以上的损失函数的实现,使用方法非常简单,在本文的末尾还会教大家在改进模型时

    2024年01月16日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包