介绍一篇较新的目标检测工作:

Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection


论文地址为:

https://arxiv.org/pdf/2303.05499.pdf

github 地址为:

https://github.com/IDEA-Research/GroundingDINO

文章目录

  • 一、摘要
  • 二、优点
  • 三、Grounding DINO 模型
    • 3.1 Feature Extraction and Enhancer
    • 3.2 Language-Guided Query Selection
    • 3.3 Cross-Modality Decoder
    • 3.4 Sub-Sentence Level Text Feature
    • 3.5 损失函数
  • 四、一些可视化结果

一、摘要

作者展示一种开集目标检测方案:Grounding DINO,将将基于 Transformer 的检测器 DINO 与真值预训练相结合。

开集检测关键是引入 language 至闭集检测器,用于开集概念泛化。作者将闭集检测器分为三个阶段,提出一种紧密融合方案,包括 feature enhancerlanguage-guided query selectioncross-modality decoder

作者除了对新颖类别进行检测还进行特定属性目标识别。在 COCO 数据集上零样本检测达到 52.5 AP,在 COCO 数据集 finetune 后达到 63 AP

二、优点

Grounding DINO 相对于 GLIP 有以下优势:

  1. 基于 Transformer 结构与语言模型接近,易于处理跨模态特征;
  2. 基于 Transformer 的检测器有利用大规模数据集的能力;
  3. DINO 可以端到端优化,无需精细设计模块,比如:NMS

目前开集检测器由闭集检测器引入语言信息实现,如下图所示:

闭集检测器通过学习关注语言的区域编码,每个区域可分类为新类别,实现的关键是使用对比损失约束 neckhead 的区域输出及对应语言特征。

所以本文取得的成就为:

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

三、Grounding DINO 模型

对于图片、文本对,Grounding DINO 可以输出多对目标框及对应名词短语。

Grounding DINO 采用双编码器,单解码器结构。

图像 backbone 用于提取图像特征,文本 backbone 用于提取文本特征,特征增强用于融合图像及文本特征,语言引导的 query 选择模块用于 query 初始化,跨模态解码器用于框精细化。

流程如下:

  1. 图像及文本 backbone 分别提取原始图像及文本特征;
  2. 特征强化模块用于跨模态特征融合;
  3. 通过语言引导查询选择模块从图像特征中选择与文本对应的跨模态 query
  4. 跨模态解码器从跨模态 query 中提取需要特征,更新 query
  5. 输出 query 用于预测目标框及提取对应短语。

3.1 Feature Extraction and Enhancer

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

3.2 Language-Guided Query Selection

为引导文本进行目标检测,作者设计语言引导的 query 选择机制选择与文本更相关的特征作为解码器的 query

算法下图所示。输出 num_query 索引,据此初始化 query

每个 decoder query 包括两部分: contentposition

位置部分公式化为 dynamic anchor boxes,使用编码器输出进行初始化;内容部分训练中可学习。

"""
Input:
image_features: (bs, num_img_tokens, ndim)
text_features: (bs, num_text_tokens, ndim)
num_query: int.
Output:
topk_proposals_idx: (bs, num_query)
"""
logits = torch.einsum("bic,btc->bit",
image_features, text_features)
# bs, num_img_tokens, num_text_tokens
logits_per_img_feat = logits.max(-1)[0]
# bs, num_img_tokens
topk_proposals_idx = torch.topk(
logits_per_image_feature,
num_query, dim = 1)[1]
# bs, num_query

上面这段代码实现的功能是计算图像特征和文本特征之间的相似度得分。

具体来说,输入两个特征张量 image_featurestext_features,其中 image_features 的维度为 (bs, num_img_tokens, ndim)text_features 的维度为 (bs, num_text_tokens, ndim)bs 表示 batch sizenum_img_tokensnum_text_tokens 分别表示图像特征和文本特征的总数,ndim 则表示特征维度。

代码首先使用 torch.einsum 函数计算两个特征张量之间的得分矩阵 logits,其中 bic 表示 image_features 张量的维度(batch size x num_img_tokens x ndim),btc 表示 text_features 张量的维度(batch size x num_text_tokens x ndim),bit 表示输出得分矩阵的维度(batch size x num_img_tokens x num_text_tokens)。计算方法为将 image_features 张量的第二个维度和 text_features 张量的第二个维度进行矩阵乘法,得到 logits 张量。得分矩阵中的每个元素表示一个图像特征与一个文本特征之间的得分。

接下来,代码使用 logits.max(-1)[0] 得到 logits_per_img_feat 张量,该张量的维度为 (bs, num_img_tokens),其中每个元素表示一个图像特征与所有文本特征之间的最大得分。具体来说,logits.max(-1) 得到一个长度为 2 的元组,第一个元素是最大值张量,维度为 (bs, num_img_tokens),第二个元素是最大值索引张量,维度为 (bs, num_img_tokens)。因为我们只需要最大值张量,所以使用 [0] 表示取出最大值张量。

在下一行代码中,使用 torch.topk 函数得到每个图像特征对应的前 num_query 个文本特征的索引。具体来说,该函数用于在某个维度上寻找前k个最大值。在本例中,logits_per_image_feature 张量的每个元素表示一个图像特征与所有文本特征之间的最大得分,因此 torch.topk 函数在第二个维度上找到前 num_query 个最大值,结果保存到 topk_proposals_idx 张量中,维度为 (bs, num_query)。

3.3 Cross-Modality Decoder

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

3.4 Sub-Sentence Level Text Feature

之前工作中探究了两种文本 prompt,如下图。

句子层级表征将整个句子编码为一个特征,移除了单词间影响;单词级表征能够编码多个类别,但引入不必要依赖关系;为避免不相关单词相互作用,作者引入 attention mask,此为 sub-sentence 级表征,既保留每个单词特征,又消除不相关单词间相互作用。

3.5 损失函数

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

四、一些可视化结果

【计算机视觉 | 目标检测】Grounding DINO:开集目标检测论文解读相关推荐

  1. 【多模态】11、Grounding DINO | 将 DINO 扩展到开集目标检测

    文章目录 一.背景 二.方法 2.1 特征抽取和加强 2.2 Language-Guided Query Selection 2.3 Cross-Modality Decoder 2.4 Sub-se ...

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

    文章目录 摘要 背景 算法 3.1Feature Extraction and Enhancer 3.2. Language-Guided Query Selection 3.3. Cross-Mod ...

  3. DINO:目标检测benchmark COCO屠榜的正确姿势

    作者丨陈泰红(已授权) 来源丨https://zhuanlan.zhihu.com/p/478461226 编辑丨极市平台 不小心在paperwithcode看到,DETR系列的论文又屠榜了,在COC ...

  4. 详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    https://www.tinymind.cn/articles/120 [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算 ...

  5. 计算机视觉:基于YOLO-V3林业病虫害目标检测

    计算机视觉:基于YOLO-V3林业病虫害目标检测 卷积神经网络提取特征 根据输出特征图计算预测框位置和类别 建立输出特征图与预测框之间的关联 计算预测框是否包含物体的概率 计算预测框位置坐标 计算物体 ...

  6. 一文详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算法.理论.系统.体系结构),数学(信息检索.机器学习),工程学(机器人.语 ...

  7. 计算机视觉(十六):目标检测概述

    1 什么是目标检测 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置. 例子:确定某张给定图像中是否存在给定类别(比如人.车.自行车.狗和猫 ...

  8. 计算机视觉算法——基于Anchor Free的目标检测网络总结

    计算机视觉算法--基于Anchor Free的目标检测网络总结 计算机视觉算法--基于Anchor Free的目标检测网络总结 1. CornerNet 1.1 关键知识点--网络结构及特点 1.2 ...

  9. 计算机视觉六大技术:图像分类、目标检测、目标跟踪、语义分割、实例分割、影像重建..

    计算机视觉是使用计算机及相关设备对生物视觉的一种模拟.它的主要任务就是通过对采集的图片或视频进行处理以获得相应场景的三维信息,就像人类和许多其他类生物每天所做的那样. 计算机视觉既是工程领域,也是科学 ...

最新文章

  1. 科大奥锐思考题_科大奥锐光电效应测普朗克常数
  2. map中的迭代删除操作注意问题
  3. 首次登录kk服务器信息,kk云服务器设置
  4. access的ole对象换成mysql_ACCESS的Ole对象读取写入
  5. 如约而至,Java 10 正式发布:包含 109 项新特性
  6. 标准C语言第四版答案第十章,谭浩强C语言 第十章课后习题
  7. 【IntelliJ IDEA】设置字体大小
  8. Ubuntu 16下Linaro 交叉编译器的安装
  9. signature=4a882a48c4a4b2b41835e11b6fafa69f,ABB 38SC980002R375
  10. UE 简单存档读档功能
  11. Correct way to wait for VBLANK on windows 10 in windowed mode
  12. AutoCAD2019开发配置
  13. cesium添加自定义点位图片
  14. 华为A1路由器虚拟服务器,华为A1无线路由器的上网设置教程
  15. Apollo学习笔记1-ESD_CAN调试
  16. Freeswitch 默认配置
  17. 协同设计与传统设计方法的比较
  18. 聊聊GIS中那些坐标系(转)
  19. 电商那些年,我摸爬打滚出的高并发架构实战精髓(2017-03-27 YYQ DBAplus社群)
  20. docker+nginx搭建私有云笔记leanote

热门文章

  1. 中国农行携手曙光公司构建大数据系统
  2. matlab求分段函数最小值,用matlab如何求一个分段函数的积分?
  3. Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词
  4. 什么是负载,什么是网站负载,什么是网站负载均衡?
  5. Linux仿Ubuntu图标包,优秀的 Ubuntu 14.04 图标主题
  6. memcpy函数是怎么样实现的
  7. opj 多项式加法
  8. 基于手机信令数据的动态出行OD以及出行需求估计
  9. 833C语言程序设计与数据结构,2017年北方民族大学计算机技术833C语言程序设计与数据结构之C程序设计考研导师圈点必考题汇编...
  10. 反射内存卡学习及使用---rfm2g驱动安装