自学内容网 自学内容网

GLIP v1

GLIP v1
3.2.1 前言

1. 研究动机:Open-vocabulary Object Detection是必要的

  目标检测和分割一样,标注数据集都很贵,对于边边角角的类和层出不穷的新类,我们没有办法训练一个模型把这些都检测的很好。我们只能依赖于Open-vocabulary的目标检测模型,来把这些corner case都处理的很好。
  而如果想训练一个很强的Open-vocabulary的目标检测模型,就只能像CLIP一样,可以利用上亿规模的的数据集,而且还要把图片-文本对应关系和定位都学的很好。那么 重点就是使用图片-文本对数据集的高效使用 ,因为很好收集

2. 解决办法:phrase grounding+Object Detection+伪标签训练
  Vision Language任务(图片-文本多模态任务)里有一类定位任务Vision grounding,主要就是根据文本定位出图片中对应的物体(短语定位phrase grounding),这与目标检测任务非常类似,都是去图中找目标物体的位置。

  GLIP 的文章的出发点,就是将检测问题转换为短语定位(phrase grounding)问题,这样GLIP 模型就统一了目标检测和定位两个任务,可以使用更多的数据集。再配合伪标签的技术来扩增数据,使得训练的数据量达到了前所未有的规模(3M人工标注数据和24M图文对数据)。最后训练出来的模型GLIP-L,直接以 zero-shot 的方式在COCO 和LVIS 上进行推理,mAP分别达到了 49.8 和26.9,可见其性能非常的强。

  • groudning模型的输入是短语、短语中名词对应的框和图片。
  • 目标检测转为phrase grounding:通过prompt的方式将标签名转化为短语。例如coco有80个类别标签,将80个标签用逗号连接,并在短语前加“Detect:”来组成短句。这样做有两个好处:
    • 目标检测和phrase grounding的数据集就都可以拿来训练
    • 对于基础类 和其它各种类,可以都构建到 prompt 短语中一起检测,更加的灵活,可以方便的将任务迁移到开放式目标检测任务当中。
  • 伪标签训练(self training):
    • 将所有目标检测任务和phrase grounding任务的数据集(一共3M)全部拿来做有监督训练,得到GLIP-T(C)模型。
    • 将这个模型对网上爬取到的24M图像-文本对数据进行推理,得到bounding box。然后将这些bounding box全部作为GroundTruth(伪标签),这样就得到了24M的有监督数据。
    • 最在这24M的有监督数据上继续训练,得到最终模型GLIP-L。由此可见整个GLIP都是用有监督的方法进行训练的。

3. zero-shot推理效果展示
  直接像ViLD一样给出物体类别生成一句话(Prompt : person. bicycle.car. motorcycle…)或者是像phrase grounding任务一样生成短语“马路上有很多坑”(Prompt : there are some holes on the road),都可以将物体检测出来。
在这里插入图片描述

3.2.2 损失计算

  目标检测的损失函数由分类损失和定位损失组成。对于目标检测和Vision grounding而言,定位部分都差不多,二者的区别主要在于如何计算分类loss。因为 detection的标签是one-hot的类别单词,而Vision grounding的标签是一个句子。所以需要把二者的分类loss统一到一个框架下面,也就是:
L = L c l s + L l o c . L = L _{cls}+ L_{loc} . L=Lcls​+Lloc​.

  • detection分类损失计算:
    O = E n c I ( I m g ) , S c l s = O W T , L c l s = l o s s ( S c l s ; T ) . O=Enc_{I}(Img),S_{cls}=OW^{T},L_{cls}=loss(S_{cls};T). O=EncI​(Img),Scls​=OWT,Lcls​=loss(Scls​;T).

    1. E n c I Enc_{I} EncI​表示图片编码器(例如swin transformer),处理img之后得到N region embeddings,即 O ∈ R N × d O\in \mathbb{R}^{N\times d} O∈RN×d(n个bounding box,每一个的维度是d);
    2. N region embeddings → c l s − H e a d S c l s \overset{cls-Head}{\rightarrow}S_{cls} →cls−HeadScls​。其中分类头cls-Head由矩阵 W ∈ c N × d W\in \mathbb{c}^{N\times d} W∈cN×d表示,和N region embeddings相乘后得到 S c l s ∈ R N × c S_{cls}\in \mathbb{R}^{N\times c} Scls​∈RN×c;
    3. L c l s = l o s s ( S c l s ; T ) . L_{cls}=loss(S_{cls};T). Lcls​=loss(Scls​;T).:使用nms筛选这些bounding box,然后和GroundTruth计算交叉熵,得到分类损失。
  • Vision grounding分类损失计算:(其实和ViLD text分支一模一样)
    O = E n c I ( I m g ) , P = E n c L ( P r o m p t ) , S g r o u n d = O P T O=Enc_{I}(Img),P=Enc_{L}(Prompt),S_{ground}=OP^{T} O=EncI​(Img),P=EncL​(Prompt),Sground​=OPT

  1. 表示图片编码器 E n c I Enc_{I} EncI​处理img之后得到N region embeddings,即 O ∈ R N × d O\in \mathbb{R}^{N\times d} O∈RN×d;
  2. 文本编码器 E n c L Enc_{L} EncL​(比如BERT)处理Prompt得到text embedding,即 P ∈ R M × d P\in \mathbb{R}^{M\times d} P∈RM×d;
  3. 图像特征O和文本特征P相乘得到相似度结果 S g r o u n d ∈ R N × M S_{ground}\in \mathbb{R}^{N\times M} Sground​∈RN×M,即论文中说的region-word aligment scores。

