一、从一次奇怪的性能抖动说起上周在部署RT-DETR的轻量化版本时,遇到一个诡异现象:同一张测试图片,连续推理十次,后五次的目标框位置总比前五次偏移几个像素。不是随机抖动,是系统性偏移,像是有某种状态没重置。排查了数据预处理、后处理、模型权重加载,甚至怀疑是CUDA异步操作的问题。最终定位到编码器层的窗口注意力模块——我们在某几层实验性地引入了Swin Transformer的移位窗口(Shifted Window)机制,但窗口划分的逻辑在连续调用时出现了状态残留。这个问题让我重新审视了移位窗口在DETR这类检测模型中的实现细节。今天就把这几天的调试笔记整理出来,重点聊聊移位窗口机制如何在RT-DETR的编码器中应用,以及我们踩过的那些坑。二、为什么要引入移位窗口?RT-DETR的编码器原本使用全局自注意力,计算复杂度是O(N²),N是特征图展平后的序列长度。对于640×640输入,经过下采样后特征图尺寸仍不小,全局注意力在边缘设备上吃不消。窗口注意力把特征图划分成不重叠的局部窗口,只在窗口内做自注意力,计算量骤降。但这也带来了副作用:窗口之间完全隔离,缺乏跨窗口的信息交互,模型感受野受限。移位窗口就是为了解决这个隔离问题。它在相邻的注意力层之间,让窗口边界向右下角偏移半个窗口尺寸,这样当前层的窗口就能覆盖到上一层不同窗口的部分区域,实现跨窗口通信。