航空图像的检测任务,跟日常的自然图像检测完全是两回事。高空视角下目标尺寸差异极大,停车场里的轿车可能只有几十个像素,而大型港口设施又横跨数千个像素;背景复杂度也高得离谱,密集的建筑物阴影、植被纹理、云层遮挡,都在给检测器制造干扰。传统基于CNN的检测器在这种场景下往往顾此失彼——深层特征图感受野大但分辨率低,小目标容易丢失;浅层特征图分辨率够但语义信息不足,复杂背景下容易误检。DETR系列的Transformer架构天然具备全局建模能力,但标准DETR在航空图像上跑起来又太慢、收敛太难。我们做了一套结合可变感受野思想的改进方案,在保持DETR端到端检测优势的同时,把航空图像检测的效率和精度都拉高了一截。今天把这套方案的完整思路、关键实现和踩坑记录整理出来,给正在做遥感或无人机图像检测的朋友一个参考。
这套方案的核心关键词是三个:可变感受野、高效注意力、航空图像。下面内容会从为什么需要这个设计开始讲起,然后拆解VRF-DETR的模块细节,给出可复现的训练配置,最后分享我们在实验过程中遇到的各种问题和解法。
1. 航空图像检测的痛点到底在哪
1.1 尺度差异是最大的拦路虎
航空图像里目标尺度分布跨度极大。以常见的遥感数据集为例,一张标准的航拍图可能有几千像素见方,其中的车辆目标往往只有10-30像素,而大型建筑或储油罐可能占据几百甚至上千像素。这种尺度差异对检测器提出了一个两难要求:感受野要足够大,才能捕捉大目标的全局上下文;同时又要保持足够高的特征分辨率,才能保住小目标的细节信息。
在常规自然图像检测中,多尺度特征金字塔(FPN)基本能解决这个问题。但在航空图像里,目标尺度的方差实在太大,固定尺寸的采样网格让FPN在极端尺度下变得力不从心。比如用3x3卷积核的FPN特征,针对15像素的小车和500像素的大型飞机,都需要产生判别性特征,但同一层特征图的感受野是固定的,很难同时兼顾两种极端目标。
另一个让人头疼的是方向性问题。航空图像中目标朝向任意,比如停车场里的汽车朝向四面八方,船只停靠方向随码头布局变化。常规检测器普遍依赖的水平锚框或标准正方形采样点在处理旋转目标时会产生大量冗余预测和定位误差。
1.2 背景干扰考验特征判别力
航空图像里背景信息极其丰富且常与目标外观相似。树林里的迷彩伪装目标、屋顶颜色与地面几乎一致的建筑物、密集城区中与道路在颜色纹理上都接近的车辆,这些在自然图像里不常见的场景在航空视角下每天都出现。纯视觉特征区分不够时,需要利用上下文关系来辅助判断——而这就对检测器的全局感知能力提出了要求。
另外,航空图像还非常容易出现重复纹理。农田、森林、密集住宅区都存在大量结构性重复,注意力机制如果不加约束,很容易把注意力分配到错误位置的相似纹理上。这也是为什么很多人在遥感检测任务上尝试Transformer结构之后,感到效果不如预期——不是Transformer本身不行,而是没有针对航空图像特性设计注意力模式。
1.3 计算效率是落地绕不开的坎
航空图像分辨率高、目标密集,检测器需要处理的信息量比自然图像多一个数量级。如果用标准Transformer,全局自注意力的复杂度是O(n²),n是序列长度。在高分辨率航空图上,特征图下采样到1/32后往往仍有上万个token,平方复杂度会直接让显存和时间开销爆炸。
在资源受限的无人机平台上,检测延迟直接决定系统可用性。一个推理速度两三秒的检测器装在无人机上,基本只能做离线分析,想实时避障或跟踪完全没有可能。所以航空图像的检测方案必须同时考虑三件事:高精度、低计算量、可部署。
2. VRF-DETR核心设计思路拆解
2.1 标准DETR在航空图像上的局限性
DETR的核心是引入Transformer编码器-解码器架构,通过一组可学习的对象查询(object queries)直接从特征序列中预测目标。它的优点很多:去掉了锚框和NMS后处理,实现了真正的端到端检测;注意力机制让每个目标都能从全局特征中获取需要的信息。但直接拿来用在航空图像上,问题也很明显。
第一是收敛慢。DETR需要较长的训练周期才能让对象查询与特征中的目标位置建立映射关系,这对训练资源有限的情况很不友好。第二是感受野与定位精度的矛盾。DETR编码器用的是标准多头注意力,理论上感受野覆盖全局,但这种覆盖是均匀分布的。对密集小目标来说,全局均匀注意力会被大量背景token稀释,反而捕捉不到局部细节。
第三是效率问题。航空图像token数量大,标准注意力O(n²)的复杂度让显存消耗极其夸张。在实际实验里,我们尝试用标准DETR在2048×2048的航拍图上直接训练,16GB显存连batch size设为1都跑不起来,频繁出现OOM。后来不得不缩小输入尺寸,结果小目标又大量丢失。这种两难局面逼着我们重新思考感受野建模的方式。
2.2 可变感受野模块的设计动机
既然固定感受野在航空图像的多尺度挑战下不够用,最直接的想法就是让模型能够根据目标尺度动态调整感知范围。我们把可变感受野(Variable Receptive Field)思路融入DETR的编码器和解码器,具体包含三个模块。
自适应空洞选择模块:借鉴空洞卷积思想,为每个位置提供多个不同膨胀率的采样网格。通过一个小型门控网络,对每个位置动态加权融合不同感受野的采样结果。在车辆密集区域,模型会倾向于使用小膨胀率网格精细感知;面对大型港口设施时,则自动增大膨胀率覆盖更大范围。
跨尺度特征交互模块:将编码器的不同层级特征进行对齐后交互,让高层语义信息可以流向低层高分辨率特征。在航空图像中,这意味着小目标可以获得来自全局上下文的辅助判断。比如检测停车场里的车辆时,模型可以先感知到这是停车场,再在局部定位车辆,上下文与细节结合,精度会有显著提升。
前背景感知注意力:针对航空图像中背景主导的问题,我们给解码器的自注意力添加了一个辅助分支。这个分支先粗略预测每个token属于前景还是背景的概率,然后据此调整注意力权重的归一化方式。前景token之间加强交互,背景token之间弱化交互,有效避免了相似背景纹理之间的注意力串扰。
2.3 高效注意力机制的选择
在VRF-DETR中,我们没有直接使用标准全局注意力,而是采用了窗口注意力(window attention)和全局稀疏注意力结合的策略。窗口内部计算完整自注意力,保证局部细节的精确感知;窗口之间通过少量可学习的连接token(类似Swin Transformer的思路)进行信息交换,维持全局感知能力。这种设计的计算复杂度从O(n²)降低到O(n),对高分辨率航空图非常关键。
具体实现上,我们以8×8的窗口大小进行局部自注意力计算,在编码器末尾两层增加一个轻量级的全局注意力模块,专门负责跨窗口信息融合。实测下来,这个配置在精度上几乎不输全局注意力,但显存占用只有全局注意力的1/4左右。
注意:窗口大小是一个值得调的参数。窗口太小,局部感知能力受限;窗口太大,计算量上升。在多数航空数据集上,8x8到12x12是一个合理的区间,具体选多少需要结合目标最小尺寸来确定。
2.4 解码器查询设计改进
标准DETR使用固定的对象查询向量,训练完成后每个查询会倾向于关注某类特定的目标。航空图像里目标数量多且密集,固定数量的查询经常出现漏检或重复检测。我们的做法是引入迭代式查询更新模式,每层解码器都会根据当前预测结果动态调整下一步查询的位置和尺度,相当于让查询在解码过程中“搜索”出更精确的目标定位。
同时在损失计算上采用了Hungarian匹配+尺度感知损失的组合。尺度感知损失对小目标的IoU和分类误差赋予了更高的损失权重,缓解了大规模目标主导梯度方向的问题。
3. 实操环节与关键步骤记录
3.1 数据准备与预处理
我们的实验主要在一套航空目标检测模拟数据上进行,包含车辆、船舶、飞机、储油罐四类目标,图像高度在800到4000像素之间浮动。数据预处理做了这几件关键事情。
首先是图像切片。由于航拍原图分辨率过高,直接整图喂给模型不现实。我们按1024×1024的尺寸切片,配合50%重叠率。但这里有个很深的坑:原本横跨切片边界的目标会被切碎。开始在切片时直接硬切,训练时大量标注框被裁剪,模型收敛后检测效果奇差,尤其是对大目标的检测率一直上不去。后来改用带边界的切片策略,每个切片的边缘区域额外保留周边上下文的像素,标注框的坐标也做偏移修正,准确率马上回升了4到5个点。
其次是数据增强。航空图像检测里比较有效的增强方式包括随机旋转、随机缩放、色彩抖动和模拟云雾遮挡。其中模拟云雾遮挡这个增强我们试了很多版本,最后的方案是生成随机的不规则半透明椭圆遮罩叠加在图像上,并同步以一定概率直接丢弃处于遮罩区域内的标注框。这迫使模型学会在可见信息不足时依然依靠上下文给出判别。
最后是类别均衡处理。航空数据集中车辆和船舶数量远多于储油罐,直接训练会导致少数类几乎学不到有效特征。我们用了简单的过采样策略,将少数类样本进行复制并混合正负样本比例到1:3,配合Focal Loss使用后,四类目标的AP差距从12个点缩小到5个点以内。
3.2 模型配置与核心参数
VRF-DETR的骨干网络选择了ResNet-50并做了简单修改:去掉最后一个stage的下采样,保留更高分辨率的特征图给编码器使用。这个修改对小目标检测帮助非常大,代价是后续特征图的分辨率变大导致计算量略增,综合换算下来仍然划算。
编码器部分我们堆叠了6层编码层,前4层使用窗口注意力+可变感受野模块,后2层增加全局稀疏注意力做跨窗口信息融合。解码器使用6层解码层,每层包含自注意力、交叉注意力和前馈网络三个标准组件。核心参数如下:
| 参数项 | 配置值 | 说明 |
|---|---|---|
| 编码器层数 | 6层(前4层窗口注意,后2层全局稀疏) | 平衡计算量与感受野 |
| 解码器层数 | 6层 | 配合迭代查询更新 |
| 窗口大小 | 8×8 | 针对1024×1024的切片输入 |
| 学习率 | 1e-4(骨干网络)、2.5e-4(Transformer部分) | 分层设置利于稳定收敛 |
| 批量大小 | 8(单卡16GB显存) | 显存紧凑但够用 |
| 训练轮数 | 50轮 | 配合CosineAnnealing逐步降低学习率 |
| 梯度裁剪 | max_norm=0.1 | 防止训练初期不稳定的注意力权重 |
对象查询数量设为300。这个数值我们做了消融实验,从100到500都试过,300在精度与召回之间取得了最好的平衡。少于200时密集场景召回率掉得厉害,多于400时大量重复查询导致Hungarian匹配后的无效计算增多,训练速度变慢但精度几乎无提升。
3.3 可变感受野模块的具体实现
下面给出自适应空洞选择模块的核心实现思路,方便你动手复现。我们用PyTorch伪代码来描述关键逻辑,不依赖特定的库。
import torch import torch.nn as nn class AdaptiveDilatedBlock(nn.Module): def __init__(self, in_channels, dilation_rates=(1, 3, 5), kernel_size=3): super().__init__() self.dilation_rates = dilation_rates self.num_branches = len(dilation_rates) # 每个膨胀率对应一组卷积 self.convs = nn.ModuleList([ nn.Conv2d(in_channels, in_channels, kernel_size, padding=dilation_rate, dilation=dilation_rate, groups=in_channels) for dilation_rate in dilation_rates ]) # 门控网络:通过全局平均池化+MLP生成每个位置的融合权重 self.gate = nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(in_channels, in_channels // 4, 1), nn.ReLU(inplace=True), nn.Conv2d(in_channels // 4, self.num_branches, 1), ) def forward(self, x): # 生成门控权重 shape: [B, num_branches, 1, 1] gate_weights = torch.softmax(self.gate(x), dim=1) # 分别计算每个膨胀率的输出 branch_outputs = [] for conv in self.convs: branch_outputs.append(conv(x)) # 按权重加权融合 out = 0 for i in range(self.num_branches): out += gate_weights[:, i:i+1] * branch_outputs[i] return out这里的关键是门控网络的轻量化设计。如果门控网络太重,它会主导梯度更新,导致卷积分支学不到有效特征。我们在实验里踩过这个坑——一开始门控用了两层大卷积,结果整个模块退化成只会选择最大的感受野,小目标检测性能压根没提升。后来改成平均池化+极小的MLP,才让各个分支都学到了有区分度的特征模式。
另外每组卷积采用了分组卷积和通道级操作来降低计算量,因为膨胀率增大后采样区域扩大,组合的特征通道也增多,不加控制容易导致参数量和计算量激增。在ResNet-50骨干的stage3和stage4输出上分别接了这个模块,stage3的膨胀率设为1, 2, 3,stage4设为1, 3, 5,小目标和大目标都能照顾到。
3.4 训练策略与损失配置
VRF-DETR的损失函数包含三部分:分类损失(Focal Loss)、边界框回归损失(L1 + GIoU)、辅助的尺度感知损失(Scale-aware Loss)。最终损失公式如下:
L = λ_cls * L_cls + λ_l1 * L_l1 + λ_giou * L_giou + λ_scale * L_scale各项权重在实验中设为λ_cls=2.0、λ_l1=5.0、λ_giou=2.0、λ_scale=1.5。Focal Loss的gamma设为2.0、alpha设为0.25。对小目标(面积小于32×32像素的GT框),L1损失权重额外乘以1.5的系数。这个设计让整个训练过程不那么大目标偏好,小目标在梯度更新中占的比重会明显加大。
训练中还使用了EMA(指数移动平均)策略,衰减系数设为0.9998。这个系数看起来微小,但在长训练周期中作用很大。我们对比过开与不开EMA的版本,最后一次测试中开启EMA的模型mAP高了1.9个点,这个提升在深度学习调参里算是相当可观的了。
学习率方面采用分层初始化:骨干网络使用1e-4,Transformer部分使用2.5e-4。用的是AdamW优化器,weight_decay设为1e-4。训练中前5轮用线性热身(warmup)从1e-5逐步到设定学习率,之后接CosineAnnealing计划,在50轮结束时降到最小学习率1e-6。
注意:训练DETR系列模型时,学习率的设置比CNN模型敏感得多。学习率稍大一点,对象查询的更新就会不稳定,表现为训练loss波动剧烈且耗时很长也不下降。如果发现训练过程异常波动,先把学习率调低1-2个数量级再观察。
3.5 推理与后处理优化
VRF-DETR本身去掉了NMS,依靠Hungarian匹配和置信度阈值做筛选。但在推理阶段我们仍然加了一个非常轻量的后处理步骤——根据目标尺度和位置做重复框合并。虽然DETR架构天然不会像Faster R-CNN那样产生大量重复框,但在密集目标场景下仍然可能出现同一个目标被两个查询同时命中的情况。简单的最大抑制在大目标上不需要,我们用基于距离的重叠框合并策略,IOU阈值设为0.7,实测能降低约2%的重复检测而不损失召回。
推理时输入图像同样需要切片处理。由于切片之间重叠区域的目标可能被重复检测,我们在后处理中增加了一个跨切片的全局匹配步骤,合并重叠区域内相同目标的检测结果。这个环节最初没做的时候,测试集mAP出现一段明显的虚高——重叠区域的目标被重复计数,精确率虚高但实际落地效果并不好。
4. 实验结果与性能对比
4.1 与基线方案的对比结果
我们在多组场景数据上进行了对比实验,主要比较了Faster R-CNN+FPN、标准DETR、DINO-DETR和我们的VRF-DETR。统一的实验设置:输入1024×1024,推理时不做多尺度测试,评价指标为COCO风格的mAP@[0.5:0.95]和mAP@0.5。
| 模型 | mAP@[0.5:0.95] | mAP@0.5 | 参数量 | 单帧推理时间 |
|---|---|---|---|---|
| Faster R-CNN+FPN | 31.7% | 58.2% | 41.5M | 26ms |
| DETR | 27.4% | 52.6% | 41.2M | 35ms |
| DINO-DETR | 36.2% | 63.8% | 47.1M | 48ms |
| VRF-DETR(Ours) | 38.9% | 66.5% | 45.3M | 31ms |
从上表可以看到,VRF-DETR比标准DETR在mAP@[0.5:0.95]上高出11.5个百分点,同时推理速度快了约10%。相比更强的DINO-DETR,我们的精度高了2.7个百分点,参数量更少,推理速度也更快。作为对照,Faster R-CNN+FPN虽然推理速度快,但精度被甩开了约7个百分点,在高密度小目标场景下漏检非常严重。
这个结果说明:可变感受野机制对航空图像中的多尺度目标确实有效,同时高效的注意力机制带来的收益也直观反映在推理速度上。端到端架构省去了NMS及锚框设计等大量手工调参工作,在工程落地时有很大优势。
4.2 类别维度上的性能拆解
分类来看,车辆类AP最高达到52.3%,船舶类次之48.1%,飞机类44.7%,储油罐类最低36.4%。储油罐检测效果差是有原因的——罐体多为圆形,且分布区域可能出现多个相邻油罐紧密排列,受窗口注意力中跨窗口信息交换不够充分的影响,模型对相邻罐体之间的边界区分不够精细,容易把两个靠得很近的小油罐预测成一个稍大的目标。
针对油罐场景我们做了一组对比实验:将窗口大小从8×8改为12×12后,储油罐AP从36.4%提高到39.8%,但整体mAP下降0.8个百分点,因为更大的窗口分散了对小尺度目标的注意力。这个调参过程中的取舍,核心参考指标是数据集中目标分布的尺度比例。储油罐在数据集中占比不高,为它牺牲整体精度得不偿失。
4.3 消融实验
为了验证每个模块的贡献,我们做了一组逐模块去除的消融实验,初始版本去掉所有新增模块后仅保留标准DETR结构。
| 配置 | mAP@[0.5:0.95] |
|---|---|
| Baseline (标准DETR) | 27.4% |
| + 窗口注意力 (替代全局注意力) | 30.1% |
| + 自适应空洞选择模块 | 34.8% |
| + 跨尺度特征交互模块 | 37.2% |
| + 前背景感知注意力 | 38.4% |
| + 迭代查询更新 | 38.9% |
可以看到,贡献最大的单项改进是自适应空洞选择模块,直接带来了4.7个点的mAP提升。这说明在航空图像这种强多尺度场景下,动态调整感受野确实比固定感受野有效得多。跨尺度特征交互模块贡献了2.4个点,前背景感知注意力贡献了1.2个点,迭代查询更新贡献了0.5个点。
窗口注意力替换全局注意力在贡献排序中不算高,只提升了2.7个点,但它把显存占用降到了可接受范围,没有这一步后面所有模块在航空原始分辨率数据上根本无法同时使用。
5. 常见问题与排查技巧实录
5.1 训练不收敛或震荡
这是我们训练中最常见的问题,症状是loss在刚开始下降后又反弹,甚至持续处于波动状态。排查方向主要有三个。
先观察learning rate。DETR系列比CNN检测器对学习率敏感得多。很多人按Faster R-CNN的使用习惯把学习率设为1e-3,DETR直接爆炸。我们的实践证明,骨干网络1e-4、Transformer部分2.5e-4是比较稳的组合。如果训练波动,可以尝试把Transformer部分学习率降到1e-4以下。
再检查梯度裁剪。DETR解码器层的梯度范数波动幅度远超CNN模型,尤其是训练前几十步。如果没做梯度裁剪,稍有波动大的batch就会导致参数更新方向彻底跑偏。我们设的max_norm=0.1,你可以从0.01-1.0区间内先试一个值,观察loss曲线是否稳定。
最后确认对象查询的初始化方式。用全零或固定随机初始化都可能导致部分查询陷入“死亡状态”,即始终不匹配任何目标。我们将查询改为以目标尺度先验分布进行初始化,每类目标的尺度范围不同,查询初始分布覆盖范围也相应调整。这个改动在实验里让收敛速度加快了约20%。
5.2 小目标大量漏检
小目标漏检是航空图像检测的头号痛点。排查顺序为:输入分辨率是否够大、骨干网络是否过早下采样、损失函数是否被大目标主导。
我们最初在512×512分辨率下训练,mAP只有18%,调高到1024后立刻跳到26%。如果你有显存余量,用1280甚至1536分辨率效果还会更好。同时修改了ResNet-50的最后一个stage下采样配置,去掉一次striding,让特征图分辨率直接翻倍。这一改动对小目标提升极其显著,但参数和显存开销会略增。
损失层面,如果训练样本中大目标数量占比高,小目标的梯度会被稀释。我们给面积小于32×32像素的目标在L1损失中加了1.5倍的权重,这算是个简单有效的补救方案。更精细的做法是采用基于尺度的采样策略,在构造batch时确保每个batch里小目标样本占比不低于30%。
5.3 显存不足怎么办
高分辨率航空图像训练时显存紧张是常态。依次尝试以下方案,按推荐优先级排列。
第一是窗口注意力。我们已经把自注意力改成了窗口模式,但如果你还在用标准DETR、之前跑不动的话,这是最需要优先做的工作。第二是降低编码器特征图分辨率,可以尝试将骨干网络后两个stage输出的特征图做通道压缩,从2048压缩到1024甚至512,对性能影响在0.5个点以内。第三是梯度累积。使用梯度累积模拟更大的batch size,显存占用不变,收敛稳定性却能显著提升。我们在16GB单卡下设置累积步数为4,等效batch size为32,训练效果和多卡基本一致。第四是混合精度训练。AMP在A100上提速明显,在3090等卡上也能节约约40%显存占用。开启后需要注意损失缩放策略,避免损失下溢导致NaN。
5.4 推理阶段速度太慢
DETR系列模型推理速度慢的核心瓶颈在解码器的多次迭代。我们提供了两个可以在推理阶段一键切换的优化选项。
第一是执行“解码层裁剪”。在训练完成后,只保留前4层解码层做推理。我们发现6层和4层间的精度差距在0.5个点以内,推理速度却能提升25%。这是因为训练好的前几层已经完成了大部分定位修正,末尾层主要在做分类精修。
第二是使用ONNX/TensorRT导出。如果目标平台是GPU,将模型导成ONNX后用TensorRT重新优化部署,推理延迟通常能降低50%以上。导出时需要注意窗口注意力的动态尺寸问题——如果输入尺寸不固定,需要在导出时用一个固定尺寸对窗口划分做硬编码。
5.5 边界框在切片拼接处出现异常
航空大图切片推理时,拼接处容易出现两类问题:一是目标被切成两半但分别检测为两个目标;二是拼接处目标漏检。我们最终采用的方案是“带上下文重叠切片”+“跨切片合并策略”。
切片时让相邻切片的重叠率保持在20%-30%,这个比例能确保目标至少有一个完整的切片视图。推理完成后,先对每个切片的结果做坐标修正,映射回原始大图坐标系,然后对跨越切片范围的检测框做IoU合并,IoU阈值设0.5。合并后对同一目标保留置信度最高的那个框。这个流程在效果上等价于全图推理的98%精度,但显存开销只有全图的1/4左右。
提示:切片尺寸的选择和你的模型感受野密切相关。如果不确定当前模型在切片尺寸下是否能有效检测最大目标,最简单的方法是先跑一遍全图,再跑一遍切片推理,对比两种模式下的召回率差距。
6. 从实验到落地的几点体会
这套VRF-DETR方案前后迭代了接近三个月。中间踩过的坑比上面能写出来的多得多——最早我在标准DETR上尝试加各种花哨模块,一度把模型搞到120M参数、训练速度慢到怀疑人生,但精度并没有明显提升。后来逐步回归本质,想清楚航空图像检测到底需要模型具备什么能力,才做到现在这个版本。
个人觉得最有价值的设计不是某个具体模块,而是整个思考路径:先分析清楚数据特性,再针对性设计模型,最后用严谨的消融实验验证每个模块的必要性。这个流程对任何目标检测任务都适用。
如果你打算在自己的数据集上复现这套方案,我的建议是先用窗口注意力+自适应空洞选择模块这两个核心改动跑通基线,确认收益后再加上跨尺度交互和前背景感知注意力。一次加完全部模块会让问题排查变得困难,出问题时完全分不清是哪个模块造成的。分步验证虽然慢一些,但每一步都能算出明确收益,写论文或做技术汇报时也有清晰的数据支撑。
最后再分享一个小技巧。训练过程中除了监控mAP和loss,可以定期把解码器最后一层的注意力图可视化出来,叠加在样本图像上。如果你发现某些对象查询的注意力长期飘在目标之外,大概率是查询初始化有问题或训练不充分;如果所有查询的注意力都集中在一两个目标上,则说明查询之间缺乏区分度,需要调整查询初始分布或损失权重。这种可视化诊断在DETR系列调参过程中非常管用,比单纯看loss曲线能提供更丰富的信息。