【论文视频】Clip:Learning Transferable Visual Models From Natural Language Supervision【多模态,对比学习,迁移学习】

在这里插入图片描述
CLIP:Contrast Language Image Pre-training

1. 四个问题

  1. 解决什么问题
    只预训练一个模型,在多个数据集上进行zero-shot推理
  2. 用什么方法解决
    利用自然语言来的监督信号 + 对比学习
  3. 效果如何
    clip的这个迁移学习能力是非常强的,它预训好的这个模型呢能够在任意一个视觉分类的这个数据集上取得不错的效果。
    其中最炸裂的一条就是在imagenet上的这个结果了。那 Clip呢在不使用ImageNet的训练集的情况下,也就是不使用任何一张的128万张图片训练的情况下,直接zero short做推理就能获得和之前有监督训练好的这个 ResNet-50取得同样的效果
  4. 还存在什么问题
    参考CLIP: Learning Transferable Visual Models From Natural Language Supervision的Limitations部分

2. 论文介绍

研究动机:zero-shot

那实验部分一开始呢作者先介绍了一下什么是zero shot transfer,因为这个才是clip这篇文章的核心和精华。所在那作者少不了呢上来还得再介绍一下他们为什么要这么做。就是他们研究zero shot的迁移的这个动机,其实呢大概总结下来就是一句话,就是说之前那些自监督或者无监督的方法,他们主要研究的是这种特征学习的能力,他们的目标呢就是去学一种泛化性比较好的特征,比如说我们讲过的MOCO, SimCLR,DINO,但即使你学到了很好的特征。

如果你想应用到下游任务的时候,你还是需要有标签的数据去做微调,所以这里面呢就还牵扯各种各样的问题,比如说下游任务不好去收集数据,比如说有distribution shift的问题,那我们如何能够训练一个模型,接下来就不再训练或者不再微调了,所以这就是作者研究zero shot迁移的这个研究动机。一旦你借助文本训练好了一个这个又大又好的模型之后,你就可以用这个文本作为引导去很灵活的做这种zero short的迁移学习,至少在分类上呢效果都非常的好。

Clip的预训练

在这里插入图片描述
呢那其实在训练的过程中,模型的输入是一个图片和文字的配对,比如这里图片里画的是一只狗,配对的文字呢也是说pepper啊是一只小狗,然后图片呢就通过了一个图片的编码器,从而得到了一些特征,那这里的编码器呢既可以是个resnet,也可以是个vision transformer。那对于这个句子来说,它也会通过一个文本的编码器,从而得到一些文本的特征。那假设说我现在每个training batch里都有n个这样的图片文本,对,也就是说这里有n张图片,这里有n个句子,那我们就会得到n个这种图片的特征,还有n个这样文本的特征,然后clip呢就是在这些特征上去做对比学习

那我们之前也提过啊对比学习非常的灵活,它就需要什么?它只需要你一个正样本和副样本的定义,其他呢都是正常套路,那这里什么是正样本,什么是负样本?
在这里插入图片描述
呢那其实再明确不过了,那这样配对的一个图片文本对啊它就是一个正样本,因为它描述的呢是一个东西,所以说这个特征矩阵里啊沿着这个对角线方向上的呢都是正样本,因为I1-T1,I2-T2这些本身就都是配对的,那剩下这个矩阵里所有不是对角线上的元素就都是负样本了也就是说这里呢我们是有n个这个正样本,然后有n方减n个负样本,那一旦有了正负样本,那模型就可以通过对比学习的方式去训练起来了,完全不需要任何手工的标注,但当然了对于这种无监督的预训练方式,比如说对比学习它是需要大量的数据的,所以说呢 Open AI还专门去收集了这么一个数据集,它里面呢有4亿个这个图片和文本的这个配对,而且这个数据啊应该是清理得非常好的,质量应该非常高。这也是clip这个预训练模型为什么能这么强大的主要原因之一,

Clip伪代码

在这里插入图片描述
那接下来呢作者就具体讲了一下clip所用的方法。之前我们在前沿的时候也大概讲了一下图1里就是这个 clip模型的这个总览图,那这里呢我们直接过一遍伪代码,应该就对clip这个方法呢有更加直观的了解了。首先呢就是你有两个输入,一个是图片的输入,一个是文本的输入,那这个图片的输入呢这里的维度也已经都说明了,但是n也就是这个 batch size和hwc分别对应的,比如说24×24×3,那文本的输入t呢这里头当然这个batch size也是n因为它跟这个 Image是配对的嘛,那这个l呢就指的是序列长度,那一旦你有了这两个输入,你就需要去通过这个编码器啊去得到对应的这个特征

那当然这里的编码器呢作者说它即使可以是一个ResNet,也可以是一个Vision Transformer。那对于文本来说呢它既可以是一个cbow就bag of words,也可以是一个text transformer,然后在你得到对应的这个图像特征和文本特征之后,一般后面会有一部这个归一化的操作,当然这里呢还牵扯到一个投射层,那这个投射层的意义呢主要就是去来学习一下如何从这个单模态然后变到这个多模态。所以作者这里说啊这是一个合并了啊一个多模态的一个特征,那当你投射完之后呢再做一次这个 L2归一化,你就得到了最终呢用来对比的这个特征IE和TE,那一旦你有了这两个特征,也就是说你有n个图像的特征,还有n个文本的特征,那皆想要做的呢就去算一下他们这个consine similarity。

那这个算得的相似度,其实也就是最后你要用来做分类的这个 logits。那一旦你有了你预测的这个 logits,那当然接下来呢我们就需要一个ground truth,然后你这个logits呢就去跟这个 ground truth啊做这个交叉商目标函数,从而算得最后的这个 loss。那这里我们可以看到它算这个 ground truth呢用的是这个 arrange function,那你得到值呢就是从1开始1234567一直到n,这个跟我们之前讲过的moco创建 ground truth的方式呢是不一样的,因为对于moco来说,正样本永远都是在第一位的。所以在moco那篇实现里,它的这个 ground truth呢全都是0,因为只有在0这个位置,也就是第一号这个位置是正样本。但是对于clip来说,我们之前在图一里也说过,它的这个正样本呢全都是在对角线上的,也就是说I1、t1、I2、t2所有这些在对角线上的元素才是正样本,所以他就用这种形式啊去创建这个 ground truth。

然后接下来呢是很中规中矩的啊算两个loss,一个是image的,一个是text,一个对称的loss,最后把两个loss呢加起来求个平均,这个操作啊在对比学习这边是非常常见的,从最开始的SimCLR到BYOL一直到最新的moco-v3,DINO这些工作全都是用的这种对称式的目标函数。所以说当我们看完这份伪代码之后,我们就会发现CLIP真的很简单,那真的跟之前的对比学习呢没有什么区别,它无非呢就是把单模态的正样本换成了多模态的正样本。

Clip的推理

在这里插入图片描述
那接下来就是说clip如何去做zero shot的推理了,这部分呢是非常有意思的,因为clip的这个模型经过用训练之后,它其实只能去得到一些这些视觉上和文本上的这些特征,他并没有在任何分类的任务上去做继续的这种训练或者微调,所以说它是没有这么一个分类头的,那如果没有分类头怎么去做推理?呢作者这里呢就想出来一个巧妙的啊利用自然语言的一种方法,也就是叫prompt template。我们这里先拿image net做个例子, clip呢就是先把image net里这1000个类,比如说这里的这个飞机、啊汽车、啊狗啊变成这么一个句子,也就是用这里的这些物体呢去替代这里的这个 object,也就是说啊把一个单词,比如说飞机变成了这么一个句子,这是一张飞机的图片,那像image net有1000个类,那其实这里呢就生成了1000个句子,然后这1000个句子通过我们之前预训练好的这个文本编码器,就会得到1000个这个文本的特征。

那我们为什么要做这么一部prompt template呢?其实直接用这里的这些单词啊去抽取这种文本的特征也是可以的,但是呢因为你在模型预训练的时候,你的图片呢每次看到的基本都是一个句子,如果你在推理的时候,突然把所有的这个文本呢都变成了一个单词,那这样就跟你在训练的时候看到的这个文本啊就不太一样了,所以效果就会稍有下降,而且怎么变成这边这个句子也是很有讲究的,所以clip这篇论文后面呢还提出了prompt engineering, prompt ensemble这两种方式去进一步的提高这个模型的准确率,而不需要重新训练这个模型。然后在推理的时候,不论你这时候来了任何一张照片,我只要把这张照片扔给这个图片的编码器得到了这个图片特征之后,我就去拿这个图片的特征去跟所有的这些文本的特征去做这个cosine similarity就去算这么一个相似性,那最后呢这个图像的特征跟这里的哪个文本特征最相似,我们就把这个文本特征所对应的那个句子挑出来,从而完成了分类这个任务,也就是说这张图片里有狗,这个物体是不是非常的巧妙,

而且呢其实当clip真正使用的时候,这里的这些标签啊其实还是可以改的,它不光是internet这1000个类,你可以换成任何的单词,这里的图片呢也不需要是image里的图片,它也可以是任何的图片,然后你依旧可以通过这种算相似度的方式去判断出这张图片里到底还有哪些物体,比如说啊你这里给一张三轮车的照片,然后你在上面的这个类别里呢也加上三轮车这个类别,那通过clip的这种zero shot的推理的方式,很有可能这张图片就能正确的被分类成三轮车。

实验结果

简洁版参考CLIP: Learning Transferable Visual Models From Natural Language Supervision的Experiments部分

zero-shot

在这里插入图片描述
这个图比较的双方呢一个就是做zero short的clip,另外一个就是在res50的特征上呢去做这种linear probe。

linear probe我们之前在讲对比学习的论文时候呢已经反复说过了,它呢就是把一个预训练好的模型呢冻住,只从里面去抽特征,然后就训练最后那一层那个 FC啊分类头层去做这种有监督的分类任务。那这里呢这个 res50呢是在imagenet上用有监督的方式训练好的一个模型,我们从中啊去抽特征,然后在这些下游任务上去添加新的分类头,然后在这个新类分类头上去做这种linear probe的微调。作者这里呢是把这种方式当成了基线,如果clip模型比它表现的好,它就列在上面是绿色的,这些啊全都是加号,意思就是说clip模型相比于这个极限提升了多少?那对于下面这些蓝色的呢就是说clip模型相对于基线要降低了多少的性能。首先我们可以看到的是啊在16个数据集上,也就是在大多数数据集上, zero short的clip模型了,都超越了之前这种拥有监督与训练好的res50。这个结果是非常惊人的,因为它真的证实了zero shot的这种迁移呢也是有效的,是可以广泛进行应用的,而不是光在images或者某些数据集上有作用。

然后呢作者这里还做了一些总结,就是对于这种普通的给物体进行分类的数据集来说, clip一般都表现的比较好,像这种车啊食物啊动作,或者是像cifar10,cifar100,image net这种普通的物体分类的数据,clip就能很好的去做这种zero shot的迁移,这个呢也比较好理解。因为如果你这个图片中有一个可以描述出来的物体那对应的那个文本里呢应该也有这个物体的描述,所以它俩呢就会匹配得非常好,clip模型呢对这种物体也会比较敏感,但是呢对于更难的一些任务啊更难的一些数据集,比如说dtd这种对纹理进行分类的数据集,或者说CLEVRC counts这种去给图片中的物体计数的任务,对于clip来说呢就非常的难,而且太过抽象了,所以clip模型在这些数据之上的表现呢就不好,因为对于这种难的任务,你完全不给他任何标签信息的话,这也有点强人所难了,所以作者最后呢也为clip打保了个不平。

few-shot

