"); //-->
DETR作为Transformer-based目标检测模型,已经逐渐和YOLO系统的各大模型分庭抗礼,尤其是前段时间RT-DETR的发布,更是证明了Transformer模型大一统的趋势。所以一直使用YOLO的小伙伴也可以尝试使用下DETR模型。
就在这两天,中科院、百度、香港大学又联合开源了RefineBox。本来以为又是像之前一样设计一个Attention变体模块,然后插入到网络里重新训练的套路。结果RefineBox竟然不需要重新训练!直接插入到DETR模型里就可以提高定位能力!而且对Conditinal、DAB、DN-DETR这些DETR-like模型都适用!那么,具体是什么原理呢?我们一起来看看吧~
1. 效果展示先来看一下具体效果!
可以发现,几乎对于所有DETR-like模型,RefineBox都能提两个点左右。而且对于Swin-Tiny模型仅增加了0.4M的参数量,对于ResNet模型仅增加了0.5M的参数量。重点是,无需重新训练!模型直接插入到DETR模型中就可以涨点!这可太棒了!要知道以前所谓的"即插即用"模块,都是以重新训练为代价的,没有模块说自己可以直接嵌入到网络中。
总之,效果非常好。代码即将开源,感兴趣的小伙伴可以关注一下。下面我们来看看具体的文章信息。
2. 摘要针对DETR-like模型中的定位问题,我们提出了一个简单、高效且通用的框架。我们将插件添加到训练好的模型中,而不是低效地设计新模型并从头开始训练。该方法称为RefineBox,通过轻量级的优化网络对DETR-like检测器的输出进行优化。RefineBox只利用训练好的检测模型中的特征和预测框,易于实现和训练。我们的方法也是有效的,因为我们在训练过程中冻结了训练好的检测器。此外,我们可以很容易地将RefineBox推广到各种训练好的检测模型中,而不需要做任何修改。我们在COCO和LVIS 1.0上进行了实验。实验结果表明了我们的RefineBox对于DETR及其代表性变体的有效性。例如,DETR、Conditinal-DETR、DAB-DETR和DN-DETR的性能增益分别为2.4 AP、2.5 AP、1.9 AP和1.6 AP。我们希望我们的工作能引起检测界对当前DETR-like模型定位瓶颈的关注,以及RefineBox框架的潜力。
3. 算法解析DETR模型是将目标检测转为集合预测的方式,从而省去NMS后处理,也无需人为设置anchor。另一方面,目标检测可以分为两个子任务:分类和定位。
那么,限制DETR模型性能提升的瓶颈是什么呢?
RefineBox详细分析了这一过程,在DETR模型输出结果(定位+分类)以后,首先使用匈牙利匹配得到与Ground Truth匹配的检测结果,然后分别去探索分类和定位对性能提升的影响。具体来说,就是一方面将DETR输出的分类调整为Ground Truth,一方面将定位结果再单独调整为Ground Truth,分别去查看性能提升了多少(好巧妙的思路)。
结果发现,将分类调整为真值,对性能并没有太大提升,但将定位调整为真值,性能提升很明显!仔细想想,这实际上也是增加正样本权重的过程。
RefineBox实际上就是盯上了"定位"这一过程。
让我们来看看具体的网络架构:
RefineBox主要分为两部分,一方面通过FPN提取原始DETR模型中的多尺度特征,另一方面提取DETR输出的分类框,借助多尺度特征来优化box坐标。具体来说,Refiner的输入为box和特征金字塔,每个Refiner包括ROI Align层、残差模块以及MLP,借助box的真值来优化box坐标。注意,所有Refiner模块的权重是共享的。
训练损失函数上就没啥可说的了,因为重点在定位,所以没有计算分类损失,只使用GIoU和L1来计算分类损失。还需要注意的是,未包含预测真值的物体边界框没有参与优化。
这里再次推荐「3D视觉工坊」新课程《目标检测中的视觉Transformer》
说到这里,其实RefineBox和两阶段目标检测网络很像,也就是先生成提议,再优化。不同的是RefineBox第一阶段生成了具体的检测结果,而不是像传统的两阶段网络那样去拒绝提议。与迁移学习也不太一样,RefineBox没有对预训练模型进行微调或者重新训练。从这一点来看,RefineBox是思想还是很新的,这种想法应用到别的领域来水一篇文章应该很容易。
4. 实验结果RefineBox在COCO数据集上相较于DETR-R50、Conditional-DETR-R50、DAB-DETR-R50、DN-DETR-R50分别提升了2.4、2.5、1.9、1.6的AP,性能提升可以说非常好了。对于更强的backbone(ResNet101和Swin-Tiny),性能提升同样很高。当然笔者觉得性能提升本身不是关键,这种探索性能提升具体原因的思想更为重要。
在LVIS也有和COCO相同的结果。
这篇文章很有意思的一点是,它深入分析了性能提升的真正原因。我们在看很多所谓的"即插即用"的论文时,真的想忍不住吐槽"参数量增加这么多,性能不提升才有问题好吧""多训练了几十个epoch,性能肯定会更好啊"。但是RefineBox这篇文章里,作者对这个问题进行了详细分析。具体来说,作者重新训练了具有相似GFLOPs的DAB-DETR-R50+(b),同时也观察不使用RefineBox但训练更多的epoch(c),证明了性能提升的原因不是参数量、不是FLOPs,也不是多余的训练时长。其他同类的实验还有很多,比如添加额外的分类优化,证明性能会不会进一步提升,结果是性能提升非常微小(d)。很有意思的一个点是,作者尝试了同时训练DETR和RefineBox,结果性能反而下降了,进一步证明了RefineBox是直接应用于预训练权重上。
5. 总结RefineBox感觉是一项很有意思的工作,其他所谓的"即插即用"模块,大多都是指嵌入到模型中重新训练然后性能提升,但这些理论就很矛盾"参数量增加了,FLOPs增加了,训练时间增加了,性能提升不是必然的?",所以很多文章的结论就显得没那么有说服力。而RefineBox这项工作,提出了一个不需要重新训练就可以使用的模块,做到了真正意义上的"即插即用"。
但是,笔者觉得,这项工作最大的意义,不在于提出了一个新方法新模块。而在于它分析问题的思路非常的合理,探索问题的逻辑让人听起来很信服,而且也使用各种实验证明了性能提升的真正原因就是他们所提的,整篇文章读起来很舒服。笔者觉得这一点更应该深入学习。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。