MI-DETR: An Object Detection Model with Multi-time Inquiries Mechanism (一种具有并行多次查询机制的目标检测模型)
前置知识
TRansformer




DETR

论文讲解
背景
- 现状: 现有的 DETR 类模型(如 DINO, Relation-DETR 等)普遍采用 “级联解码器”(Cascaded Decoder) 结构 。即 Object Queries 一层一层地往下传,每一层的输出直接决定下一层的输入 。
- 问题: 这种串行结构限制了 Query 的更新方向,导致它只能学到相对有限的信息 。而且,随着层数加深,学到的信息可能变得冗余甚至产生负面效果 。
- 比喻: 就像学生(Query)问老师(Image Features)问题。级联结构像是一个学生连续追问,每一个问题都被上一个问题的答案框住了;而这篇论文想做的是让“多个学生”同时从不同角度并行提问 。
由于自然场景的多样性和复杂性,物体可能非常小、被严重遮挡或与背景混淆地混合。为了适应多样化的场景,需要充分利用图像特征来学习综合信息。 然而,基于以上分析,现有模型采用的级联多次查询架构往往学习到的信息相对有限。这促使我们探索新的解码器架构来优化特征利用率。受传统基于 CNN 的方法发展的启发,该论文注意到许多方法可以通过合理的并行架构增强特征利用率。因此,MI-DETR 抛弃了单一的级联更新范式,通过参数独立的并行查询机制 (MI) 和 U型特征交互 (UFI),实现了对图像特征的全方位、多模式挖掘,刷新了 DETR 类模型的性能上限。
核心方法
并行多次查询机制

多次查询:
查询融合:
| 对比维度 | 原始 DETR / DINO 等主流变体 | MI-DETR (本文模型) | 差异解析 |
| 拓扑结构 |
级联式 (Cascaded Inquiries) |
层内并行式 (Parallel Multi-time Inquiries) |
单线程 vs. 多线程 原始模型中,Object Query 在每一层只能进行一次更新,下一层的输入完全依赖上一层,导致信息获取受限 。MI-DETR 允许在同一层内并行进行多次查询。 |
| 内部模块 |
单个 Inquiry Head (包含 1组 SA + CA + FFN) |
多个 Inquiry Heads + 融合模块 (包含 M 组 SA + CA + FFN,最后由 Linear 融合) |
信息单一 vs. 信息互补 MI-DETR 通过 M 个并行的 Head 挖掘不同模式的信息(例如有的 Head 关注大物体,有的关注小物体),最后通过 |
| 参数策略 | 单套参数 |
独立参数 (Real Parallel) |
伪并行 vs. 真并行 不同于 Group-DETR 等为了 One-to-Many 匹配而做的“参数共享”并行,MI-DETR 的每个 Head 参数独立,确保学到不同的特征模式 。 |
# 1. 准备并行分支 (打包 M 个 Head 的层)
# self.layers 是主分支,branch2...branchM 是额外的分支
mi_layers = [self.layers]
for i in range(2, self.inquiry_head_num + 1):
branch_name = f"layers_for_branch{i}"
# ... 获取分支代码 ...
# zip 的作用是将 "垂直" 的列表变成 "水平" 的组合
# 比如:[(Branch1_L1, Branch2_L1...), (Branch1_L2, Branch2_L2...), ...]
mi_layers = zip(*mi_layers)
# 2. 并行执行循环
for layer_idx, inquiry_heads in enumerate(mi_layers):
inquiry_outputs = []
# 遍历并行的 Head (注意:这里是真并行,参数独立)
for inquiry_head in inquiry_heads:
inquiry_output = inquiry_head(
output, # 输入:大家看的是同一个 Query
memory_per_layer[layer_idx], # 输入:大家看的是同一层(或经UFI处理后)的图像特征
# ... 其他参数 ...
)
# 收集结果:比如 Head1 觉得是猫,Head2 觉得是狗
inquiry_outputs.append(inquiry_output)
# 1. 定义融合层 (Linear: M * 256 -> 256)
# 输入维度放大 M 倍,输出维度变回正常
self.state_aware_query_fusion = nn.Sequential(
nn.Linear(inquiry_head_num * embed_dim, embed_dim),
nn.LayerNorm(embed_dim),
)
# ... 在 forward 函数中 ...
# 2. 执行融合
# torch.cat: 把大家的话拼在一起。假如 embed_dim=256, 3个头,拼接后变成 768 维
# fusion: 把 768 维压缩回 256 维
output = self.state_aware_query_fusion(
torch.cat(inquiry_outputs, dim=-1)
)
U型特征交互