在这里插入图片描述
他说对于这种特别难的任务,如果只做这种zero shot的迁移呢可能不是那么的合理,有可能去做这种few shot的迁移呢会更合理。因为对于这种难的任务,比如说去给这种肿瘤做分类,而这种需要特定领域知识的任务,那即使是对于我们人来说,如果我们没有这个先验知识,我们也没法分类正确的,那为什么要去强求clip去在zero shot的时候能正确分类呢?

那既然作者提到了few shot,作者觉得对于这些更难的数据集few shot会比zero shot的衡量更合理,那为了自圆其说,作者肯定就得把few short的实验也都做了,所以在图6里呢作者就做了一下zero shot clip和few shot clip以及和之前few shot那些方法的一些比较。

具体来说呢对于之前的这些方法啊就是用不同的方法去进行模型的域训练,然后当你训练好这个模型以后,我们就把这个模型参数冻住,只从里面去抽特征做这种linear probe。那既然你是linear probe,你需要训练最后那个分类头了,所以你就需要下游数据集里呢有这种有标签的数据,这个呢就算是few shot,那对于clip模型也一样,作者这里呢就是把clip里面那个图片的编码器拿出来冻住,然后去做这种linear probe。图6的横坐标呢是说这个数据基地每一个类别里到底我们用了多少这个训练样本,那0呢就是说的zero shot什么都不用,所以是对应的呢也就是zero shout的clip。

别的这些方法呢因为没有和自然语言的这种相结合,所以他们就没办法做zero shot,所以他们最低呢也得从one shot开始,就是你怎么着至少也得用一个训练样本,然后呢从one shot到two shot,four shot最后呢到16shot,那图6的纵坐标呢说的是average score,也就是一个平均的分类准确度,那这个平均呢其实就是在刚才的27个数据集上去取得平均。当然这里呢其实是20个数据集,因为在有7个数据集里,它有些类的训练样本呢还不足16个,所以如果把那个数据集囊括进来的话,这个16这块的曲线呢就不好画了,所以作者就把那7个数据集踢掉了。所以这里呢就只是做了20个数据集的这个平均准确度,也就意味着这里的每一条曲线啊其实是20个数据集结果的1个合并,而并不单单是1个数据集上的结果。

在这里插入图片描述
那从这张图里呢我们可以观察到好几个有趣的结论,那首先呢就是看这条蓝色的曲线对应的呢其实是bit模型,bit呢也是Google的一篇工作叫big transfer,它主要就是为迁移学习而量身定做的,所以它算是迁移学习或者说few shot的迁移学习里表现最好的工作之一。那在这里呢这个 bit的模型是在ImageNet 21k上去做预训练的,数据集也比较大,所以说这条蓝色的曲线呢非常具有代表性,是一个很强的baseline。但是我们可以看到zero short的clip啊不用任何训练样本,直接就和你最好的这个 bit呢打成平手了,可见利用自然语言的这个威力

那第二个比较有意思点,就是说这条紫色的曲线就是我们对clip里那个图片编码器去做这种few shot的linear probe。我们可以发现在当这个训练样本只有1啊2啊或者4的时候,这种用了训练样本的future的方式,还不如直接去做zero shot clip,也就再次证明了用文本去做这个引导,这种多模态的学习是多么的强大。那最后一个观察呢就是随着这个训练样本的增多,那这个 few shot的学习的这个 clip,它的模型效果最后是最好,它不仅超越了之前的这些方法,验证了clip模型的强大,同时它还超越了这种zero上的clip,验证了作者刚才的说法:对于这种难的数据集来说,有一些这个训练样本还是非常有必要的

全部数据

在这里插入图片描述

那说完了zero shot又说完了few shot,那接下来很自然的就是要看一下,如果下游任务用全部的数据clip的效果会如何,作者呢就在3.2节里做了这些实验,之所以作者把这一节呢叫做特征学习因为之前啊不论你是无监督还是自监督这种表征学习的方法,都是先预训练一个模型,然后在下游任务上呢用全部的数据去做这种微调的。所以这里呢如果你用上了全部的数据,其实就可以跟之前的这些特征学习的方式去做公平对比了,那如果下游任务用全部的数据,就有很多种方式去衡量这个模型学到的这个特征啊好不好?最常见的两种方式,一种呢就是linear probe,另外一种呢就是fine-tune。

linear probe呢就是把预训练好的模型呢冻住,然后在上面再训练一个分类头。那对于fine-tune就微调来说,就是说把整个网络都放开,直接去做这种端到端的学习。微调呢一般是更灵活的。而且在你下游数据集比较大的时候呢,微调往往是要比这个linear probe的效果要好很多的但是在clip这篇文章里,作者说我就是要用linear probe,我不用fine-tune,这里呢它就列了几个原因,第一个原因呢就是说clip这种工作,它就是为了用来研究这种跟数据集无关的预训练方式的,那如果你的这个下游数据集足够大,然后我整个网络全都放开,在你这个数据集上去做微调的话,很有可能你预训练的那个模型并不好,但是在微调的这个过程中呢经过不断的优化,最后它的这个效果也很好,这样呢你就无法分别你这个预训练的方法或者预训练的模型到底好不好了

*而linear probe就是用这种线性的分类头(注意这里不是非线性,非线性会投影到另外空间 去)的方式,它们就不太灵活,整个网络大部分呢都是冻住的,只有最后这一层FC是可以训练的,那它这个可学习的空间呢就比较小。所以如果你这个预训练的模型没有训练好的话,即使你在下游任务上训练的再久,也很难优化到一个特别好的结果,所以说呢更准确的反映出这个预训练模型的好坏。那另外一个作者选用linear probe的原因呢就是因为linear probe呢不太用调参,因为clip这篇论文呢做了大量的实验,涉及了大量的数据集,那如果你是做这种端到端的微调,你只有太多可以调的这个超参和设计方案了,比如如果你这个下游数据集特别大,而且数据标注也质量比较高的话,你就希望你的这个学习率呢可能会大一点,因为你想让这个预训练的模型呢尽可能的去拟合你下游的这个数据集,那如果你下游任务的这个数据集呢特别小,你可能就得用特别特别小的这个学习率,因为很有可能稍一学习呢这个模型就过拟合了,总之呢你得为每个数据集都去量身定做,就是你得去搜这个超参,才能在各个数据集上呢表现好一点

但如果你是做linear probe,你的这个模型主体都已经冻住了,你就是抽特征,你唯一要学的呢就是最后那个分类层,所以它可以调的这个参数呢非常少,而且不论对于什么数据集或者不论对于什么任务,只要是分类, 那整个测试的流程啊就是一个正规化的流程,什么都不用改,所以大大简化了这个方法之间的对比。

在这里插入图片描述

那接下来呢作者就在这个图10里展示了一下结果,作者这里对比了很多的方法,从他们自己的这个 clip,然后到有监督的这种efficient,还有用了伪标签的efficientnet,还有这种弱监督的在Instagram上训练的模型,还有最近大火的这种对比学习自监督学到的模型,以及还有一些经典的有监督学习的这些基线。

模型左右两张图呢其实画的都是一个意思,它的横坐标呢都是说对于一张图片来说,它做一遍这个前向过程需要用多少的计算量,然后纵坐标呢就是说在很多数据集上啊最后的这个平均准确度,那所以说呢这个准确度越高,用的时间越短,它的这个效果呢就越好,所以说在这两张图里呢越靠左上角点的呢这个模型在精度和速度上的这个 trade off呢就做得更好。首先我们先看右图,作者呢就是把那27个数据上的这个效果呢平均了一下,然后这里我们可以看到啊 clip这里对应的这个红色五角星和这个红色的空心的五角星,效果都是最好的,比剩下所有的这些模型的效果呢都要好,这就再次证明了clip这个模型的强大之处,就不光是zero shot,还有few shot。那在用全部的数据去做训练的时候, clip照样吊打别的所有模型。

