CLIP改进工作
回顾CLIP
1.对比学习预训练,文本和图片分别经过编码器得到特征。对角线上为n个正样本对,其他位置为n2-1负样本对。图片特征与文本特征建立了联系,此时模型从图片学到的特征可能不仅仅是图片本身的特征,还有文本的语义信息。openAI自建大规模的数据集WIT(web-image text)
2.zero-shot推理,prompt template。单词变成句子(预训练时是句子,避免distribution gap),再经过预训练好的文本编码器,得到文本特征。
3.测试图片经过预训练好的图片编码器,得到图片的特征。将图片特征与文本特征进行cos相似度计算,进行匹配。
后续出现了很多CLIP的改进工作:
分割领域(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 PASCAL−5i
-
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合起来。
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。
大模型时代,更好的问题是:
如何去使用这些已经训练好的模型,尽量不改变大模型参数,加入一些小模块,训练一些小模块的参数,从而应用于不同的下游任务。