
基于 PaddleDetection 的 Group DETR 系列实战指南分组一对多匹配与编码器-解码器预训练【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetectionGroup DETR / Group DETR v2 是两代以分组一对一/多匹配和编码器-解码器预训练为核心的 DETR 系列检测模型本指南基于当前仓库 configs/group_detr 目录下的官方复现配置完整讲解其原理、模型库、配置文件结构与多卡训练方法。读完本文你将掌握如何在 PaddleDetection 中配置并训练 R-50 与 ViT-Huge 两个 Group DETR 变体并理解dual_queries/dual_groups在源码中的底层实现。一、Group DETR 与 Group DETR v2 技术背景Group DETR 的目标是解决 DETR 系列模型训练收敛慢的痛点。传统 DETR 使用一对一匹配one-to-one assignment每个 ground-truth 目标只匹配一个 query导致监督信号稀疏、训练需要更多轮次。Group DETR 引入分组一对多匹配group-wise one-to-many assignment将一组 query 按组划分每组中的多个 query 可以共同负责匹配同一个目标从而在不改变推理时 query 数量的前提下为训练提供更密集的监督信号显著加快收敛速度。Group DETR v2 则进一步提出**编码器-解码器预训练encoder-decoder pretraining**范式先对检测模型的编码器与解码器进行预训练再在目标检测数据上微调。根据当前仓库 configs/group_detr/README.md 的说明Group DETR论文 arXiv:2207.13085是基于 DETR 的目标检测模型仓库按论文完整复现。Group DETR v2论文 arXiv:2211.03594是基于 DINO 与 Group DETR 的强目标检测模型仓库同样按论文完整复现。说明上文中论文链接来自仓库 README 原文供读者理解技术出处本仓库内的复现与配置以 PaddlePaddle 实现为准。二、Model Zoo已复现模型与精度当前仓库在configs/group_detr下提供了两个可直接使用的模型配置官方复现在 COCO 数据集上的检测精度Box AP即mAP(IoU0.5:0.95)如下表所示BackboneModelEpochsResolutionBox APConfigDownloadR-50dino_r50_4scale12(800, 1333)49.6configmodelViT-Hugedino_vit_huge_4scale12(1184, 2000)63.3configmodel使用说明与注意事项原文 Notes两个模型均使用 COCO train2017 训练并在 val2017 上以mAP(IoU0.5:0.95)评估。Group DETR v2ViT-Huge 变体的训练流程更复杂需要先在 ImageNet-1K 上以自监督方式预训练并微调 ViT-Huge 编码器再在 Object365 上预训练检测器最后在 trainCOCO 上微调评估同样在 val2017 上进行。Group DETR 与 Group DETR v2 均使用4 张 GPU训练。上述精度与下载链接均来自仓库 configs/group_detr/README.md 的 Model Zoo 表格其中权重链接指向官方 BOS 存储可直接用于评估或推理。三、配置文件逐层解析configs/group_detr目录采用 PaddleDetection 标准的_BASE_继承机制组织配置configs/group_detr/ ├── README.md ├── group_dino_r50_4scale_1x_coco.yml ├── group_dino_vit_huge_4scale_1x_coco.yml └── _base_/ ├── group_dino_r50.yml ├── group_dino_vit_huge.yml ├── dino_reader.yml ├── dino_2000_reader.yml └── optimizer_1x.yml3.1 顶层入口配置以 R-50 变体为例group_dino_r50_4scale_1x_coco.yml 内容如下_BASE_: [ ../datasets/coco_detection.yml, ../runtime.yml, _base_/optimizer_1x.yml, _base_/group_dino_r50.yml, _base_/dino_reader.yml, ] weights: output/group_dino_r50_4scale_1x_coco/model_final find_unused_parameters: True log_iter: 100其继承了五份基础配置继承配置作用../datasets/coco_detection.ymlCOCO 数据集路径与类别定义详见 configs/datasets/coco_detection.yml../runtime.yml训练/评估/推理通用运行时配置详见 configs/runtime.yml_base_/optimizer_1x.yml12 epoch 训练计划与 AdamW 优化器_base_/group_dino_r50.yml以 ResNet-50 为骨干的 Group DINO 模型结构_base_/dino_reader.yml面向 (800, 1333) 分辨率的 DINO 数据读取与增广流水线顶层三个自有字段含义weights保存最终权重的前缀路径训练结束后会产出model_final.pdparams等文件。find_unused_parameters: True在 DDP 分布式训练中允许存在未参与反向传播的参数Group DETR 的分组去噪分支在部分情况下会产生未用参数因此需要开启。log_iter: 100每 100 个 iter 打印一次训练日志。ViT-Huge 变体的 group_dino_vit_huge_4scale_1x_coco.yml 结构完全一致仅将模型配置替换为_base_/group_dino_vit_huge.yml、数据读取替换为_base_/dino_2000_reader.yml权重前缀为output/group_dino_vit_huge_4scale_1x_coco/model_final。3.2 模型结构配置_base_/group_dino_r50.ymlgroup_dino_r50.yml 定义了完整的模型组装architecture: DETR pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams hidden_dim: 256 use_focal_loss: True DETR: backbone: ResNet transformer: GroupDINOTransformer detr_head: DINOHead post_process: DETRPostProcess ResNet: depth: 50 norm_type: bn freeze_at: 0 return_idx: [1, 2, 3] lr_mult_list: [0.0, 0.1, 0.1, 0.1] num_stages: 4 GroupDINOTransformer: num_queries: 900 position_embed_type: sine num_levels: 4 nhead: 8 num_encoder_layers: 6 num_decoder_layers: 6 dim_feedforward: 2048 dropout: 0.0 activation: relu pe_temperature: 20 pe_offset: 0.0 num_denoising: 100 label_noise_ratio: 0.5 box_noise_scale: 1.0 learnt_init_query: True dual_queries: True dual_groups: 10 DINOHead: loss: name: DINOLoss loss_coeff: {class: 1, bbox: 5, giou: 2} aux_loss: True matcher: name: HungarianMatcher matcher_coeff: {class: 2, bbox: 5, giou: 2} DETRPostProcess: num_top_queries: 300 dual_queries: True dual_groups: 10关键参数说明architecture: DETR以 DETR 为总装架构内部由 backbone、transformer、head、post_process 四部分组成。pretrain_weights骨干网络预训练权重ResNet50 cosine 预训练权重训练启动时会自动下载。use_focal_loss: True分类分支使用 Focal Loss这是 DINO 系列含 Group DETR相比原始 DETR 的重要改进。GroupDINOTransformer这是 Group DETR 的核心模块其中num_queries: 900decoder 使用 900 个 query。在dual_queries开启后这 900 个 query 会被划分为主 query 与分组 query 两类见下文源码解析。num_levels: 4使用 4 尺度多尺度特征4-scale对应多尺度可变形注意力。num_encoder_layers / num_decoder_layers: 6 / 66 层编码器 6 层解码器。num_denoising: 100每组去噪 query 数量为 100用于 DINO 风格的对比去噪训练。label_noise_ratio: 0.5/box_noise_scale: 1.0去噪训练中标签噪声比例与框噪声尺度。dual_queries: Truedual_groups: 10开启双查询dual queries机制并将查询分为 10 组这是 Group DETR 分组一对多匹配的直接体现。DINOHead损失函数为DINOLoss分类/框/giou 损失系数为{class: 1, bbox: 5, giou: 2}匹配器为匈牙利匹配器HungarianMatcher系数{class: 2, bbox: 5, giou: 2}并开启aux_loss辅助解码层损失。DETRPostProcess推理后处理保留num_top_queries: 300个 top 结果并同样传入dual_queries: True、dual_groups: 10与训练阶段的分组设置保持一致确保推理时能从分组 query 中正确聚合输出。3.3 ViT-Huge 变体配置_base_/group_dino_vit_huge.ymlgroup_dino_vit_huge.yml 将骨干替换为 Vision Transformerarchitecture: DETR pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/vit_huge_mae_patch14_dec512d8b_pretrained.pdparams hidden_dim: 256 use_focal_loss: True DETR: backbone: VisionTransformer2D neck: SimpleFeaturePyramid transformer: GroupDINOTransformer detr_head: DINOHead post_process: DETRPostProcess VisionTransformer2D: patch_size: 16 embed_dim: 1280 depth: 32 num_heads: 16 mlp_ratio: 4 attn_bias: True drop_rate: 0.0 drop_path_rate: 0.1 lr_decay_rate: 0.7 global_attn_indexes: [7, 15, 23, 31] use_abs_pos: False use_rel_pos: True rel_pos_zero_init: True window_size: 14 out_indices: [ 31, ] SimpleFeaturePyramid: out_channels: 256 num_levels: 4 GroupDINOTransformer: num_queries: 900 position_embed_type: sine pe_temperature: 20 pe_offset: 0.0 num_levels: 4 nhead: 8 num_encoder_layers: 6 num_decoder_layers: 6 dim_feedforward: 2048 use_input_proj: False dropout: 0.0 activation: relu num_denoising: 100 label_noise_ratio: 0.5 box_noise_scale: 1.0 learnt_init_query: True dual_queries: True dual_groups: 10 DETRPostProcess: num_top_queries: 300 dual_queries: True dual_groups: 10与 R-50 变体的差异集中在骨干部分VisionTransformer2DViT-Huge 结构patch 16、embed_dim 1280、32 层、16 头、MLP 比例 4。预训练权重为ViT-Huge MAEmasked autoencoder自监督预训练权重lr_decay_rate: 0.7表示对浅层使用更低学习率的分层衰减策略。SimpleFeaturePyramid由于 ViT 输出为单尺度特征通过简单的特征金字塔4 个 level输出通道 256构造多尺度特征供 4-scale 可变形注意力使用。use_input_proj: False因为已经通过SimpleFeaturePyramid将特征投影到统一通道Transformer 内部不再重复构建输入投影层对应源码中_build_input_proj_layer的开关见下文。DINOHead配置与 R-50 一致DINOLossHungarianMatcher系数相同两变体共享相同的损失与匹配策略。3.4 数据读取与增广dino_reader.yml与dino_2000_reader.yml两份 reader 配置分别服务于 (800, 1333) 与 (1184, 2000) 两种输入分辨率训练阶段均采用 DINO 风格的随机多尺度增广。dino_reader.yml 的训练流水线worker_num: 2 TrainReader: sample_transforms: - Decode: {} - RandomFlip: {prob: 0.5} - RandomSelect: { transforms1: [ RandomShortSideResize: { short_side_sizes: [ 480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800 ], max_size: 1333 } ], transforms2: [ RandomShortSideResize: { short_side_sizes: [ 400, 500, 600 ] }, RandomSizeCrop: { min_size: 384, max_size: 600 }, RandomShortSideResize: { short_side_sizes: [ 480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800 ], max_size: 1333 } ] } - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]} - NormalizeBox: {} - BboxXYXY2XYWH: {} - Permute: {} batch_transforms: - PadMaskBatch: {pad_to_stride: -1, return_pad_mask: true} batch_size: 2 shuffle: true drop_last: true collate_batch: false use_shared_memory: falseRandomSelect以 50% 概率选择两条增广路径之一——纯随机短边缩放或缩放 随机裁剪 再缩放的组合增广large-scale jitter 风格提升模型尺度鲁棒性。short_side_sizes从 480 到 800 共 11 档max_size: 1333限制最长边与 Model Zoo 表中 (800, 1333) 分辨率对应。PadMaskBatch对 batch 内的图做 padding并返回 pad maskreturn_pad_mask: true供 Transformer 编码器忽略 padding 区域。训练batch_size: 2drop_last: truecollate_batch: false由 PadMaskBatch 自定义 batch 组装。dino_2000_reader.yml 面向 ViT-Huge 变体区别在于短边缩放档位扩展为 480~1184 共 24 档max_size: 2000随机裁剪的min_size: 384, max_size: 900。评估与测试分辨率提升为(1184, 2000)与 Model Zoo 表中 ViT-Huge 一行的 Resolution 对应。两份配置的 EvalReader / TestReader 均采用保持长宽比的单尺度Resizekeep_ratio: Truebatch_size: 1。3.5 训练计划与优化器optimizer_1x.ymloptimizer_1x.yml 是典型的 DETR 系列 1x 训练计划epoch: 12 LearningRate: base_lr: 0.0001 schedulers: - !PiecewiseDecay gamma: 0.1 milestones: [11] use_warmup: false OptimizerBuilder: clip_grad_by_norm: 0.1 regularizer: false optimizer: type: AdamW weight_decay: 0.000112 epoch 总训练时长在第 11 epoch 处学习率乘以 0.1PiecewiseDecaygamma: 0.1无 warmup。AdamW 优化器基础学习率1e-4权重衰减1e-4不额外使用正则化regularizer: false。梯度裁剪clip_grad_by_norm: 0.1限制全局梯度范数保证 Transformer 训练稳定。四、源码级原理dual_queries与dual_groups的实现Group DETR 的分组一对多匹配在源码中由 ppdet/modeling/transformers/group_detr_transformer.py 中的GroupDINOTransformer类实现。该类继承自 DINO 系列的可变形 Transformer 结构核心新增即双查询分组机制。从__init__签名第 339-367 行可见其关键入参class GroupDINOTransformer(nn.Layer): __shared__ [num_classes, hidden_dim] def __init__(self, num_classes80, hidden_dim256, num_queries900, ... learnt_init_queryTrue, use_input_projTrue, dual_queriesFalse, dual_groups0, eps1e-2):当dual_queriesTrue时源码会为每个分组创建独立的参数第 414-474 行附近分组去噪类别嵌入denoising_class_embed_groups nn.LayerList([nn.Embedding(num_classes, hidden_dim) for _ in range(self.dual_groups)])即每个分组拥有独立的去噪类别嵌入。分组 query 初始化tgt_embed_dual nn.LayerList([nn.Embedding(num_queries, hidden_dim) for _ in range(self.dual_groups)])每个分组有独立的可学习 query 初始嵌入并通过normal_初始化。分组编码器输出头enc_output被复制为dual_groups 1份主查询 10 组同时为每组单独创建enc_bbox_head_dq与enc_score_head_dq分组框/分类头。这一设计意味着主查询main queries负责最终的检测输出而 10 组dual_groups10分组查询以一对多的方式分别匹配同一个 ground-truth在训练时提供更密集的匹配监督推理阶段分组查询的输出通过 DETRPostProcess 聚合ppdet/modeling/post_process.py 中同样接收dual_queries与dual_groups仅保留主查询对应的num_top_queries: 300个结果。此外use_input_proj开关对应源码第 382-384 行的if use_input_proj: self._build_input_proj_layer(backbone_feat_channels)R-50 变体开启对 backbone 多尺度特征做通道投影ViT-Huge 变体关闭特征已由SimpleFeaturePyramid统一到 256 通道避免重复投影。from_config第 515-517 行会从input_shape自动读取 backbone 各层输出通道数填充backbone_feat_channels。上述类名、参数名与分支逻辑均可直接在 group_detr_transformer.py 中核对配置文件中出现的GroupDINOTransformer、DINOHead、DETRPostProcess等模块名与该文件__all__ [GroupDINOTransformer]的注册机制一一对应。五、训练、评估与推理5.1 多卡训练仓库 README 给出的官方训练命令为4 卡分布式训练--fleet使用 Fleet 分布式训练--eval训练中周期评估python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/group_detr/group_dino_r50_4scale_1x_coco.yml --fleet --evalpython -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/group_detr/group_dino_vit_huge_4scale_1x_coco.yml --fleet --eval单卡或更少卡训练时可去掉--fleet例如python tools/train.py -c configs/group_detr/group_dino_r50_4scale_1x_coco.yml --eval注意两个模型的官方精度均基于4 卡训练得到若使用不同卡数建议按卡数等比调整batch_size并相应缩放学习率否则精度可能有偏差。ViT-Huge 变体对显存要求极高(1184, 2000) 分辨率 32 层 ViT且其完整复现流程依赖 ImageNet-1K 自监督预训练与 Object365 预训练后的权重即配置中的pretrain_weights直接从头训练无法复现 63.3 Box AP。5.2 评估使用 tools/eval.py 在 COCO val2017 上评估python tools/eval.py -c configs/group_detr/group_dino_r50_4scale_1x_coco.yml -o weightsoutput/group_dino_r50_4scale_1x_coco/model_final.pdparams也可直接下载 Model Zoo 表格中的 BOS 权重进行评估。评估指标为 COCOmAP(IoU0.5:0.95)即表格中的 Box AP。5.3 推理使用 tools/infer.py 对单张图片推理python tools/infer.py -c configs/group_detr/group_dino_r50_4scale_1x_coco.yml -o weightsoutput/group_dino_r50_4scale_1x_coco/model_final.pdparams --infer_imgdemo/000000014439.jpg如需服务化或高性能推理可参考 deploy/python/infer.py 与 deploy/EXPORT_MODEL.md 完成模型导出。六、复现要点总结要点说明数据集COCO train2017 训练val2017 评估mAP(IoU0.5:0.95)输入分辨率R-50 变体 (800, 1333)ViT-Huge 变体 (1184, 2000)训练时长12 epoch第 11 epoch 学习率 ×0.1优化器AdamWbase_lr 1e-4weight_decay 1e-4梯度裁剪 0.1卡数官方使用 4 张 GPU核心机制dual_queriesTrue、dual_groups10的分组一对多匹配DINO 风格去噪训练num_denoising100ViT-Huge 前置条件ImageNet-1K 自监督预训练 ViT-Huge Object365 检测器预训练再 COCO 微调七、引用若在你的研究或工程中使用了 Group DETR / Group DETR v2可引用以下文献来自仓库 READMEarticle{chen2022group, title{Group DETR: Fast DETR training with group-wise one-to-many assignment}, author{Chen, Qiang and Chen, Xiaokang and Wang, Jian and Feng, Haocheng and Han, Junyu and Ding, Errui and Zeng, Gang and Wang, Jingdong}, journal{arXiv preprint arXiv:2207.13085}, volume{1}, number{2}, year{2022} } article{chen2022group, title{Group DETR v2: Strong object detector with encoder-decoder pretraining}, author{Chen, Qiang and Wang, Jian and Han, Chuchu and Zhang, Shan and Li, Zexian and Chen, Xiaokang and Chen, Jiahui and Wang, Xiaodi and Han, Shuming and Zhang, Gang and others}, journal{arXiv preprint arXiv:2211.03594}, year{2022} }【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考