MS-DETR论文解读


前言

今天,偶然看到MS-DETR论文,以为又有什么高逼格论文诞生了。于是,我想查看一番,改论文讨论原始DETR中使用一对一监督的传统训练过程缺乏对对象检测候选者的直接监督。本文旨在通过混合一对一监督和一对多监督来明确监督候选生成过程,从而提高DETR训练效率。本文最主要贡献在解码decoder实现行一对多监督。实验结果表明,我们的方法优于相关的DETR变体,如DN-DETR、Hybrid DETR和Group DETR,并且与相关DETR变体的组合进一步提高了性能。本博客将带领读者共同探讨此文章。


一、摘要

摘要:DETR通过基于图像特征迭代生成多个候选对象并为每个ground-truth对象提升一个候选对象来实现端到端的目标检测。在原始DETR中使用一对一监督的传统训练过程缺乏对对象检测候选者的直接监督。
本文旨在通过混合一对一监督和一对多监督来明确监督候选生成过程,从而提高DETR训练效率。我们的方法,即MS-DETR,很简单,并且对用于推理的主解码器的对象查询进行一对多监督。与具有一对多监督的现有DETR变体(如Group DETR和Hybrid DETR)相比,我们的方法不需要额外的解码器分支或对象查询。在我们的方法中,主解码器的对象查询直接受益于一对多监督,因此在对象候选预测方面是优越的。实验结果表明,我们的方法优于相关的DETR变体,如DN-DETR、Hybrid DETR和Group DETR,并且与相关DETR变体的组合进一步提高了性能。

在这里插入图片描述

二、引言

端到端目标检测方法DETR已有很多研究者研究。该类模型是基于CNN的backbone、一个编码、一个解码。解码是decoder层堆叠,每一层由self-attention、cross-attention和FFNs模块,仅接class与box预测。
DETR的解码生成很多目标候选框,他们以目标查询表征,在端到端学习方法中提出一个候选框和很多冗余的框。这些冗余候选框也靠近gt box框,如图1说明。而候选框是通过decoder的cross-attention生成。候选去重主要有解码self-attention与一对一监督完成,确保选择一个候选框符合gt box目标。不像基于NMS方法(如:fastercnn)通常使用一个监督生成候选框,而DETR模型训练对生成多个目标候选缺乏明确监督。
我们提出监督查询,该查询在解码模块混了一对一监督与一对多监督,从而改善训练效率。我们架构非常简单,我们增加模块与预测head相似,实现一对一监督,它由一个box预测、一个类别预测构成。我们命名为MS-DETR,如图3说明。我们想要指出增加的模块不影响训练过程与推理过程。
图1说明我们模型对后弦检测影响。我们发现DETR没有一对多监督也对gt目标产生多个候选框。在用一对多监督后,预测box会更好,候选框也更好。我们也发现一对一的分类与box回归 loss是低于有一对多监督。这是能够改善候选框,这样对一对一监督loss有帮助的。
我们方法通过引入额外监督(一对多)在图像特征选择上改善目标查询。与相关方法比较,如conditional DETR、Deformable DETR,明显不同,他们是修改cross-attention架orquery格式,我们方法也是,然而不同我们是一朵朵监督。特别的,我们方法直接在primary上加了一对多的监督。

三、贡献

作者在原有一对一监督DETR模型上,提出一对多监督,使其与原有一对一监督混合监督,提高DETR训练效率。

四、MS-DETR模型方法

实际是在原有DETR一对一的监督增加一对多的监督,但我感觉有些将 Group DETR和DN-DETR的平行结构换成了串行结构,且实验在哪个位置分出一对多监督结构,实际是loss约束成分。

1、模型整体结构解读

