
一、从一次显存爆炸说起上周在部署 RT-DETR 到边缘设备时遇到个头疼的问题:输入分辨率提到 640x640 时显存直接爆了。nvidia-smi显示显存占用飙到 8G,这还怎么在 Jetson 上跑?用torch.cuda.memory_summary()追查发现,问题出在注意力模块的O(N^2)复杂度上——特征图尺寸稍大,注意力矩阵就膨胀到无法承受。这让我重新审视 Transformer 在视觉任务中的老毛病:全局注意力计算量随图像尺寸平方增长。而实际调试中发现,目标检测真的需要每个像素都关注全局所有像素吗?未必。很多情况下,局部上下文已经足够做出判断。二、Swin Transformer 的核心洞察Swin Transformer 的聪明之处在于它看透了视觉数据的本质特性:层次化和局部性。图像理解天然是分层进行的——边缘组成纹理,纹理构成部件,部件组成物体。直接做全局注意力,相当于让模型在理解“这个像素是什么”时,还要考虑图像另一头完全无关的像素。它的窗口划分机制特别实用。把特征图切成不重叠的窗口,每个窗口内部做自注意力,复杂度立刻从O(H^2W^2)降到O(M^2HW),其中 M 是窗口大小(默认 7)。这个设计在代码里实现起来比想象中简洁: