乐趣区

关于paddle:加速44RTDETR量化无损压缩优秀实战

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

注:上述表格测试应用 Paddle Inference 开启 TensorRT,因为蕴含 D2H 拷贝时延,和论文 FP16 FPS 相比略慢。

传送门

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

1. RT-DETR 模型疾速开始

RT-DETR 在一众 YOLO 模型中怀才不遇,成为新 SOTA,它的成果如下图所示。

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

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

为了更不便开发者体验 RT-DETR 的成果,疾速跑通从数据校验,模型训练开发到部署的全流程,飞桨在 AI Studio 全新上线了 PaddleX 模型产线。开发者只须要在模型库中抉择创立模型产线,即可通过工具箱或者开发者模式 疾速体验 RT-DETR 模型产线全流程,十分不便易用,欢送开发者在线体验。

疾速体验地址:https://aistudio.baidu.com/aistudio/modelsoverview![]

2. RT-DETR 模型剖析

在对 RT-DETR 量化压缩前,咱们对它进行了剖析。RT-DETR 网络模型次要由两个局部组成,别离是 ResNet 或者 HGNetv2 形成的 backbone 和 RT-DETR 形成的检测头。在模型的 backbone 中有大量的卷积层,此外在检测头中也有大量的矩阵乘计算,这些操作均可进行量化,从模型构造上剖析来看,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 中的模型配置对齐即可:

1.EvalReader:
2.  sample_transforms:
3.    - Decode: {}
4.    - Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}
5.    - NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}
6.    - Permute: {}
7.  batch_size: 1
8.  shuffle: false
9.  drop_last: false
  • 定义量化配置文件

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

1.Global:
2.  reader_config: configs/rtdetr_reader.yml
3.  model_dir: /rtdetr_r50vd_6x_coco/
4.  ……
5.Distillation:
6.  alpha: 1.0
7.  loss: soft_label
8.
9.QuantAware:
10.  onnx_format: true
11.  activation_quantize_type: 'moving_average_abs_max'
12.  quantize_op_types:
13.  - conv2d
14.  - matmul_v2
15.
16.TrainConfig:
17.  train_iter: 1000
18.  eval_iter: 100
19.  learning_rate:  0.00001
20.  optimizer_builder:
21.    optimizer: 
22.      type: SGD
23.    weight_decay: 4.0e-05
  • 开始运行

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

1.    ac = AutoCompression(2.        model_dir=global_config["model_dir"],
3.        model_filename=global_config["model_filename"],
4.        params_filename=global_config["params_filename"],
5.        save_dir=FLAGS.save_dir,
6.        config=all_config,
7.        train_dataloader=train_loader,
8.        eval_callback=eval_func)
9.    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 减速引擎,之后运行会间接加载该文件进行理论预测。最终测试的量化模型的成果如下表所示:
- 上表测试环境:Tesla T4,TensorRT 8.6.0,CUDA 11.7,batch_size=1- 上表测试环境: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

退出移动版