【RT-DETR】014、ShuffleNetV2骨干网络替换实战:从显存爆炸到推理速度翻倍的真实调优记录
凌晨三点,显存又炸了
客户现场传回日志:部署在边缘设备上的RT-DETR模型推理到第37张图片时显存溢出。设备是某国产工控机,只有4GB显存,原版ResNet骨干在640x640输入下显存占用直接冲到3.8GB。换骨干这事不能再拖了——今天的目标是把RT-DETR的骨干换成ShuffleNetV2,既要保住mAP,还得把显存砍半。
为什么选ShuffleNetV2?
论文里那些FLOPs计算都是理论值,真正在嵌入式设备上跑起来,内存访问代价(MAC)才是瓶颈。ShuffleNetV2的设计准则很实在:卷积输入输出通道数相等时内存访问代价最小、分组数太大影响并行度、网络碎片化操作(比如Inception里那些多分支)对缓存不友好。这些经验都是从芯片实际运行特性里总结出来的,比单纯看参数量靠谱。
动手改结构:先拆解原版骨架
RT-DETR默认用HGNetv2,我们先得理清它的输出特征图怎么接Transformer的。打开源码找到backbone定义部分:
# 原版骨干输出三个特征图给Neck# 形状分别是 [batch, 256, 80, 80]、[batch, 512, 40, 40]、[batch, 1024, 20, 20]# 对应下采样倍数8x、16x、32x<