| 对比维度 | 原始 DETR / DINO | MI-DETR (UFI 模块) | 差异解析 |
| 特征来源 |
仅最后一层 (Last Layer Only) |
多层级对应 (U-like Feature Interaction) |
信息瓶颈 vs. 全局利用 原始 DETR 的所有 Decoder 层都只查阅 Transformer Encoder 最后一层的输出 ( |
| 交互逻辑 |
|
U-Net 思想的迁移 MI-DETR 借鉴 U-Net,让 Decoder 的第 |
# 1. 定义 UFI 融合层 (针对每一层都有一个)
self.fusion = nn.ModuleList([copy.deepcopy(self.fusion) for i in range(5)])
# ... 在 forward 函数中 ...
# 2. 执行 U-like 交互
# memory_per_layer[-1] 是 Encoder 最后一层的输出 (E_L),代表最高级、最抽象的全局语义(上帝视角)
memory_tmp = memory_per_layer[-1]
memory_per_layer = [
self.fusion[i](
# 核心公式: Concat(全局语义 E_L, 当前层细节 E_i)
torch.cat([memory_per_layer[-1], memory_per_layer[i]], dim=-1)
)
# 遍历 Encoder 的前几层 (E_1, E_2...)
for i in range(len(memory_per_layer) - 1)
]
# 最后把 E_L 也放回去,并且倒序
memory_per_layer.append(memory_tmp)
memory_per_layer = memory_per_layer[::-1] # 倒序
总体框架
Lite多次查询
Lite 多次查询 (Lite‐MI) 是 MI 的轻量级版本,如图
| 对比维度 | 原始 DETR | MI-DETR (Lite-MI) | 差异解析 |
| SA | 每个 Decoder 层独立计算 SA |
共享 SA (Shared Self-Attention) |
去重功能的参数复用 作者认为 Self-Attention 的主要作用是去除重复的候选框(NMS-like),且不涉及图像特征交互。因此,在 Lite-MI 版本中,并行的多个 Head 共享同一个 SA 模块,只独立计算 Cross-Attention 和 FFN,从而大幅减少参数量。 |
实验
设置
我们在 COCO数据集上进行实验。按照惯例, COCO train2017 split(118k 图像)用于训练,COCO val2017split(5k 图像)用于验证。 AdamW用于优化,学习率为 1 × ,权重衰减为1 ×
。 我们报告了使用两种常用骨干网(包括在 ImageNet‐1k上预训练的 ResNet‐50和在 ImageNet‐22k 上预训练的 Swin‐L)在 1x(12 epochs)和 2x(24 epochs)训练计划下的实验结果。 该指标是不同 IoU 阈值和对象尺度下的标准平均精度 (AP)。当主干网为 ResNet‐50 时,使用 RTX3090 GPU;当主干网为 Swin‐L 时,使用 A100 GPU。查询头数量为4个。
对比实验
相关模型
1. DINO (DETR with Improved DeNoising Anchor Boxes)
-
当前 DETR 家族的性能“天花板”与标准基线。
-
核心改进(去噪训练): 它解决了 DETR 收敛慢的问题。它在训练时人为加入带噪声的“假框”,让模型学习如何去除噪声(去噪),从而让模型能更快、更准地锁定物体。它是第一个在 COCO 数据集上完全超越主流 CNN 模型的 Transformer 检测器。
2. Group DETR
-
通过“分身术”来加速训练的插件。
-
核心改进(一对多匹配): 普通 DETR 每次只给模型极少的正样本(一对一),导致训练吃不饱。Group DETR 引入了多组 Query(像是使用了多个分身),每组都独立进行训练,让模型一次能学到更多正样本。推断时只需用其中一组,所以速度不变,但训练收敛快得多。
3. Relation DETR
-
让物体之间“懂社交”,利用上下文提升精度。
-
核心改进(显式关系建模): 虽然 Transformer 本身有注意力机制,但 Relation DETR 认为这还不够。它显式地去计算物体之间的几何关系(如位置、距离)和语义关系(如“人”骑“车”),利用物体间的相互作用来辅助检测,特别适合处理拥挤场景或模糊物体。
| 方法 (Method) | 训练轮数 | AP (总计) | AP50 | AP75 | APS (小目标) | APM (中目标) | APL (大目标) |
| DINO | 12 | 49.0 | 66.6 | 53.5 | 32.0 | 52.3 | 63.0 |
| Stable-DINO | 12 | 50.4 | 67.4 | 55.0 | 32.9 | 54.0 | 65.5 |
| Group-DETR | 12 | 49.8 | 67.4 | 55.1 | 32.4 | 53.0 | 64.2 |
| Relation-DETR | 12 | 51.7 | 69.1 | 56.3 | 36.1 | 55.6 | 66.1 |
| MI-DETR (Ours) | 12 | 52.4 | 69.8 | 57.0 | 35.6 | 56.1 | 67.2 |
诊断实验
主要部件消融实验测试
MI对其他模型的影响
MI查询头号
MI查询头组合
可视化分析
更多推荐


所有评论(0)