前言

关于DINO-DETR模型,博主在前一篇博客中介绍了自己复现实验结果所遇到的一些问题,为证明博主的猜想,博主正在使用完整的COCO数据集进行实验,这个过程将相当漫长,那么在这段时间里,博主将进行DINO-DETR模型理论知识的学习,等到实验结束后,通过debug来加深对项目的理解。

DINO-DETR的改进

提到DINO-DETR模型的改进,就不得不提到DETR为人诟病的速度与精度问题了。关于这个问题博主深有体会。同时DINO模型的作者也同样指出了其收敛速度慢的问题,并通过实验对其原因进行了分析。
DINO-DETR模型的作者在完成DINO模型之前,已经提出了另外两个模型,分别是DAB-DETR和DN-DETR。而DINO-DETR模型更像是两个模型的结合体。甚至说是两个消融实验。

DAB-DETR模型创新

DAB-DETR是在思考DETR query理解的问题。它直接把DETR的positional query显式地建模为四维的框(x,y,w,h),同时每一层decoder中都会去预测相对偏移量

DINO-DETR模型学习记录_去噪


并去更新检测框,得到一个更加精确的检测框预测:

DINO-DETR模型学习记录_去噪_02


动态更新这个检测框并用它来帮助decoder cross-attention来抽取feature。

DINO-DETR模型学习记录_二分图匹配_03

DN-DETR模型创新

DN-DETR是在思考DETR中的二分图匹配问题,或者说标签分配问题。作者发现DETR中的二分匹配在早期十分不稳定,这会导致优化目标不一致引起收敛缓慢的问题。因此,作者使用一个denoising task直接把带有噪声的真实框输入到decoder中,作为一个shortcut来学习相对偏移,它跳过了匹配过程直接进行学习 。

DINO-DETR模型学习记录_去噪_04

DAB让我们意识到query的重要性,那么如何学到更好的或者初始化更好的query?
DN引入了去噪训练来稳定标签分配,如何进一步优化标签分配?

DINO-DETR模型结构

下图为DINO-DETR模型结构图,可以看到整体与DETR模型还是较为接近的。

DINO-DETR模型学习记录_初始化_05


按照 DAB-DETR,作者将解码器中的查询作为动态锚框,跨解码器层逐步的提炼他们。

按照 DN-DETR,作者将带有噪音的真实标签和box放入 Transformer解码器层来帮助稳定在训练期间的二分图匹配。

为了计算效率我们也采用了可变注意力。而且,我们提出了三个新的方法,如下:

  • 第一,为了提高一对一匹配,我们提出了对比去噪训练即在同一时间添加相同的真实的正负样本。随后将两个不同的有噪音的添加到相同的真实盒子中,我们将带有小噪音的盒子标记为正,其他为负。对比去噪训练帮助模型去避免相同目标的重复输出。

DINO-DETR模型学习记录_去噪_06

DINO-DETR模型学习记录_二分图匹配_07

  • 第二,查询的动态锚框构想将传统的两阶段模型和基于DETR的模型连接在一起。因此我们提出了一个混合查询选择方法。这能更好的初始化查询。我们选择初始化锚框作为编码器输出的位置查询。然而,我们让内容查询像以前一样可以学习,鼓励第一解码器层关注先前的空间。

DINO-DETR模型学习记录_学习_08

DINO-DETR模型学习记录_二分图匹配_09

  • 第三,为了利用后续层的优化框信息,帮助优化其相邻早期层的参数,提出了一个新的前看两次的方案来使用后续层的梯度来纠正更新参数。