那左边这张图呢其实是为了跟之前的工作做一个公平对比,因为之前有个工作呢提出了这个12个数据集的一个集合,很多人呢就都在这12个数据集上去比这个平均的效果。那在这张图里呢我们可以看到用更大的模型就是用vision transform的这种clip呢效果还是很好,但是用残差网络的clip呢就比别的有些方法要差了,但作者之类想说的意思是呢这12个数据集呢跟Imagenet的关系呢很大,也就是说他们之间的关联性很高,所以如果你那些模型啊在imagenet这个数据集上做过有监督的预训练,那肯定它这个效果呢就会特别好,超过clip呢也就不足为奇了。

在这里插入图片描述
最后呢作者为了再次证明clip模型的这个无比强大,他就选择了之前在imagenet上表现最好的模型,也就我们之前常说的这个用最大的Efficinetnet,然后用noise student这种方式,也就用伪标签的方式去训练的一个模型。他在ImageNet上霸榜了快一年,有八88点几的这个 Top one的准确率。那在这里呢作者就是把clip的模型和这个模型呢全都冻住,然后从它里面去抽特征,然后最后去做这种logistic regression。然后作者发现啊在27个数据集里,clip呢在21个上面呢都超过了Efficientnet,而且很多数据集呢都是大比分超过,那在那些表现不行的数据集上呢啊 clip也只比Efficientnet稍微低一点,差距呢并不大。

数据分布偏移的情况(测试模型的泛化性,稳健性)

在这里插入图片描述

那讲完了zero shot,few shot,我用所有数据去衡量这个模型的好坏,也就是说正规的任务呢我们做完了,那接下来就要衡量一下这个模型其他的特性,那首当其冲的呢就是这个模型的泛化性,也就是它的稳健性。作者这里呢就在3.5节讲了一下,当你这个数据呢有分布偏移的时候,clip的表现会如何?当然这个图我们在讲前言的时候呢就已经提到过了,就是说当数据这个分布啊改变得非常厉害的时候,普通的一个模型呢它可能掉点呢就非常严重,但是对于clip训练出来的模型呢它就非常的稳健,他在所有的这种数据分布上表现的都非常好

与人对比

那接下来的这十几页呢其实全都是讨论和分析,然后因为clip呢在zero shot ,few shot,和在用所有数据上的表现呢都非常亮眼,所以说作者啊在这个第四章节就做了一个很有意思的事情,就是说既然你这么强,那你跟这个人比一比,看看有什么相似和区别,那以及我们还怎么能继续提高这个clip模型。

在这里插入图片描述

那接下来我们就看这个第四节啊和人的这个表现的对比。那这里呢作者其实就找了5个人,然后让他们去看这个 oxford IIT Pets这个数据集里的这个测试图片,这里面呢其实就都是一些宠物了,主要就是一些细分的狗啊和猫的这种种类,一共呢是37类。那对于这种zero short的情况,作者也做了强调,说这些参加实验的人呢是不能去网上进行搜索的,而且他们呢也没有给这些参赛者看过这些狗和猫啊对应的这种种类的事例图片,然后作者他们呢还做了这种one shot和two short的实验,那 one shot呢就是给所有的这些参赛者,每个种类看一张这种事例,图片告诉他啊这个种类的狗和猫到底长什么样,但是就一张,然后这种two shot呢就是看两张。

在这里插入图片描述
那我们来看看表二里啊这个对比的结果到底如何,我们呢就只看一下这一列就可以了。我们可以看到zero short clip比这个 zero short的人啊表现要好得多,那毕竟对于一个普通人来说,如果他对狗和猫的种类不是那么了解的话,那确实很难去做出这种zero shot的分类。比如对于我而言,我知道狗的种类可能两只手就数得过来,肯定是不认识37种这么多的狗和猫的。然后呢一旦给这个参赛者看过一张这个事例图片以后,他们的这个准确度啊一下就从50多提升到70多了,这个提升还是相当明显的,就说明人的这个学习速度还是非常快的。但如果你给这些参赛者呢每个种类再多看一张照片,就是这里的two shot的这种情况,结果你会发现这个准确度并没有提升,这个倒是挺有意思的,这说明人啊之所以在给一张图片以后,准确率能提升这么多,主要是他可以把常识,他之前的这种先验知识和这个示例图片呢联合在一起去做这种判断

那如果他没有系统的学过这些知识,就是说它的先验知识呢并没有增加的情况下,那你再多给他看1~2张图片,其实也是于事无补的,它并不会真的随着这个数据的增加准确率提升,但这里这个对比啊也不一定公平,因为毕竟只选了5个人作为参赛者,嘛它这个代表性不太够,而且数据集呢也就只做了一个,而且狗狗猫猫这些图片啊在网上可能非常多,所以说呢Clip的预训练数据集呢就有这些配对的图片文本对,所以说啊它的这个准确率才能这么高。那无论如何clip强大还是很强大的,

在这里插入图片描述
然后呢作者还做了一个有趣的实验,他呢就把这些宠物的种类呢都列了出来,看了一下针对每一个类啊这些模型的表现到底如何,然后蓝色的点呢对应的就是zero上的clip,橘黄色的点呢就对应的是one shot的人,还有这个绿色呢就对应着zero short的人,这里其实真实的数据点呢是这些点,然后这里的这个直线呢其实只是拟合过后的直线,只是为了方便读者看的。作者这里想说的意思呢就是说对于clip这个模型来说,难的类呢对于人来说也很难,对于clip来说简单的类呢对于人来说也简单,因为从图里来看,这些分类准确率比较高的这些类呢 ,clip和人的这个准确度都高,那对于分类准确度低的这些类来说,Clip和人的表现呢也都低,这个也是比较有意思,那很有可能呢还是一种现实生活中的这个数据分布有关系

那人类对于这种常说常见的宠物种类,他也自然就知道,就在它的常识范围里面,那 clip呢因为这些在数据集里肯定也出现过,所以说它的这个分类准确度呢也高。

那在第四章啊作者简单讲完了这个和人类对比的实验之后,作者还简单的讲了一个章节,就这些数据集之间有没有这种重叠的问题,因为肯定会有很多人质疑,是不是因为你这个收集的数据集太大了太好了,所以说它把这些下游的数据集啊全都包括了,所以才导致它的效果这么好,那作者这里呢也简单的做了一些去重的实验,最后的结论呢还是说clip,这个模型本身泛化性比较好,这里我就不过多介绍了,感兴趣的同学呢可以自己去看一下,

结论和总结

在这里插入图片描述
作者这里说啊他们的这个研究动机就是因为在NLP领域,现在利用这种大规模的数据去预训练模型,而且用这种跟下游任务无关的这种训练方式,比如说完形填空,但是两种工具的加持之下,NLP那边呢取得了非常革命性的成功,比如就是open AI他们自己的GPT3一系列工作,所以他们呢就想把NLP里的这个成功呢复制到其他的领域里去,比如说视觉,然后作者发现呢在视觉领域里用了这一套思路之后呢确实效果也不错,其实是特别好,所以他还顺带讨论了一下,有可能带来的这个社会的影响力,接下来呢作者用一句话总结了他们的方法,那就在预训练阶段呢他们做了这种对比学习,他们利用了这种文本的提示啊去做了这种zero shot的迁移学习。

最后的结论就是说呢在大规模的数据集和大模型的双向加持之下,clip的效果呢能跟之前精心设计的那些,而且是有监督训练出来的基线模型呢打成平手。但是作者在第六章也讨论了很多这个局限性,所以说作者这里说啊还有很多可以提升的空间。

在这里插入图片描述
那最后总结一下 clip这篇工作最大的贡献,在我看来就是他打破了之前这种固定种类标签的范式,意思就是说不论在你收集数据集的时候,还是在训练模型的时候,你都不需要像imagenet一样啊做1000类,或者像Coco一样做80类了,你直接就搜集这种图片文本的配对,然后用无监督的方式,要么去预测它的相似性,要么去生成它,总之呢是跟这种固定多少类别的范式呢说拜拜了。

