【RT-DETR涨点改进】03 动态Query初始化:让RT-DETR不再“漏掉”小目标

📅 2026/7/6 22:23:49
【RT-DETR涨点改进】03 动态Query初始化:让RT-DETR不再“漏掉”小目标
03 动态Query初始化:让RT-DETR不再“漏掉”小目标开篇故事上个月,我一个做自动驾驶的朋友找到我,说他用RT-DETR做行人检测,大目标检测得贼准,mAP都干到55了,但一遇到30米开外的行人——就是那种在图像里只有几十个像素的小人——模型直接“失明”。他试了调大输入分辨率、堆FPN层数、加注意力头数,结果要么推理速度掉一半,要么小目标召回率只涨了0.3个点。他问我:“你说RT-DETR不是号称端到端检测器里的性能怪兽吗?怎么小目标这么拉胯?”我让他把Decoder的Query可视化出来,一看就明白了——他用的还是那套经典的静态Query:300个可学习向量,从0初始化,靠交叉注意力慢慢“找”物体。这种设计对大物体还行,因为大物体在特征图上占的面积大,Query稍微偏一点也能“摸”到。但小目标呢?特征图上可能就1~2个像素点,Query要是初始位置不对,交叉注意力根本算不出有效响应。这就像你在黑夜里用手电筒找一只蚂蚁——手电筒的光束再亮,照错方向也是白搭。痛点拆解:静态Query的“盲区”很多人以为Decoder的Query就是“让模型自己去学怎么定位物体”,于是直接拿nn.Embedding(300, 256)初始化,然后扔进Transformer Decoder里训练。这种做法的最大问题是:Query在空间上是无差异的。看一个常见的错误实现: