赞
踩
论文:Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection
代码:https://github.com/IDEA-Research/GroundingDINO
出处:清华、IDEA
时间:2023.03.20
贡献:
模型设计三个重点:
ref:只输出一个物体
grounding 任务:输出所有提到的物体
GLIP 的方案很天才:
CLIP-based 和 Grounding 建模方式的区别:
Grounding 好在哪里:可以使用更多的 grounding data
关联和区别:
DINO :
模型设计:
如何处理不同的句子:
理解视觉新概念是视觉模型应该具有的基本能力,基于此,作者提测了一个强大的检测器 open-set object detection,能够检测任意的能用人类语言描述的目标
而且该任务也能和其他模型结合使用,有很大的潜力,如图 1b 所示,和生成模型结合起来就能进行图像编辑
开集目标检测的关键在哪里!!!
GLIP 方法将目标检测构建为了 phrase grounding 任务,并且引入 object region 和 language phrase 之间的对比学习来进行关联。展现出了很强的灵活性,可以同时适用于开集和闭集目标检测。
但 GLIP 的效果会被 Dynamic Head 检测器的效果限制,因为开集目标检测和闭集目标检测是强联系的,所以,本文作者认为一个在闭集目标检测上表现好的模型一定能在开集目标检测上表现好。
所以,本文作者基于 DINO 构建了一个开集目标检测器,且在目标检测上获得了很好的效果
Grounding DINO 相比 GLIP 的优势:
closed-set 检测器的三个重要模块:
如何使用语言模型将 closed-set 检测器扩展到 open-set 检测器:
到底什么时候来进行特征融合比较好呢:
Neck 结构:
Head:
很多现有的 open-set 目标检测器都会在新类别上来测试其效果,如图 1b 所示
但作者认为,只要是能描述的对象,都应该被考虑其中
本文将这个任务命名为 Referring Expression Comprehension(REC),即参照表示理解
作者在图 1b 的右侧展示了一些 REC 的例子
作者在下面三种数据集上进行了实验:
Grounding DINO 会在给定一个输入 (image, text) 的基础上输出多个 [object boxes, noun phrases] pairs
如图 3 所示,模型会根据输入的图像和文字描述 ‘cat’ 和 ’table’ 来框出输入图像中的 cat 和 table
目标检测和 REC 任务都可以使用这个 pipeline 来对齐,类似于 GLIP:
Grounding DINO 的结构:dual-encoder-single-decoder 的结构,整体结构如图 3 所示
对每个(image, text)pair 的操作过程如下:
右边一列就是 DINO 的结构,左边就是对文本的处理
给定(Image,Text)pair,从 Swin Transformer 的结构中抽取多级图像特征,从 BERT 的结构中抽取文本特征
抽取特征之后,将两组特征输入 enhancer 中来进行跨模态的特征融合,enhancer 结构包括多个 enhancer layers,其中一个如图 3 block2 所示。
如上图所示:
GLIP 在进行了特征融合后,就分别使用融合后的特征去进行特征预测了
但 Grounding DINO 在这里设计了 language-guided query selection 再次进行融合,为了更好的利用 input text 来指导目标检测,来选择和 input text 相关性更大的 features 来作为 decoder queries
pytorch 伪代码如 Algorithm 1 所示:
language-guided query selection module 的输出:
在 Language-Guided Query Selection 之后,还接了一个 cross-modality decoder,如图 3 block3 所示,进一步将 image 和 text 的特征进行结合
前面的 work 可以获得两种 text prompt,如图 4 所示
基于上面两种编码方式的问题,作者提出了 sub-sentence level 表达的方式,就是只对 sub-sentence 内的 word 进行关联学习,不会引入不必要的联系
作者在三种不同设置上进行了实验:
设置细节:
1、COCO Benchmark:
2、LVIS Benchmark
3、ODinW Benchmark
因为作者提出了 tight fusion 模式,为了验证该方式是否有用,作者移除了一些 fusion block,结果见图 6
所有模型都是使用 Swin-L 基于 O365 训练的,结果证明更紧密的 fusion 能够提升最终的效果
如果直接从头开始训练 Grounding DINO 的话,费时费力,所有作者尝试使用了训练好的 DINO 权重,冻结了两个模型共用的部分权重,微调其他部分的参数,结果见表 7。
结果表明,使用 DINO 预训练好的权重,只训练 text 和 fusion block, 就可以达到和重新训练一样的效果
git clone https://github.com/IDEA-Research/GroundingDINO.git
cd GroundingDINO/
pip install -e .
# 浏览器输入下面路径即可下载
https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
# wget 下载
mkdir weights
cd weights
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
cd ..
# 输出需要检测的类别:
CUDA_VISIBLE_DEVICES=7 python demo/inference_on_a_image.py \
-c groundingdino/config/GroundingDINO_SwinT_OGC.py \
-p weights/groundingdino_swint_ogc.pth \
-i images/1.jpg \
-t cat \ # 如果要检测多个类别的目标,使用.分开,如 -t cat.dog.bird
-o output
过程如下:
('cat. dog')
'cat. dog.'
,然后对输入文本进行分词,变成 {'input_ids': tensor([[ 101, 4937, 1012, 3899, 1012, 102]], device='cuda:0'), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0]], device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1]], device='cuda:0')}
,输入的 special_token 为 [101, 102, 1012, 1029],可以过滤不需要的 token,包括开始 101 和结束标记 102 和句号 1012 等。输入 bert 进行特征提取,这里的 mask 和 gilp 有一些区别,具体还没细看首先下载 coco 数据集,将数据集放到 dataset 路径下,然后执行如下命令,得到 mAP0.50:0.95 = 48.5
CUDA_VISIBLE_DEVICES=7 python demo/test_ap_on_coco.py \
-c groundingdino/config/GroundingDINO_SwinT_OGC.py \
-p weights/groundingdino_swint_ogc.pth \
--anno_path dataset/coco/annotations/instances_val2017.json \
--image_dir dataset/coco/val2017
IoU metric: bbox
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.48503
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.64419
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.52925
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.33947
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.51771
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.63410
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.38590
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.66831
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.73744
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.59104
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.77465
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.88776
Final results: [0.48502937223654774, 0.6441887991833478, 0.5292488429259078, 0.3394684576029584, 0.5177052819196549, 0.634102477342082, 0.38590050340039866, 0.668313126216868, 0.7374381132430312, 0.5910350651020582, 0.7746541080843435, 0.8877636350581676]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。