目标检测DINO
目标检测DINO
改进的DETR系列模型
论文链接:DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection
论文代码:https://github.com/IDEACVR/DINO
背景
DETR类检测器完全使用Transformer结构代替了传统的检测头,将目标检测建模成集合预测问题,为这一领域提供了一种全新的检测思路,并大大简化了检测模型的结构,使得模型提升的空间得以增加。但其收敛速度慢、性能不佳、query不可解释等问题一直饱受诟病。尽管后续有诸多改进工作,如Deformable DETR、Conditional DETR等尝试从不同角度提供解法,但仍未取得超越经典检测器的检测性能。
Abstract
提出了DINO(DETR with Improved deNoising anchOr boxes),一种先进的端到端对象检测器。DINO采用对比的去噪训练方法、混合查询选择方法进行锚点初始化和两次前瞻的盒子预测方法,在性能和效率上都优于以往的类detrr模型。DINO在具有ResNet-50骨干和多尺度特征的COCO上实现了12 epochs 49.4AP和24 epochs 51.3AP,与之前最好的类detr模型DN-DETR相比,分别获得了+6.0AP和+2.7AP的显著改进。DINO在模型大小和数据大小上都具有很好的伸缩性。在没有附加功能的情况下,在使用SwinL主干的Objects365数据集上进行预训练后,DINO在COCO val2017 (63.2AP)和test-dev (63.3AP)上都获得了最佳结果。与排行榜上的其他模型相比,DINO显著减小了模型大小和预训练数据大小,同时获得了更好的结果。
1 Introduction
与经典的检测算法相比,DETR[3]是一种新的基于变压器的检测算法。它消除了手工设计组件的需求,并实现了与优化的经典检测器(如Faster RCNN[31])相当的性能。与以往的检测器不同,DETR将对象检测建模为集合预测任务,并通过二部图匹配分配标签。它利用可学习查询来探测对象的存在性,并结合来自图像特征映射的特征,其行为类似于软ROI池[21]。
DETR算法虽然具有良好的性能,但训练收敛速度慢,查询意义不明确。
1)以前的类detr模型不如改进的经典探测器。
2)类detr模型的可扩展性研究还不够深入。
作为一个detr模型,DINO包含一个主干、一个多层Transformer编码器、一个多层Transformer解码器和多个预测头。根据DAB-DETR[21],我们将解码器中的查询制定为动态锚框,并在解码器层中逐步改进它们。在DN-DETR[17]之后,我们在Transformer解码器层中添加了ground truth标签和带噪声的框,以帮助稳定训练过程中的二部匹配。为了提高计算效率,我们还采用了变形注意[41]。此外,我们提出了以下三种新方法。
首先,为了改进一对一匹配,我们提出了一种对比去噪训练,即同时添加相同基础真理的正样本和负样本。将两个不同的噪声添加到同一个地面真值框后,我们将较小噪声的框标记为正噪声,另一个标记为负噪声。对比去噪训练有助于模型避免相同目标的重复输出。
其次,查询的动态锚盒公式将detr类模型与经典的两阶段模型联系起来。因此,我们提出了一种混合查询选择方法,它有助于更好地初始化查询。我们从编码器的输出中选择初始锚框作为位置查询,类似于[41,39]。然而,我们让内容查询像以前一样是可学习的,鼓励第一个解码器层专注于空间优先级。
第三,为了利用后期层的盒子信息来优化邻近早期层的参数,我们提出了一种新的前馈两次方案,利用后期层的梯度来修正更新后的参数。
2 Related Work
介绍了一些经典目标检测算法
DETR和它的变体
略
3 DINO: DETR with Improved DeNoising Anchor Boxes
3.1 Preliminaries
Deformable DETR
可变形DETR[41]是另一种加速DETR收敛的早期工作。为了计算可变形注意,引入了参考点的概念,使可变形注意可以集中在参考点周围的一小组关键采样点上。参考点的概念使开发几种技术进一步提高数据重构性能成为可能。第一种技术是query selection,它从编码器中选择特征和引用框作为直接输入到解码器。第二种技术是迭代Bounding box细化,在两个解码器层之间仔细的梯度分离设计。在我们的论文中,我们称这种梯度分离技术为“look forward once”。
3.2 Model overview
DINO是一种端到端架构,它包含一个骨干、一个多层Transformer[36]编码器、一个多层Transformer解码器和多个预测头。整个流程如图所示。
![img](https://modelscope.cn/api/v1/models/damo/cv_swinl_image-object-detection_dino/repo?Revision=master&FilePath=assets/dino_framework.jpg&View=true)
改进主要是在编码器和解码器。
选择最后一层中的top-K编码器特征来初始化Transformer解码器的位置查询,而内容查询则保留为可学习的参数。
我们的解码器还包含一个对比去噪(Contrastive DeNoising , CDN)部分,具有正样本和负样本。
作为基于DETR的模型, DINO是一个端到端的架构,它包含了一个骨架,一个多层Transformer编码器,一个多层Transformer解码器和多个预测头。给定一幅图像,我们利用ResNet[14]或Swin Transformer[23]等骨干提取多尺度特征,然后将它们与相应的位置嵌入输入Transformer编码器。在编码器层特征增强后,我们提出了一个新的混合查询选择策略来初始化锚框作为解码器的位置查询。注意这种策略没有初始化内容序列但是让他们变得可学习。在3.4部分会介绍更多的混合查询选择的细节。结合初始化锚框和可学习的内容查询,我们用可变注意力逐层的结合编码器输出的特征并更新查询,最终的输出是用精炼的锚框形成的,分类结果是从精炼的内容特种中预测的。正如DN-DETR,我们有一个额外的DN分支来执行去噪训练。超过了标准的DN方法,我们通过考虑硬负样本提出了一个新的对比去噪训练训练方法,这将在3.3部分讲解。为了充分利用从最后一层提炼的盒子信息来帮助优化他们早期临近层的参数,提出了一种新的前向两次方法来在相邻层之间传递梯度,这将在3.5部分进行描述。
3.3 Contrastive DeNoising Training
DN-DETR在稳定训练和加速收敛上是非常有效的。在DN查询的帮助下,在有 GT盒子的附近的锚框的基础上学着去做预测。然而它在没有物体在附近的锚框缺乏预测没有物体的能力。为了解决这个问题,我们提出了对比去噪 (CDN)方法来拒绝无用的锚框。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1099a0a8573e430ca9d6f59201057ccc.png)
DN-DETR具有一个超参数λ来控制噪声尺度。生成的噪声不大于λ,因为DN-DETR希望模型从中等噪声的查询中重建ground truth (GT)。在我们的方法中,我们有两个超参数λ1和λ2,其中λ1 < λ2。如图3中的同心方格所示,我们生成了两种类型的CDN查询:正查询和负查询。内方格内的正查询的噪声尺度小于λ1,并被期望重构其对应的地面真值框。内外方格间否定查询的噪声尺度大于λ1,小于λ2。他们被期望预测“没有物体”。我们通常采用小λ2,因为硬阴性样品更接近GT盒更有助于提高性能。如图3所示,每个CDN组都有一组正查询和负查询。如果一个图像有n个GT盒,一个CDN组将有2 × n个查询,每个GT盒产生一个正查询和一个负查询。与DN-DETR相似,我们也使用多个CDN组来提高我们方法的有效性。框回归重建的损失函数是L1 loss和GIOU loss,分类的损失是focal loss[19]。将负样本归类为背景的损失也是focal loss。
Analysis
略
Effectiveness
略
3.4 Mixed Query Selection
为了进一步提高性能,Deformable DETR[41]有一个查询选择变体(在[41]中称为“two - stage”),它从最后一个编码器层中选择前K个编码器特性作为先验,以增强解码器查询。如图5 (b)所示,位置查询和内容查询都是通过所选特征的线性变换生成的。此外,这些选择的特征被馈送到辅助检测头得到预测盒,用于初始化参考盒。同样,Efficient DETR[39]也会根据每个编码器特征的客观性(类)评分选择排名前K的特征。
![image-20221110111105550](https://img-blog.csdnimg.cn/img_convert/3139b1af26f797a5c0d28db2d94da823.png)
在我们的模型中查询的动态4D锚盒公式使其与解码器位置查询密切相关,可以通过查询选择来改进。我们遵循上述实践,并提出了一种混合查询选择方法。如图5 ©所示,我们只使用与所选top-K特征相关联的位置信息初始化锚框,而将内容查询与以前一样保持静态。
3.5 Look Forward Twice
Deformable DETR中的迭代框细化阻止梯度反向传播以稳定训练。我们将该方法命名为向前看一次,因为 i 层的参数仅根据盒子b_i 的附加损失进行更新的。如图六(a)所示,然而,我们推测来自后一层的改进盒子信息可能更有助于纠正其相邻前层的盒子预测。因此我们提出了另一种叫做前看两次的方法来执行盒子更新,其中第 i 层的参数是受第 i 层和第 i+1 层损失的影响,如图六(b)。
总结
- 提出了一种强大的端到端Transformer检测器DINO
- 针对理解模型query的问题,提出了显式地用四维的、可学习的anchor box作为query,让模型得到更加精确的检测框预测结果
- 针对全局搜索难和二分图匹配不稳定导致模型收敛慢,提出对比去噪训练,选择加了噪声的真实框,让模型学习重建真实框,二是加入一个去噪任务直接把带有噪声的真实框输入到decoder中
- 去噪训练里面引入的噪声样本都是正样本来进行学习,然而模型不仅需要学习到如何回归出正样本,还需要意识到如何区分负样本。设计了训练模型识别负样本的方法
- look forward twice是指在decoder之间做逐层迭代细化的时候,通过增加梯度路径,让后一层的预测结果来优化前一层的输出
参考资料
https://blog.csdn.net/m0_63642362/article/details/128876034
https://zhuanlan.zhihu.com/p/562188687
https://zhuanlan.zhihu.com/p/615680958
https://zhuanlan.zhihu.com/p/651326544
https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/125966711
https://modelscope.cn/models/damo/cv_swinl_image-object-detection_dino/summary
论文翻译 http://www.taodudu.cc/news/show-4063794.html?action=onClick