CLIP改进工作|沐神讲解

CLIP改进工作

回顾CLIP

1.对比学习预训练,文本和图片分别经过编码器得到特征。对角线上为n个正样本对,其他位置为n2-1负样本对。图片特征与文本特征建立了联系,此时模型从图片学到的特征可能不仅仅是图片本身的特征,还有文本的语义信息。openAI自建大规模的数据集WIT(web-image text)

2.zero-shot推理,prompt template。单词变成句子(预训练时是句子,避免distribution gap),再经过预训练好的文本编码器,得到文本特征。

3.测试图片经过预训练好的图片编码器,得到图片的特征。将图片特征与文本特征进行cos相似度计算,进行匹配。

后续出现了很多CLIP的改进工作:
img

分割领域(Segmentation)

与分类类似,分割是像素级别的分类。因此往往能用到分类上的技术都可以适用于分割任务。

分类用什么,分割也能用什么,所以就有新论文产生。

论文:LSeg:Language-driven semantic segmentation

在这里插入图片描述

有强大的zero-shot的能力。

模型总览:

在这里插入图片描述

与CLIP类似。

这篇文章虽然说是zero-shot,但它是有监督的训练。在7个分割数据集上一起训练出来。

最后的loss是预测的output和ground truth mask做的交叉熵。而不像CLIP一样是对比学习的loss

文章的意义就是将文本的一支(图中上面一支)加入到传统的分割pipeline中(下面一支),通过矩阵乘法,就把文本特征和图像特征结合起来了,在训练过程中就能学习到一些language aware的视觉特征。

从而在最后能通过文本的prompt来进行任意的分割。

与CLIP的关系:

  • 这里的文本编码器就是用的CLIP的那个文本编码器,自始自终文本编码器是冻住的,没有变动

  • 这里的图像编码器ViT+decoder,VIT是使用了VIT dit训练的参数。(没有用CLIP提供了VIT的参数,因为实验效果不好,并没有给出合理解释,认为是实验科学吧hhh)

  • 后面的Spatioal Regularization Blocks:在文本和图像特征融合又加了一些block,有一些可学习的参数,让达到的效果最好。

实验

数据集:

  • P A S C A L − 5 i PASCAL-5^i PASCAL5i

  • COCO- 2 0 i 20^i 20i

  • FSS-1000

这里的多少i是指,分成等分的多少份。如对第一个数据集,有1-5,5-10,11-15,16-20四个。把一个等份视为已知去做训练,其余的类别就是未知,因此可以做zero-shot和few-shot的实验。

一些失败案例:

在这里插入图片描述

这里把狗分给了toy,如果换成face等不相干的词,也会把狗分过去。这是因为,**CLIP其实不是真正在分类,而是计算一个近似值,和谁越近就分给谁。**狗显然不属于grass,因此就分给了其它不相干的类别。

论文:Group ViT(CVPR2022)

Semantic Segmentation Emerges from Text Supervision

上一篇讲到的Lseg的工作,他是有监督的,还是依赖于手工标注的segmentation mask

对于分割任务来讲,手工标注segmentation mask是非常昂贵的一件事。

这篇文章考虑如何真正做到用文本来做监督信号而不是手工标注来达到无监督训练?

模型架构

在这里插入图片描述

贡献:在原来ViT的架构上加入了grouping block的同时加入了可学习的group tokens.

局限性:因为最后group token的数量是8,所以这个方法最多可以检测到8类,再多就不行了。

在这里插入图片描述

用grouping的思想完成了无监督的分割。

局限性:

1.是图像编码器的结构,没有很好地利用dense prediction的特性。

2.关于背景类。设置了阈值,相似度没有超过该阈值的都视为背景类,不是一个前景。这一套方案移到PASCAL Context或者COCO数据集上问题就非常显著了。

分割小结

LSeg使用了CLIP的架构,也使用了language driven的方式,但是是有监督训练。

Group ViT没有使用CLIP的预训练参数,而是自己从头训练了一个分割模型,目标函数使用的是CLIP的目标函数。

目标检测领域

目标检测的网络复杂度一般比分类和分割要复杂一些。

ViLD:OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION

引言写的很好

想要做open-vocabulary的目标检测

在这里插入图片描述

一张图很快就讲述了这篇文章在解决什么问题。

在这里插入图片描述

让监督信号由CLIP产生。

在这里插入图片描述

训练及测试示意:

在这里插入图片描述

GLIP:Grounded Language-Image Pre-training

研究动机:怎么利用更多数据(没有精心标注数据),将图像文本对用上。

vision grouding任务:给一句话,将这句话中的物体和当前图片中的物体找出来。

将detection和phrasing grounding合起来。

img

Caption是self-training,用的伪标签peuodo label.

GLIPV2

考虑更多的情况,文本有更丰富的处理。

