【RT-DETR实战】105、变体模型训练、调试与性能基准测试:从训练崩溃到精度提升的实战手记
一、深夜的CUDA内存溢出
上周三凌晨两点,屏幕突然跳出那个熟悉的错误:
RuntimeError: CUDA out of memory. Tried to allocate 2.34 GiB...当时正在训练RT-DETR-R50的改进变体,只是把Backbone的某个stage深度从3层改到5层,batch_size已经降到4,居然还是爆显存。
这种时候千万别急着调小batch_size——那只是表面功夫。我打开nvidia-smi一看,显存占用曲线在forward过程中有个陡峭的峰值。
问题根源:
RT-DETR的Transformer decoder在计算attention时,默认的attention mask生成逻辑有问题。
当输入图像尺寸不是固定大小时,某些变体模型会生成一个临时张量,尺寸是[HW, HW],对于1024x1024的输入,这个中间变量直接吃掉几十个G。
修复方案:
# 原版代码(坑就在这里)defgenerate_mask(size