上式中,M((sub-word tokens数量)总是大于短语数c,原因有四:

  • 一个短语总是包含很多单词
  • 一个单词可以分成几个子词,比如toothbrush分成了 tooth#, #brush
  • 还有一些添加词added tokens,像是“Detect:”,逗号等,或者是语言模型中的特殊token
  • tokenized序列末尾会加入token [NoObj]

  在训练的时候,如果短语phrase都是正例( positive match)并且added tokens都是负例negative match(added tokens和任何图片的物体都无法匹配),那就使用subwords(subwords也都是正例,此时标签矩阵由 T ∈ [ 0 , 1 ] N × c T\in [0,1]^{N\times c} T∈[0,1]N×c扩展为 T ∈ [ 0 , 1 ] N × M T\in [0,1]^{N\times M} T∈[0,1]N×M)。测试时多个token的平均pro作为短语的probability。

  使用上面的方式统一损失之后,就可以用grounding模型方法来预训练检测任务,从而使GLIP模型可以做zero-shot检测。之后作者使用统一过后的框架验证了在 COCO 数据集上的指标,发现是完全匹配的 ,因此从实验上也验证了自己的想法。

3.2.3 训练数据集
  • 上面三行A,B,C展示的是GLIP模型可以同时使用目标检测的数据集,例如Objects365Grounding的数据集GoldG(几个数据集的合并,还是很大的)。
  • GLIP-L:backbone为Swin-L模型,然后同时使用FourODs(目标检测有监督训练中能用的所有的数据集)、GoldG和图片文本对Cap24M数据集一起训练,此时数据集已经非常大了,足以训练出一个很强的模型。
    在这里插入图片描述

  Cap24M就是24M伪标签数据。生成的伪标签肯定有错误,但是实验表明,经过扩充大量伪标签数据训练得到的 GLIP-L 模型仍然会有性能提高。

3.2.4 模型框架

1. 总体框架

  如下图所示,由于所有数据集都是有标注的,所以模型是以有监督的方式进行训练。计算得到文本特征与图像特征的相似度之后,直接与 GT box计算对齐损失alignment loss即可(和ViLD-text分支一样)。这样就完成了文本和图像的特征融合,就可以进行zero-shot检测了。而定位损失也是直接与GT box计算L1 损失。

  模型中间的融合层(Deep Fusion)和LSeg的做法一样,都是为了使图像特征和文本特征进一步交互,使最终的图像-文本联合特征空间(joined embedding space)训练得更好(相似的embedding拉近,不相似的拉远),图像特征和文本特征被训练的更强更有关联性,这样后面计算相似度矩阵的效果肯定就更好。
在这里插入图片描述

2. Deep Fusion

  • 图片编码器是DyHead(L层),第一层输出图片特征表示为 O 0 O^0 O0
  • 文本编码器是预训练好的BERT(L层),第一层输出文本特征表示为 P 0 P^0 P0
  • X-MHA表示跨模态多头注意力模块。
  • 从结构图和公式可以看出,每一层输出的图文特征 O i , P i O^i,P^i Oi,Pi都会在X-MHA中进行交互,交互后的特征和原特征相加之后一起输入到下一层进行编码,得到下一层的特征 O i + 1 , P i + 1 O^{i+1},P^{i+1} Oi+1,Pi+1。
    在这里插入图片描述
    X-MHA模块中,图像特征和文本特征交互使用的是Cross Attention
    在这里插入图片描述
  • 分割和检测都属于稠密性任务(dence prediction)的一种,都需要同时分类和定位,所以很多方法是可以互相借鉴的,所以Deep Fusion也可以用到分割领域,比如GroupViTGroupViT只有在图像分支和文本分支的最后做了一下对比学习,如果在此之前做了一些Deep Fusion,可能效果更好。

3. 推理展示
上图右侧作者展示了两个非常难的任务:

  • 检测两个针管和一瓶疫苗。现有的数据集中似乎没有针管和疫苗这种类别。但是GLIP自己做出来对文本的理解,给出了疫苗和针管的检测结果。
  • 给出了一张图片的描述:“在古巴的playa esmeralda,从上往下俯瞰海滩,看到了漂亮的海绿色加勒比海”。这些描述都是一些比较抽象的概念,已经不太像是物体了,但是GLIP依旧做得很好。
3.2.5 对比实验
  1. COCO数据集结果对比。
    可以看到GLIP 模型直接做 zero-shot 检测的mAP已经达到了 49.8 ,如果再在 COCO 上进行微调,GLIP 的 结果能够超过当前最好的一些有监督方法。当然GLIP和其它模型的预训练数据集规模和一些trick是不一样的,但也足以看出GLIP的强大之处。
    在这里插入图片描述
  2. LVIS数据集结果对比在这里插入图片描述

原文链接:李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)_计算机视觉_神洛华-GitCode 开源社区 (csdn.net)


原文地址:https://blog.csdn.net/KIKI3666/article/details/142596291

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!