Hello~大家好久不见,一直没时间在这里翻译论文了,最近在学GroundingDINO,强迫症的菜鸡就想先翻译成中文然后再慢慢啃....废话不多说了,因为时间关系,只翻译了关键内容,其他内容有时间再补充啦。
论文:https://arxiv.org/abs/2303.05499v4
源码:GitHub - IDEA-Research/GroundingDINO: The official implementation of "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection"
Abstract:
在本文中,我们提出了一种开放集对象检测器,称为Grounding DINO,通过将基于Transformer的检测器DINO与真值预训练相结合,该检测器可以通过人类输入(如类别名称或指代表达)对任意物体进行检测。开放集目标检测的关键解决方案是将语言引入闭集检测器,用于开集概念泛化。为了有效地融合语言和视觉模态,我们从概念上将闭合集检测器分为三个阶段,并提出了一个紧密的融合解决方案,其中包括一个特征增强器、一个以语言引导的查询选择和一个跨模态的融合。虽然以前的工作主要评估对新类别的开放集对象检测,但我们建议也对用属性指定的对象的指代表达理解进行评估。Grounding DINO在三种配置中都表现得非常好,包括COCO、LVIS、ODinW和RefCOCO/+/g上的基准测试。Grounding DINO在COCO检测零样本传输基准上达到52.5AP,即没有COCO的任何训练数据。用COCO数据微调后,Grounding DINO的AP达到63.0。它在ODinW零样本基准上设置了一个新记录,AP平均值为26.1。
1.Introduction
理解新概念是视觉智能的一项基本能力。在这项工作中,我们的目标是开发一个强大的系统来检测由人类语言输入指定的任意对象,我们称之为开放集对象检测。由于其作为通用目标探测器的巨大潜力,该任务具有广泛的应用前景。例如,我们可以将其与用于图像编辑的生成模型配合使用(如图1b所示)。
开放集检测的关键是引入不可见对象泛化的语言[1,7,26]。例如,GLIP[26]将对象检测重新定义为短语基础任务,并引入对象区域和语言短语之间的对比训练。它在异构数据集上表现出了极大的灵活性,在闭合集和开放集检测上都表现出了显著的性能。尽管GLIP的结果令人印象深刻,但它的性能可能会受到限制,因为它是基于传统的一级检测器动态头设计的。由于开放集和闭合集检测密切相关,我们相信更强的闭合集对象检测器可以产生更好的开放集检测器。
受基于Transformer的检测器[24,25,31,58]令人鼓舞的进展的激励,在这项工作中,我们建议构建一个基于DINO[58]的强大的开放集检测器,它不仅提供了最先进的对象检测性能,而且允许我们通过基础预训练将多层文本信息集成到其算法中。我们将模型命名为Grounding DINO。Grounding DINO比GLIP有几个优势。首先,它基于Transformer的架构类似于语言模型,使它能够轻松的处理图像和语言数据。例如,由于所有的图像和语言分支都是用Transformers构建的,我们可以很容易地在其整个架构中融合跨模态特征。其次,基于Transformers的检测器在利用大规模数据集方面表现出卓越的能力。最后,作为一个类似DETR的模型,DINO可以端到端优化,而无需使用任何手工设计的模块,如NMS(非极大值抑制),这大大简化了整个grounding模型的设计。
大多数现有的开放集检测器是通过将闭合集检测器扩展到具有语言信息的开放集场景来开发的。如图2所示,闭合集检测器通常具有三个重要模块,一个用于特征提取的主干、一个用于特性增强的Neck和一个用于区域细化(或边界框预测)的head。闭合集检测器可以被推广为通过学习语言感知区域嵌入来检测新的对象,使得每个区域可以在语言感知空间中被分类为新的类别。实现这一目标的关键是在neck和/或head输出处使用区域输出和语言特征之间的对比损失。为了帮助模型对齐跨模态信息,一些工作试图在最终损失阶段之前融合特征。图2显示了特征融合可以分三个阶段进行:neck(阶段A)、查询query初始化(阶段B)和head(阶段C)。例如,GLIP[26]在neck(阶段A)模块中执行早期融合,OV-DETR[56]使用语言感知查询作为head模块(阶段B)输入。
我们认为,pipiline中更多的特征融合使模型能够更好地执行。值得注意的是,检索任务更喜欢类似CLIP的two-tower架构,该架构只在最后进行多模态特征比较,以提高效率。然而,对于开放集检测,通常为模型提供图像和文本输入,以指定目标对象类别或特定对象。在这种情况下,由于图像和文本在开始时都可用,因此更倾向于使用紧密(和早期)的融合模型来获得更好的性能[1,26]。尽管概念上很简单,但之前的工作很难在所有三个阶段进行特征融合。像Faster RCNN这样的经典检测器的设计使得在大多数块中很难与语言信息交互。与经典检测器不同,基于Transformer的检测器DINO具有与语言块一致的结构。逐层设计使其能够轻松地与语言信息交互。根据这一原则,我们在颈部、query初始化和head阶段设计了三种特征融合方法,更具体地说,我们通过堆叠自注意力、文本到图像的交叉注意力和图像到文本的交叉注意力作为颈部模块来设计特征增强器。然后,我们开发了一种语言引导的查询选择方法来初始化head的查询。我们还为头部阶段设计了一个具有图像和文本交叉注意力层的交叉模态解码器,以增强查询表示。三个融合阶段有效地帮助模型在现有基准上获得更好的性能,如第4.4节所示。
尽管在多模态学习中取得了显著的改进,但大多数现有的开放集检测工作都会在新类别的对象上评估它们的模型,如图1(b)的左列所示。我们认为,还应该考虑另一个重要的场景,即用属性来描述对象。在文献中,这个问题被命名为参考表达理解(REC)[30,34]。我们在图1(b)的右列中给出了一些REC的例子。这是一个密切相关的领域,但在以前的开放集检测工作中往往被忽视。在这项工作中,我们扩展了开放集检测以支持REC,并评估了其在REC数据集上的性能。
我们在所有三种配置上进行了实验,包括闭合集检测、开放集检测和引用referring对象检测,以全面评估开放集检测性能。Grounding DINO在很大程度上优于竞争对手。例如,在没有任何COCO训练数据的情况下,在COCO minival上Grounding DINO 的ap可以达到52.5。它还使用26.1的mAP建立了ODinW[23]零样本基准的最新技术。
本文的贡献总结如下:
1、我们提出了Grounding DINO,它通过在多个阶段执行视觉语言模态融合来扩展闭合集检测器DINO,包括特征增强器、语言引导的查询选择模块和跨模态解码器。这样的深度融合策略有效地提高了开放集对象检测。
2、我们建议将开放集对象检测的评估扩展到REC数据集。它有助于评估具有自由形式文本输入的模型的性能。
3、在COCO、LVIS、ODinW和RefCOCO/+/g数据集上的实验证明了Grounding DINO在开集对象检测任务中的有效性。
3.Grounding DINO
Grounding DINO为给定的(图像、文本)对输出多对对象框和名词短语。例如,如图3所示,该模型从输入图像中定位一个cat和一张table,并从输入文本中提取词cat和table作为相应的标签。目标检测和REC任务都可以与pipeline对齐。根据GLIP[26],我们将所有类别的名称拼接起来,作为对象检测任务的输入文本。REC要求每个文本输入都有一个边界框。我们使用得分最大的输出对象作为REC任务的输出。
Grounding DINO是一种双编码器-单解码器架构。它包含用于图像特征提取的图像主干、用于文本特征提取的文本主干,用于图像和文本特征融合的特征增强器(第3.1节),用于查询初始化的语言引导查询选择模块(第3.2节)和用于框细化的跨模态解码器(第3.3节)。总体框架如图3所示。
对于每个(图像、文本)对,我们首先分别使用图像主干和文本主干提取普通图像特征和普通文本特征。这两个普通特征被送到用于跨模态特征融合的特征增强器模块中。在获得跨模态文本和图像特征后,我们使用语言引导的查询选择模块从图像特征中选择跨模态查询。与大多数DETR类模型中的对象查询一样,这些跨模态查询将被送到跨模态解码器中,以从双模态特征中探测所需特征并更新它们自己。最后一个解码器层的输出查询将用于预测对象框并提取相应的短语。
3.1. Feature Extraction and Enhancer
给定(图像,文本)对,我们使用像Swin Transformer[32]这样的图像主干提取多尺度图像特征,并使用像BERT[8]这样的文本主干提取文本特征。继之前的类似DETR的检测器[58,64]之后,从不同块的输出中提取多尺度特征。在提取普通的图像和文本特征后,我们将它们输入到特征增强器中进行跨模态特征融合。特征增强器包括多个特征增强层。我们在图3块2中说明了一个特征增强层。我们利用可变形的自注意力来增强图像特征,并利用普通的自注意力增强文本特征。受GLIP[26]的启发,我们添加了一个图像到文本的交叉注意力和一个文本到图像的交叉注意力来进行特征融合。这些模块有助于调整不同模态的特征。
3.2. Language-Guided Query Selection
Grounding DINO旨在从图像中检测输入文本指定的对象。为了有效地利用输入文本来指导对象检测,我们设计了一个语言引导的查询选择模块,以选择与输入文本更相关的特征作为解码器查询。我们在算法1中以PyTorch风格展示了查询选择过程。变量image_features和text_features分别表示图像和文本特征。num_query是解码器中的查询数,在我们的实现中设置为900。我们使用bs和ndim来表示伪代码中的batch size和特征维度feature dimension。num_img_tokens和num_text_tokens分别用于图像和文本tokens的数量。
语言引导查询选择模块输出num_query的多个索引。我们可以根据选择的索引提取特征来初始化查询。根据DINO[58],我们使用混合查询选择来初始化解码器查询。每个解码器查询分别包含两部分:内容部分和位置部分[33]。我们将位置部分公式化为动态锚框[31],通过编码器输出对其进行初始化。另一部分,内容查询,被设置为在训练期间可以学习。
3.3. Cross-Modality Decoder
我们开发了一个跨模态解码器来组合图像和文本模态特征,如图3块3所示。每个跨模态查询被送到自注意力层、用于组合图像特征的图像交叉注意力层、用来组合文本特征的文本交叉注意力层以及每个跨模态解码器层中的FFN层。与DINO解码器层相比,每个解码器层都有一个额外的文本交叉注意力层,因为我们需要将文本信息注入查询中,以实现更好的模态对齐。
3.4. Sub-Sentence Level Text Feature
在之前的工作中,我们探索了两种文本提示,分别命名为句子级表示和单词级表示,如图4所示。句子级表示[35,53]将整个句子编码为一个特征。如果一些句子有在短语基础数据库中的多个短语,它会提取这些短语并丢弃其他单词。通过这种方式,它消除了单词之间的影响,同时丢失了句子中的细粒度信息。单词级表示[11,18]允许用一个正向forward编码多个类别名称,但在类别之间引入了不必要的依赖性,尤其是当输入文本是多个类别名按任意顺序串联时。如图4(b)所示,一些不相关的单词在注意力过程中相互作用。为了避免不必要的单词交互,我们引入了注意力masks来阻断不相关类别名称之间的注意力,称为“子句”级表示。它消除了不同类别名称之间的影响,同时保留了每个单词的特征,以便进行细粒度的理解。
3.5. Loss Function
继之前类似DETR的工作[2,24,31,33,58,64]之后,我们使用L1损失和GIOU[41]损失进行边界框回归。我们遵循GLIP[26],使用预测对象和语言tokens之间的对比损失进行分类。具体来说,我们将每个查询与文本特征进行点乘,以预测每个文本token的logits,然后计算每个logit的focal损失[28]。边界框回归和分类成本首先用于预测和gt之间的二分匹配。然后,我们计算gt和具有相同损耗分量的匹配预测之间的最终loss。根据类似DETR的模型,我们在每个解码器层和编码器输出之后添加辅助loss。
5.Conclusion
在本文中,我们提出了一个Grounding DINO模型。Grounding DINO将DINO扩展到开放集对象检测,使其能够检测给定文本作为查询的任意对象。我们回顾了开放集对象检测器的设计,并提出了一种紧密融合方法来更好地融合跨模态信息。我们提出了一种子句级表示,以更合理的方式使用检测数据进行文本提示。结果表明了我们的模型设计和融合方法的有效性。此外,我们将开放集对象检测扩展到REC任务,并相应地进行评估。我们表明,如果不进行微调,现有的开放集检测器就不能很好地处理REC数据。因此,我们呼吁在未来的研究中要格外关注REC的零样本性能。
局限:尽管在开放集对象检测设置上有很好的性能,但Grounding DINO不能像GLIPv2等用于分割任务。此外,我们的训练数据小于最大的GLIP模型,这可能会限制我们的最终性能。