分割检测、VQA、Visual grouding、Visual captioning都放进来了。

思想和框架和GLIP差不多,但是加入了更多任务。

在这里插入图片描述

融合各种情况。

图像生成领域

CLIPasso:Semantically-Aware Object Sketching

clip+毕加索的奇妙组合

在这里插入图片描述

用最简单的简笔画保留物体语义和结构上的特征。

任务:给定一个图片,要求输出能保留特征的最简洁的简笔画。

以往的工作:在有标签的数据集上训练。

局限:

  • 这样模型的生成风格会非常受限。
  • 种类有限。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练过程:

在这里插入图片描述

关于贝兹曲线初始化:

为了得到一个稳定的输出,作者将图片放到训练好的Vision Transformer中,把最后一层的自注意力取个加权平均,生成个saliency map,看saliency map上哪些区域更显著,在显著的区域上去踩点。

局限性
  • 当图像有背景的时候,方法的性能大打折扣。本文中先用了U2Net的方法把前景抠出来把背景变成白色幕布,是一个2-step,而不是end-to-end的。
  • 简笔画不是按序列生成的,而是同时画的
  • 必须提前指定生成的笔画数。但实际上不同的图像可能适合的笔画数不同。后续可以考虑把笔画数也成为一个可学习的参数。

视频领域

CLIP4CLIP

An Empirical Study of CLIP for End to End Video Clip Retrieval

Video Retrieval:视频检索

视频与图像不同的是多了一个时间的维度。

结构图

在这里插入图片描述

原来的CLIP:一个文本特征对应一个图像特征。

现在由于是视频,是一个文本特征对应多个图像特征

如何处理呢?文章提了三种方案:

在这里插入图片描述

1.取平均。10个特征->1个特征。缺点:没有考虑时间上的顺序,如无法区分一个人坐下和站起来的动作,因为这俩动作平均下来都是一样的。

2.Transformer/lstm。把10个特征扔给lstm,融合了时序信息,得到1个特征。(对于Transformer来说要加入position encoding)

3.Tight type.说白了就是在做early fusion.把文本和图像帧的特征一起丢给一个Transformer。不仅实现了时序信息的融合,还实现了文本特征和视频特征的融合。

神奇的是,往往mean-pooling的方法效果最好。

实验

出来的时间很快,在CLIP出现后两个月就出了,但是怒刷了5个数据集:MSR-VTT,MSVC,LSMDC,ActivityNext,and DiDeMo.

insights:

1.在图像上表现好的CLIp模型在视频上也能表现的好

2.由于domain gap的存在,预训练好的CLIP在一些视频数据集上做一下post pretrain可能会更好。

3.3D patch linear projection和sequential similarity在检索任务上是有前景的

4.在视频检索上的CLIP对学习率是非常敏感的。

动作识别

ActionCLIP

A New Paradigm for Video Action Recognition

研究动机:

传统单一模态的架构是有监督的,而lable很难标注,lable space接近于无穷了。如何从海量的视频数据先去学一个比较好的特征,然后再去zero shot或者few shot地做下游任务,是最理想的。

在这里插入图片描述

改进:

1.CLIP处理的图像,这里如何处理视频?

处理方法类似于上一篇的CLIP4CLIP。

2.CLIP是无监督,每一个图像文本对是独立的,相似度矩阵只有对角线位置上是正样本,其余全是负样本。

这篇论文不是对角线的地方也有正样本(如不同的样本都对应跑步这个标签)。

cross entropy loss改成KL divergence,计算两个矩阵间的相似度。

在这里插入图片描述

  • 整体架构与CLIP类似

  • prompt:在原来预训练的基础上,通过加一些小的模块,通过训练这些小的模块,能够让训练好的模型参数能尽快迁移到这个下游任务上去

    • 文本的prompt(3类)
      在这里插入图片描述

      • 前缀
      • 完形填空
      • 后缀
    • 视觉上的prompt

      在这里插入图片描述

      • Pre-network Prompt:Joint——把时间和空间上的token放在一起
      • In-network Prompt:shift——加入了shift概念,放在ViT之间,增强模型持续建模的能力且没有额外开销
      • Post-network Prompt:把多个图像特征变成一个特征
        • 最下面一行视频->文本的方法也是那三种,与CLIP4CLIP一致。
实验

用CLIP的预训练参数结果会更好,但是文本的初始化似乎影响不大。

在这里插入图片描述

文本的prompt也影响不大。

在这里插入图片描述

fine-tune数据集规模:20w+(20w-30w)。

Pre-network和In-network性能有限,而Post-network性能提升很好,尤其是Transformer。

这里是与CLIP4CLIP不同的是:CLIP4CLIP结果中mean-pooling结果更好,而这篇论文Transformer更好。这是因为对于对于video retrieval来说,数据集较小,只有1-2w,还不足以学习到更好的参数,所以直接用没有参数的平均效果反而更好;而对于动作识别有几十w的数据集,能够学习到比较好的参数了。