这样的好处呢就是不仅在处理数据的时候更方便,训练起模型呢更方便,那最主要的就是在你做推理的时候呢更方便,甚至可以去zero short的啊做各种各样的分类任务,所以在clip这边工作出来之后,很快呢就一大批工作迅速跟进。那到现在为止,其实像物体检测、物体分割、啊视频动作识别、检索还有多模态,还有图像生成,基本上是每个领域都有利用clip的这个后续工作,它的影响力啊可见一斑

那如果我们按照沐神之前讲的那个如何判断一个工作的这个价值来说,clip在我看来呢应该就是100×100×100,从新意度的角度来说,clip打破了这种固定类别标签的做法,彻底放飞了视觉模型的这个训练过程,引发了一大批后续的工作,所以新意度呢无疑是很高的,那从有效性上来说呢那就更不用说了,做了这么多数据集,效果这么好,泛化性能也这么好,甚至在某些情况下呢比人的这个 zero shot的性能还好,那有效性呢也毋庸置疑是100分。

最后呢就是问题大小,那 clip呢用一个模型就能解决大部分的这个分类任务,而且是zero shot的去解决这个问题本身呢就已经很大了。更何况呢你只要利用这个clip训练好的模型,再在其他领域里稍微适配一下,就能把别的领域的任务也全都做掉。所以说它这个问题大小啊也是100分,clip模型的这个灵活性和它的高效性,能让我们看到一点啊这个人工智障变人工智能的希望。所以综合从这三个角度来看, clip都是一篇价值极高的论文。

3. 参考资料

CLIP 论文逐段精读【论文精读】:https://www.bilibili.com/video/BV1SL4y1s7LQ

CLIP: Learning Transferable Visual Models From Natural Language Supervision

4. 收获

  • Clip提出的目标:能不能只预训练一个模型,就可以在多个数据集上进行zero-shot的迁移学习。

  • 方法是:利用自然语言提供的监督信号 + 对比学习。
    模型学习到视觉和语义联合的特征,在数据分布偏移的情况下不会掉点太多,而其它模型就不行了,例如上面的数据分布偏移情况 。
    对比学习非常灵活,定义正负样本就可以训练了。那什么是正负样本?图片和文本配对的样本是正样本,其余是负样本。

  • 推理:推理的时候文本不是一个单词,进行处理prompt engineering和ensemble,解决文本的歧义性问题(更详细的参考视频),能够提升1.3%性能。

这个个基于prompt这个学习方法啊最近非常火,不论是在NLP还是在CV领域都非常的火。如果你还在找研究方向,其实这是一个不错的选择,因为它主要是在你做微调或者直接做推理的时候用的一种方法,而不是在于训练阶段,所以你不需要那么多的计算资源,但是呢因为效果好,所以说它的影响力呢也还是非常大的
那这个prompt是什么? Prompt翻译过来啊它有很多的含义,但是在这里呢它其实对应的这个中文含义呢是提示,它起到呢是一个提示的作用,也就是我之前一直说的这个文本的引导作用。那我们为什么要做prompt engineering和prompt ensembling?

  • openAI做的大模型和大数据的加持下,clip的效果才能这么好(4亿个图片文本对),普通人肯定是无法做的,只能当作前沿研究来看。
  • clip这篇文章提供了几个结论:
    1. 模型越大,迁移效果越好。
    2. 对难理解的数据集,few-shot的效果比zero-shot好,但本文的研究目标不在于此。
  • 但后续根据clip的工作有很多,例如:StyleCLIP,CLIPDraw等有趣的应用。
  • 朱毅老师讲视频都讲了1.5h,如何读论文的?(动机-相关工作及不足-提出自己的方法-训练-推理-实验结果-分析局限性-结论和总结等等…)

猜你喜欢

转载自blog.csdn.net/weixin_43154149/article/details/123106797