Grounding DINO-开集目标检测论文解读


论文: 《Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection》
github: https://github.com/IDEA-Research/GroundingDINO

摘要

作者展示一种开集目标检测方案:Grounding DINO,将将基于Transformer的检测器DINO与真值预训练相结合。开集检测关键是引入language至闭集检测器,用于开集概念泛化。作者将闭集检测器分为三个阶段,提出一种紧密融合方案,包括feature enhancer、language-guided query selection、cross-modality decoder。
作者除了对新颖类别进行检测还进行特定属性目标识别。在COCO数据集上零样本检测达到52.5AP,在COCO数据集finetune后达到63AP

背景

Grounding DINO相对于GLIP有以下优势:
1、基于Transformer结构与语言模型接近,易于处理跨模态特征;
2、基于Transformer的检测器有利用大规模数据集的能力;
3、DINO可以端到端优化,无需精细设计模块,比如:NMS
目前开集检测器由闭集检测器引入语言信息实现,如图2,闭集检测器通过学习关注语言的区域编码,每个区域可分类为新类别,实现的关键是使用对比损失约束neck及head的区域输出及对应语言特征
在这里插入图片描述

本文贡献如下:
1、提出Grounding DINO通过多阶段跨模态融合改进开集目标检测器;
2、进一步在对REC(Referring Expression Comprehension,目标指代物理解)数据集进行评估;
3、在COCO, LVIS, ODinW, and RefCOCO数据集证明其有效性;

算法

在这里插入图片描述
如图3,对于图片、文本对,Grounding DINO可以输出多对目标框及对应名词短语。
Grounding DINO采用双编码器,单解码器结构。图像backbone 用于提取图像特征,文本backbone用于提取文本特征,特征增强用于融合图像及文本特征,语言引导的query选择模块用于query初始化,跨模态解码器用于框精细化。
流程如下:
1、图像及文本backbone分别提取原始图像及文本特征;
2、特征强化模块用于跨模态特征融合;
3、通过语言引导查询选择模块从图像特征中选择与文本对应的跨模态query;
4、跨模态解码器从跨模态query中提取需要特征,更新query;
5、输出query用于预测目标框及提取对应短语。

3.1Feature Extraction and Enhancer

Swin Transformer用于提取图像特征,BERT用于提取文本特征,特征强化层如图3中block2,利用Deformable self-attention强化图像特征,原始的self-attention强化文本特征,受GLIP影响,增加图像到文本跨模态以及文本到图像跨模态,帮助对齐不同模态特征。

3.2. Language-Guided Query Selection

为引导文本进行目标检测,作者设计语言引导的query选择机制选择与文本更相关的特征作为解码器的query。算法下图所示。输出num_query索引,据此初始化query。每个decoder query包括两部分:content及position。位置部分公式化为dynamic anchor boxes,使用编码器输出进行初始化;内容部分训练中可学习。
在这里插入图片描述

3.3. Cross-Modality Decoder

跨模态解码器结合图像及文本模态信息,如图3 block3,跨模态query经过self-attention层,image cross-attention层与图像特征结合,text cross-attention层与文本特征结合,以及FFN层。与DINO相比,每个解码器都有一个额外的文本cross-attention层,引入文本信息,便于对齐模态。

3.4. Sub-Sentence Level Text Feature

之前工作中探究了两种文本prompt,如图4。句子层级表征将整个句子编码为一个特征,移除了单词间影响;单词级表征能够编码多个类别,但引入不必要依赖关系;为避免不相关单词相互作用,作者引入attention mask,此为sub-sentence级表征,既保留每个单词特征,又消除不相关单词间相互作用
在这里插入图片描述

3.5. Loss Function

类似DETR,作者使用L1损失及GIOU损失用于框回归;沿用GLIP,对预测目标是否匹配文本使用对比损失约束

实验

Grounding data包括GoldG及RedC,其中GoldG包括Flickr30k及Visual Genome;RefC包括RefCOCO, RefCOCO+及RefCOCOg。

4.2 Zero-Shot Transfer of Grounding DINO

COCO数据集

表2,coco数据集zero-shot测试Grounding-DINO-T超越DINO,达到46.2AP更换大backbone及使用更多数据预训练,达到60.7AP,在COCO数据集finetune后在COCO test数据集达到63AP
在这里插入图片描述

LVIS数据集

如表3,Grounding DINO超越GLIP,但是在稀有类别上,GLIP性能更佳,可能由于900个query的设计,限制了对长尾目标的能力;使用更多数据,Grounding DINO带来更大增益
在这里插入图片描述

ODinW,开放域目标检测

表4,作者比较zero-shot,few-shot,full-shot结果,Grounding-DINO-L在zero-shot达到26.1AP。
在这里插入图片描述

4.3 Referring Object Detection Settings

作者进一步探究模型在目标指代物理解任务上性能,结果如表5,Grounding DINO超越CLIP,但是RefCOCO/+/g数据训练后才带来显著提升,后续需要关注REC zero-shot任务。
在这里插入图片描述

4.4. Ablations

作者提出用于开集目标检测的紧密融合模型及sub-sentence层级文本prompt,消融实验结果如表6,encoder融合带来最大增益。
在这里插入图片描述

4.5. Transfer from DINO to Grounding DINO

在这里插入图片描述
从头训练Grounding DINO成本比较大,因此作者迁移DINO至Grounding DINO仅训练存在差异层,结果如表7,使用预训练模型与从头训练性能接近,但拟合速度加快,如图5。
在这里插入图片描述

4.6 更多可视化结果

在这里插入图片描述

4.7 Grounding DINO与Stable Diffusion结合

在这里插入图片描述

结论

Grounding DINO扩展DINO至开集目标检测,提出一种紧密融合方法,更好融合跨模态信息,更合理的sub-sentence级text prompt,实验结果展示上述设计的有效性,但在REC数据集没有finetune效果比较差,后续需要关注REC zero-shot任务

限制:
目前Grounding DINO无法用于分割任务。

  • 13
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
根据提供的引用内容,Grounding DINO是一种结合了DINO和基于Transformer的检测器的模型,用于开放式目标检测。它的输入是图像和文本,输出是多个[物体框,名词短语]对。具体来说,Grounding DINO使用DINO模型对图像和文本进行编码,然后使用基于Transformer的检测器对编码后的特征进行检测,最终输出[物体框,名词短语]对。 下面是一个简单的示例代码,演示如何使用Grounding DINO进行开放式目标检测: ```python import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn from transformers import ViTFeatureExtractor, ViTForImageClassification from transformers.models.dino.modeling_dino import DINOHead # 加载预训练的DINO模型和ViT模型 dino = ViTForImageClassification.from_pretrained('facebook/dino-vit-base') dino_head = DINOHead(dino.config) dino_head.load_state_dict(torch.load('dino_head.pth')) dino.eval() vit_feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224') # 加载预训练的Faster R-CNN检测器 model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval() # 输入图像和文本 image = Image.open('example.jpg') text = 'a person riding a bike' # 对图像和文本进行编码 image_features = vit_feature_extractor(images=image, return_tensors='pt')['pixel_values'] text_features = dino_head.get_text_features(text) image_embedding, text_embedding = dino(image_features, text_features) # 使用Faster R-CNN检测器进行目标检测 outputs = model(image_embedding) boxes = outputs[0]['boxes'] labels = outputs[0]['labels'] # 输出[物体框,名词短语]对 for i in range(len(boxes)): print([boxes[i], labels[i]]) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值