昨天深夜调模型的时候,监控面板突然报警——显存占用飙到了22GB,batch_size才开到4。盯着nvidia-smi里那个刺眼的“out of memory”,我对着RT-DETR的attention可视化图发了会儿呆。那些密密麻麻的token,像撒芝麻一样铺满特征图,每个都要和其他所有token做交互,这计算量能不炸吗?一、问题的本质:Attention的计算代价RT-DETR的encoder里,最吃资源的就是self-attention。假设特征图尺寸是80×80,展平后就是6400个token。那个attention矩阵是6400×6400,单是存储这个矩阵就要吃掉300多MB。更别说计算复杂度是O(n²)了,6400²的操作量,GPU不叫苦才怪。实际部署时更头疼。边缘设备上,这种规模的attention根本跑不动。上周在Jetson Orin上实测,原版RT-DETR的encoder耗时占了整体推理时间的68%。客户那边等着要优化方案,总不能回一句“换个A100吧”。二、粗暴的降采样为什么不行第一反应当然是降采样。把80×80用卷积直接压到40×40,token数降到1600,计算量降到1/4。简单粗暴,试了,mAP掉了3.2个点。问题出在小目标上。原来能检测的远处行人,现在全丢了。可视化一看就明白——降采样把那些本来就稀疏的小目标特征直接混没了。就像用粗网眼的筛子筛芝麻,漏得干干净净。