在这里插入图片描述

zero-shot和few-shot能力:

在这里插入图片描述

zero-shot能力很高,甚至比一些之前方法做few-shot还高。

few-shot增长缓慢

其它领域

How Much Can CLIP Benefit Vision-and-Language Tasks?

也是一篇empirical study:实证研究

**contribution:**使用CLIP的初始化参数,在大规模的V&L的问题上做实验。把视觉编码器换成了CLIP模型

语音:AudioCLIP

Extending CLIP to Image,Text and Audio

找了视频数据集,因为视频中既有视频的帧,也有声音,也有文本标签。三个模态同时存在

三个模态之间两两跨模态进行对比学习:

在这里插入图片描述

最终也可以做zero-shot的语音分类。

3D:PointCLIP

CVPR2022

问题:3D数据集很小,怎么把CLIP学到的2D表征迁移到3D中呢?

在3D和2D之间搭建桥梁:使用3D点云投射到2D上

在这里插入图片描述

Can Language Understand Depth?

本文试图探究 CLIP 模型能否理解图像的深度。在之前的一些应用和改进工作中,都是在利用 CLIP 出色的语义识别能力,由于是通过对比学习的方式在大量的图像文本对上进行训练,因此语义识别能力是 CLIP 模型最强的地方。而对于 “深度” 这种抽象的概念,对比学习的方式很难建模。

在这里插入图片描述

直接将深度估计这个回归问题通过指定深度区间转化为分类问题,然后构造 prompt,去预测每个像素的深度。这里就与 LSeg 有点像了,都是一个像素级的分类问题。

将深度和文本理解一一对应,就可以将深度问题转化为文本理解问题了,巧妙地利用了CLIP模型。

在这里插入图片描述


结语:

对于CLIP模型地使用大概有三点:

1.改动最小的情形,直接用 CLIP 模型的预训练特征,与目标任务的特征进行融合(点乘、拼接等),还是按照目标任务进行训练。只是借用 CLIP 提取的比较好的特征。

2.CLIP模型当作teacher,做蒸馏,帮助我现有模型收敛更快。

3.不借助CLIP模型的参数,只是借助多模态对比学习的思想,我自己再训练一个预训练模型,自己定义我的正样本负样本对,可以zero-shot。

大模型时代,更好的问题是:

如何去使用这些已经训练好的模型,尽量不改变大模型参数,加入一些小模块,训练一些小模块的参数,从而应用于不同的下游任务。

### 关于CLIP改进工作汇报总结 #### CLIP模型基础及其应用进展 CLIP(Contrastive Language–Image Pre-training)是一个在大量图像-文本对上训练的大规模对比学习模型,展示了强大的基于提示的零样本视觉分类能力[^2]。该模型利用4亿对图像-文本配对数据进行训练,在多种下游任务中表现出色。 #### VeCap方法提升CLIP性能 研究者提出了通过视觉增强描述(VeCap)的方法来改善CLIP模型的表现。这种方法旨在通过对输入的数据进行特定处理,从而提高模型的理解能力和泛化水平[^1]。 #### 连续提示技术的应用 为了克服传统离散提示方式存在的局限性,一些研究人员探索了连续提示(Continuous Prompts)的技术路径。这类方法能够更好地适应不同的应用场景需求,并且已经在多个NLP任务中取得了良好的成果。对于以CLIP为基础架构的工作来说,采用连续提示优化策略同样带来了显著的效果增益,例如CoOp和CPT项目就成功实现了这一点。 #### 多视角特征融合机制 有研究表明,通过引入多视角间的交互作用并实施有效的特征融合方案,可以有效促进点云全局特征的学习过程。具体做法是先汇总各个视角下的局部特性形成整体表征,再据此构建各单个视角对应的自适应属性向量;最后借助残差链接的方式把这些新产生的信息反馈给原有的编码层结构之中,以此强化最终输出的质量[^3]。 #### 数据集扩展的影响分析 实验结果显示,在更大规模的数据集合如LAION-2B之上开展预训练活动有助于加速收敛速率的同时也提升了预测精度。即使只用了原有一半数量级的数据样本来完成相同质量级别的top-1准度目标也能达成预期效果。这一发现强调了扩充高质量标注资源库的价值所在[^4]。 ```python # 示例代码展示如何加载预训练好的CLIP模型 import clip model, preprocess = clip.load("ViT-B/32") image_input = preprocess(image).unsqueeze(0) text_inputs = clip.tokenize(["a diagram", "a dog", "a cat"]) with torch.no_grad(): image_features = model.encode_image(image_input) text_features = model.encode_text(text_inputs) logits_per_image, logits_per_text = model(image_input, text_inputs) probs = logits_per_image.softmax(dim=-1).cpu().numpy() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值