开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO

flyfish

Grounding DINO 是一种开创性的开放集对象检测器,它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术,实现了可以根据人类输入(如类别名称或指代表达)检测任意对象的功能。这项研究的关键在于将语言引入到原本只能识别预定义类别的封闭集检测器中,以实现对开放集概念的泛化能力。

为了有效融合语言和视觉模态,研究者们在理论上将一个封闭集检测器的工作流程分为三个阶段,并提出了一个紧密融合的解决方案。该方案包括:

  1. 特征增强器:用于强化从图像中提取的特征。
  2. 语言引导的查询选择:根据提供的文本描述来选择哪些区域或对象进行更细致的分析。
  3. 跨模态解码器:用于融合视觉和语言信息,使模型能够理解两者之间的关系。

Grounding DINO 首先在大规模数据集上进行了预训练,这些数据集涵盖了对象检测、接地任务以及图像字幕生成的数据。预训练之后,模型在开放集对象检测和指代对象检测基准测试中进行了评估。结果显示,Grounding DINO 在所有三项设置中都表现出了显著的效果,包括COCO、LVIS、ODinW 和 RefCOCO/+/g 等基准测试。

具体来说,Grounding DINO 在 COCO 零样本检测基准上的平均精度(AP)达到了52.5%,并且在 ODinW 的零样本检测基准上创造了新的记录,平均精度为26.1%。这表明 Grounding DINO 不仅可以很好地处理已知类别的检测任务,还能有效地应对未曾见过的新类别,展现了强大的泛化能力。

此外,研究人员还发布了部分检查点和推理代码,供社区使用和进一步研究,发布地址为 https://github.com/IDEA-Research/GroundingDINO

这个模型的成功标志着在开放集对象检测领域的一个重要进展,为未来的研究和应用提供了新的可能性。

Introduction

Artificial General Intelligence (AGI) 系统的能力的一个关键指标是其处理开放世界场景的熟练程度。在本文中,我们的目标是开发一个强大的系统,该系统能够根据人类语言输入检测任意对象,这一任务通常被称为开放集对象检测(open-set object detection)。此任务作为通用对象检测器具有广泛的应用前景和巨大潜力,例如可以与生成模型合作进行图像编辑(如图1(b)所示)。

为了实现这个目标,我们设计了强大的开放集对象检测器 Grounding DINO,并遵循以下两个原则:

  1. 基于DINO的紧密模态融合

    • 开放集检测的关键在于通过引入语言来实现对未见过的对象的泛化能力。大多数现有的开放集检测器都是通过将封闭集检测器扩展到开放集场景并结合语言信息发展而来的。
    • 如图2所示,一个封闭集检测器通常包含三个重要模块:用于特征提取的骨干网络(backbone)、用于特征增强的颈部(neck),以及用于区域细化(或边界框预测)的头部(head)。
    • 通过学习语言感知的区域嵌入,封闭集检测器可以被推广以检测新对象,使得每个区域可以在语言感知的语义空间中分类为新的类别。实现这一目标的关键是在颈部和/或头部输出之间使用区域输出和语言特征之间的对比损失(contrastive loss)。
  2. 大规模接地预训练以实现概念泛化

    • 为了让模型能够理解并识别各种不同类型的对象,它需要经历大规模的数据预训练,包括对象检测数据、接地数据和字幕数据等。这种预训练有助于模型学习如何将视觉信息与文本描述关联起来,从而提高对新概念的理解和泛化能力。

Grounding DINO 的设计不仅依赖于深度学习中的Transformer架构(如DINO),还依赖于跨模态(视觉和语言)信息的有效融合。通过这种方式,模型能够在不局限于预定义对象类别的前提下,根据自然语言描述准确地定位和识别图像中的对象,这标志着向更加智能和灵活的计算机视觉系统迈出了重要一步。

此外,文中提到的“对比损失”是一种训练技术,它帮助模型学会区分正样本(即正确的匹配)和负样本(错误的匹配),这对于确保模型正确地关联语言描述和视觉内容至关重要。这种方法使 Grounding DINO 能够有效地从已知类别泛化到未知类别,从而在开放集对象检测任务中表现优异。
执行代码先执行

export HF_ENDPOINT=https://hf-mirror.com
from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2

model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "weights/groundingdino_swint_ogc.pth")
IMAGE_PATH = "weights/dog-3.jpeg"
TEXT_PROMPT = "chair . person . dog ."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25

image_source, image = load_image(IMAGE_PATH)

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_TRESHOLD,
    text_threshold=TEXT_TRESHOLD
)

annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)

问题

GroundingDINO/ms_deform_attn.py", line 53, in forward
    output = _C.ms_deform_attn_forward(
             ^^
NameError: name '_C' is not defined

解决方法

export CUDA_HOME=/usr/local/cuda-12.4
echo $CUDA_HOME

请添加图片描述

### Grounding DINO 在开放词汇目标检测中的应用与原理 Grounding DINO 是一种结合了视觉和语言模态的开放集目标检测器,其设计旨在通过引入语言信息来实现对未见过对象的泛化能力。以下是 Grounding DINO 的模型原理及其在开放词汇目标检测中的实现方法。 #### 模型架构概述 Grounding DINO 的核心思想是将基于 Transformer 的检测器 DINO 与基于 grounded 的预训练相结合[^3]。这种结合使得模型能够根据人类输入(如类别名称或指代表达)检测任意目标。模型的关键组件包括: 1. **特征提取和增强器** Grounding DINO 使用骨干网络(backbone)提取图像的视觉特征,并通过颈部(neck)模块进行特征增强。这些增强后的特征为后续的跨模态融合提供了高质量的视觉表示[^4]。 2. **语言引导的 Query 选择** 为了实现语言引导的目标检测Grounding DINO 引入了语言感知的区域嵌入。每个 Query 被设计为可以学习到与特定语言描述相关的视觉特征,从而实现对开放词汇目标的检测[^4]。 3. **跨模态解码器** 跨模态解码器是 Grounding DINO 的关键模块之一,用于融合视觉和语言模态的信息。通过解码器,模型能够生成与输入文本描述相匹配的边界框预测[^3]。 4. **子句层次的文本特征** Grounding DINO 提取子句层次的文本特征,以便更好地理解复杂的语言描述。这些特征被用于指导 Query 的选择和解码过程。 5. **损失函数** 模型使用多种损失函数进行训练,包括分类损失、边界框回归损失以及对比损失。对比损失特别重要,因为它帮助模型学习到视觉和语言特征之间的对齐关系。 #### 开放词汇目标检测的实现方法 Grounding DINO 在开放词汇目标检测中的实现方法主要依赖于以下几点: - **预训练阶段** 模型在大规模数据集上进行预训练,这些数据集包括目标检测数据、定位数据和标题数据。通过这种方式,模型能够学习到丰富的视觉和语言知识[^3]。 - **零样本检测能力** 在推理阶段,用户可以通过提供自定义的文本描述来检测未见过的对象。例如,在 COCO 数据集上,模型可以通过输入文本“zebra”检测斑马,即使该类别不在训练集中[^1]。 - **代码示例** 下面是一个使用 Grounding DINO 进行开放词汇目标检测的 Python 示例代码: ```python # 运行 Grounding DINO 检测 python demo/image_demo.py images/animals.png \ configs/mm_grounding_dino/grounding_dino_swin-t_pretrain_obj365.py \ --weights grounding_dino_swin-t_pretrain_obj365_goldg_grit9m_v3det_20231204_095047-b448804b.pth \ --texts '$: coco' ``` #### 性能表现 Grounding DINO 在多个基准测试中表现出色。例如,在 COCO 零样本检测基准上,模型达到了 52.5 的平均精度(AP)。在 ODinW 零样本基准上,模型创下了平均 26.1 AP 的新纪录[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值