图3 说明整体架构不同,a是原始DETR,一对一的监督;b是混合DETR,一对一与一对多的监督(我们模型);c是分组DETR和DN-DETR,除了平行家吗被引入外,一个一对一监督也被强加与decoder,更多额外decoders更可能像在Group DETR和DN-DETR。d是Hybrid DETR,一个额外平行家吗被增加和一个一对多监督被增加额外解码层。

在这里插入图片描述

2、模型改善结构解读

MD-DETR改善,a图是一对一与一对多监督在每个decoder层输出后发生,而b与a就是cross-attention与self-attention位置不同。c和d是将一对多监督在中间执行。
在这里插入图片描述

3、一对多监督原理

一对多匹配是基于预测置信度和与groundtruth的iou获得代价矩阵,在对每个gt目标匹配选择top K的queries,并过滤低于阈值τ的queries。
在这里插入图片描述

五、实验结果

1、实验比较

作者在epoch=12或24比较不同模型差异,如下表:
在这里插入图片描述
在这里插入图片描述

2、论文链接

该论文有部分注释,下载链接如下:

链接:https://pan.baidu.com/s/1_PxFMsto6uXSRCj29K0lIA
提取码:depa

总结

该篇文章比较容易读,但我感觉技术应该不是那么惊艳(个人理解),而读者想更加深刻理解,需查看源码,我只是大概说了该篇论文相关内容。

### H-DETR源码解读与分析 #### 特征提取与 Neck 层处理 在基于 MMDetection 的 RT-DETR 实现中,backbone 和 neck 部分负责图像特征的初步提取和尺度特征融合。Backbone 使用的是 ResNet 或者其他预训练模型来获取基础特征图[^1]。 ```python import torch.nn as nn from mmdet.models import BACKBONES, NECKS @BACKBONES.register_module() class CustomResNet(nn.Module): def __init__(self, depth=50, **kwargs): super(CustomResNet, self).__init__() # 初始化ResNet结构 def forward(self, x): """前向传播""" pass @NECKS.register_module() class FPNNeck(nn.Module): def __init__(self, in_channels=[256, 512, 1024, 2048], out_channels=256, start_level=0, end_level=-1, add_extra_convs=False, extra_convs_on_inputs=True, relu_before_extra_convs=False, no_norm_on_lateral=False, conv_cfg=None, norm_cfg=None, act_cfg=None): super(FPNNeck, self).__init__() # 定义FPN颈部组件逻辑 ``` 这部分代码展示了如何定义自定义 backbone 及其对应的 neck 组件,并注册到 MMDetection 中以便于后续调用。 #### Encoder 结构设计 Encoder 是 DETR 类型架构的核心之一,它通过 Transformer 编码器机制对输入序列建模并生成上下文表示。对于 H-DETR 来说,编码过程同样依赖于 transformer encoder 架构来进行全局信息交互[^3]。 ```python from mmcv.cnn.bricks.transformer import build_transformer_layer_sequence def make_encoder(cfg): return build_transformer_layer_sequence( cfg, default_args=dict(num_layers=cfg.num_encoder_layers)) ``` 此函数用于创建指定配置下的 transformer layer sequence 对象作为 encoder。 #### Loss 函数实现 损失函数的设计直接影响着模型的学习效果。H-DETR 采用了一种混合策略,不仅考虑了分类误差还加入了边界框回归项以及其他辅助任务如去噪等带来的惩罚项[^4]。 ```python import torch from mmdet.core.bbox.assigners.hungarian_assigner import HungarianAssigner def compute_loss(preds, targets): assign_result = HungarianAssigner().assign(preds['cls_logits'], preds['bbox_preds'], *targets) cls_loss = ... bbox_loss = ... total_loss = cls_loss + bbox_loss return { 'total': total_loss, 'cls': cls_loss, 'bbox': bbox_loss } ``` 上述伪代码片段描述了一个典型的 loss 计算流程,其中 `HungarianAssigner` 负责匹配预测结果同真实标签之间的最佳对应关系,从而指导后续具体 loss 值的计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangjunjun-owen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值