CLIP 论文逐段精读【论文精读】

00:06评价

        评价:工作clip呢自从去年2月底提出就立马火爆全场,他的方法出奇的简单,但是效果呢又出奇的好,很多结果和结论呢都让人瞠目结舌。比如呢作者说clip的这个迁移学习能力是非常强的,它预训好的这个模型能够在任意一个视觉分类的这个数据集上,取得不错的效果,而且最重要的是它是zero shot的,意思就是说他完全没有在这些数据集上去做训练,就能得到这么高的效果,作者这里呢做了超级多的实验,他们在超过30个数据集上啊去做了这个测试,涵盖的面啊也非常广,包括了这个 OCR,包括了这个视频动作检测,还有就是坐标定位啊和许多这个细分类任务,在所有这些结果之中,其中最炸裂的一条就是在imagenet上的这个结果了。那 Clip呢在不使用ImageNet的训练集的情况下,也就是不使用任何一张的128万张图片训练的情况下,直接zero short做推理就能获得和之前有监督训练好的这个 res50取得同样的效果。这在clip这片工作出来之前,很多人都认为这是不可能的事情。

01:31CLIP的模型 总览图

        接下来呢我还准备讲一些clip的这个后续工作,以及一些非常好玩的基于clip的应用,但是呢我感觉可能得先讲一下clip到底是什么,到底它是怎么去做这个 zero shot的推理的,才能让大家知道clip为什么能这么玩。那我们现在直接就来看文章的图一,也就是clip的这个模型总览图,我们这里呢就是先大概说一下它的流程,具体的细节呢后面还会讲到:

clip是如何进行预训练的呢?

        我们通过这个题目啊,也可以大概猜到一二,题目的意思是说呢通过这个自然语言处理这边来的一些监督信号,我们可以去训练一个可以迁移效果很好的视觉模型,所以很自然的,这是一个牵扯文字图片的一个多模态的工作,那它是怎么去利用这个自然语言处理来的这个监督信号

CLIP 论文逐段精读【论文精读】_第1张图片

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

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

CLIP如何做zero-shot推理?

        那接下来就是说clip如何去做zero shoot的推理了,这部分呢是非常有意思的,因为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真正使用的时候,这里的这些标签啊其实还是可以改的,它不光是imagenet这1000个类,你可以换成任何的单词,这里的图片呢也不需要是imagenet里的图片,它也可以是任何的图片,然后你依旧可以通过这种算相似度的方式去判断出这张图片里到底还有哪些物体,比如说啊你这里给一张三轮车的照片,然后你在上面的这个类别里呢也加上三轮车这个类别,那通过clip的这种zero shot的推理的方式,很有可能这张图片就能正确的被分类成三轮车。

        但如果像之前那种严格按照1000类去训练的这个分类头来说的话,那我们的模型啊永远都不会判断出这张图片是三轮车,最多也就是把它判断成是车或者是自行车这种,因为在Imagenet这1000个类里的类别,而且跟三轮车最接近的类,这个性质呢才是clip的强大之处,也是clip这个模型最吸引人的地方,因为他彻底摆脱了categorical label的这个限制也就是说不论是在训练的时候,还是在推理的时候,我都不需要有这么一个提前定好一个标签的这个列表了,任意给我一张照片,我都可以通过给模型去喂这种不同的文本句子,从而知道这张图片里到底有没有我感兴趣的物体,而且呢 clip不光是能识别新的物体,由于他真的把这个视觉的这个语义和文字的语义联系到了一起所以他学到这个特征啊语义性非常强,迁移的效果呢也非常的好。在open I的这个官网上,也就是clip的这个官方博客上,作者还举了这么个例子,就是说Imagenet这个数据集上之前训练的这个resnet101呢是76.2的准确率,然后对于clip训练出来的这个 VIT large呢也是76.2的准确率,这两个的准确率呢是一样的。

        但是当我们换个数据集,比如说换到因为是Imagenet V2或者image net rendition objectnet imagenet sketch或者imagenet adversary之后,我们就会发现之前这种严格按照1000类分类头训练出来的模型,它的这个准确率呢下降得非常快。再换到这种素描画的时候,或者这种对抗性样本的时候,准确度直接从70多啊掉到20多,甚至到对抗性的这种2.7,基本上就已经是在随机猜了,迁移的效果是惨不忍睹,但是对于clip训练出来的模型来说,它的这个效果呢始终都非常的高,没有什么下降,这也就从侧面说明了因为和自然语言处理的结合,所以导致clip学出来的这个视觉特征呢和我们用语言所描述的某个物体呢已经产生了强烈的联系

CLIP 论文逐段精读【论文精读】_第2张图片

        比如说这里的香蕉,不论是在这种自然图像里出现的香蕉,还是这种动漫里的香蕉,还是说这种素描的香蕉,或者是加过对抗性样本的香蕉,clip训练出来的模型呢都知道它对应的是香蕉这个单词,所以它能在domain(领域)变化的这么剧烈的情况下,依旧能识别出这张图片里画的是香蕉,准确的完成这个分类任务。

        当然文章里啊还做了很多其他分类的任务以及数据集迁移的效果呢都非常好,这里呢我们先暂时不说分类了,我们去看一些

其他基于clip的有趣的应用

StyleCLIP:那首先一个很有意思的工作就是这个 StyleCLIP,那从名字一看,很显然这就是一个clip加上style gan的一篇工作,文章的意思呢就是想通过这种文字上的改变,从而去引导图像的这种生成,比如说在他下面的这个 demo视频里,那通过改变不同的这个文字输入,就能改变右边生成的这个图像的各种属性。

CLIP 论文逐段精读【论文精读】_第3张图片

CLIP 论文逐段精读【论文精读】_第4张图片

        那么再接着往下看这些例子啊有一个更好的理解,比如说这里呢原来的图片是奥巴马的图片,然后给它加上文字的这种指示以后,他就把这个发型就变了。还有这里呢本来是Taylor Swift的照片,这里的文字指示是说啊去掉这个化妆,然后就直接一键卸妆了。这里的这个猫啊本来眼睛是闭上的,这里写出cute cat啊变得更可爱一点,所以这个眼睛一下就变大了。这篇论文的效果呢也确实非常好,所以是ICCV 2021的一篇口头报告论文

CLIPDraw:然后还有一篇论文叫CLIPDraw,也是利用clip这个预训练的模型呢去指导这个图像的生成,那这个论文的想法呢更是简单,他甚至都不需要进行模型的训练,他直接做几步这个gradient descent就可以生成这样的一些简笔画的图像了

        他在文章中说啊在一个普通的GPU上,往往不需要一分钟就能生成这样的一张图片。那我们这里可以看到这些生成的图也都很有意思,比如说这里是一个马在吃一个cupcake,它就真生成了这么一个动画的这种马,然后再吃一个cupcake,还有这里说生成一个这个3d的一个寺庙,那它这里画出来这个图啊还真有点3d那个意思。还有后面就是说全家去迪士尼乐园玩,他还真就是全家啊在一起,然后再像这个地图上一样去别的地方玩,还有最后的这个自拍啊一个相机,拍了这么多自己的脸,已经颇有这个抽象主义的风格了,如果真是个画家画的话,说不定能卖个好价钱。

目标检测:那当然除了去做这种图像生成的任务,clip肯定还能用来做更多的任务,物体检测和分割这两个主流任务肯定是跑不掉,所以在clip出来之后,很快也就是一个半月左右, Google呢就出了一篇啊利用clip去做这个物体检测的工作,当然这里的细节呢我就不细讲了,我们可以来看一下它的这个效果怎么样。 

CLIP 论文逐段精读【论文精读】_第5张图片

        那作者这里说如果你是用传统的这种目标检测的方法去做预测的话,它可能只能 告诉你这些都是玩具,也就是这里他所说的蓝色的啊这种基础类,但是当你利用了这种自然语言之后,你就摆脱了基础类的这个限制,你就可以随意发挥了,也就他们这里说的这个 open vocabulary detector,所以他们训练出来的模型呢就可以检测出这些新的类,也就是红色的这些类。比如说呢他不光可以知道这些玩具的是颜色,这蓝色的玩具,绿色的玩具,同时呢他还知道这些玩具具体所代表的这个物体类别,比如说这是一个玩具大象,这是,一个玩具鳄鱼,这是一个玩具鸭子,所以说你能得到的这个输出啊一下就丰富了不少。

视频检索:最后呢我想再提一个基于clip的例子,是用来做视频检索的,他的意思是说如果现在给定你一个视频,然后你想去搜这个视频里到底有没有出现过这个物体,出现过这个人,或者说出现过一些场景,那你就可以通过直接输入文本的这种形式去做检索

        我们接下来呢就来看一下它在监控视频上的这个检索表现,那这里呢它的文本的输入是说他想去找一辆卡车,而这个卡车上呢带有一些文字,就是带这个“odwalla”可能是一个什么品牌,然后呢 clip模型就把这句话变成这个文本的特征,然后把这个视频里的每一帧呢都变成这个视觉上的特征,然后一帧一帧的去跟这个文本特征做对比然后挑出相似性最高的那一帧给你展现出来,然后这里呢他还真就找到了这辆卡车,而且这个卡车呢是在侧面上印,有这些字母就这个“owdalla”,所以这个clip模型已经强大到甚至都可以直接去做OCR了。

        那下面这个例子呢它的文字输入说去找一辆白色的这个宝马车,然后他也能准确的去找一辆这个白色的宝马车,至于这个是凑巧,还是说clip这个模型真的已经知道宝马车的车头是长这样,那这个就不得而知了,但确实也是检索出来了。然后后面这个例子呢是说去找一个这个骑自行车的人啊穿的是蓝色的这个 T恤,同样啊也能非常准确的把这个人找出来。最后一个show出来的例子呢是去找一辆这个蓝色这个 smart这种小车,他也能准确把这辆小车找出来。当然了作者这里只是把这些成功的例子展现出来,我相信肯定是有很多不成功的例子了,但这个结果呢还是比较令人不安的。CLIP的作者团队呢应该也意识到了这一点,所以在他们的论文里他们还专门有一段针对这个监控视频的这个讨论。

        当然了clip还有很多好玩的应用,而且还有很多很好的这个后续工作,我这里呢就不一一列举了。

标题:利用来自nlp的监督信号去学习一个迁移效果很好的视觉模型

方法:利用nlp的监督信号

目的:迁移性,学习泛化性好的特征

摘要

        目前最先进的视觉系统:固定的提前定义好的物体类别集合,模型通过预测提前定义好的类别完成模型训练。这属于有限制性的监督信号,这也限制了模型本身的泛化性,尤其是要识别新类别物体的时候,就需要新的数据去训练新的模型。

这个固定的提前定义好的这个标签集合怎么理解?

        其实就是说 Imagenet 它有固定的 1000 个类,不多不少,那 Cifar 10 就有 10 个类, Cifar 100 就是 100 个类,那目标检测那边儿的Coco就是 80 个类,那语义分割的 city scapes就 19 个类,那视频那边儿的kinetics数据集就是有400 个类。

        总之为了简单起见,不光是收集数据集的简单性,还是说从模型训练的简单性来说,直接定义这么一个固定的提前定义好的这个标签集合,会大大的简化这个问题本身。但是也因为采用了这种有限制性的这种监督信号,从而也限制了模型本身的这个泛化性,尤其是当你需要去识别新物体类别的时候,该怎么办?那对于这些新的类别,难道每次都要去收集新的数据,然后重头训练一个新的模型吗?这样就很有局限性,就不好 scale了,就不好做大做强了。所以说作者就想到了另外一种方式,直接从自然语言这边,从这个文本里去得到一些监督信号,是一个看起来非常有前途的办法,因为它的这个监督信号涵盖的范围就太广了,只要是你语言描述过的物体,你就有可能让你这个视觉模型去识别到这个物体,而不仅仅是你提前定义好的那 1000 个类。然后作者接下来说,他们其实已经证实了,就是用一个非常简单的一个预训练的任务,就可以非常高效的,而且可扩展的去学习一些最好的图像表征。那这个任务具体是什么呢?其实就是说给定你一张图片,然后又给定你一些句子,然后这时候模型需要去判断哪一个句子,也就是说哪一个这个题目跟这个图片是配对的。那既然你要做这么一个配对的任务,那你当然就需要这么一个类似的数据集了。也就是说你的训练样本必须是一个图片文字的配对儿。所以说文章的作者又去爬了一个超级大的,有 4 个亿的这个图片文本配对儿的数据集。那有了这么大的一个数据集之后,我们就可以选择一种自监督的训练方式,就去训练一个大模型出来了。在 CLIP 这篇文章我们之前也提过,它是用多模态的对比学习去完成模型训练。那在这个预训练完成之后,自然语言就被用来去引导这个视觉模型去做物体的分类,也就是我们之前说过的这个prompt然后分类也不光局限于已经学到的这种视觉的这个概念,还能扩展到新的类别。从而说你现在学到的这个模型是能够直接在下游任务上去做这种 Zero shot 推理的。那为了验证这个模型的有效性,作者接下来就在超过 30 个不同的这个视觉的任务和数据集上去做了这个测试。然后作者发现这个模型的迁移学习效果,就是说对大多数任务来说,它的效果都是非常好的, CLIP 模型在不需要任何数据集的这种专门训练的情况下,能和之前一个完全用有监督方式训练出来的模型打成平手甚至还会更高。那为了让摘要看起来更具吸引力,所以说作者就在这里举了一个 image net 上,兵家必争之地上的这个效果,CLIP模型在不使用任何一张那 128 万个训练集的情况下,能跟之前一个有监督训练好的 rise 50 打成平手。这个结果在当时读起来是非常震惊的,已经足够吸引读者去读完整个论文了。最后作者说他们预训练好的模型和他们的代码都放到了这个链接里。但其实这里的代码只是可以用来做推理, OpenAI 并没有开源它真正的这个预训练的代码,那好在是他们开源了预训练的模型。所以像我们刚开始介绍过的一样,很快又激发了一系列好玩又有用的工作。

引言

        那接下来我们一起读文章的引言部分,文章一开始说直接从这种原始的文本数据里去预训练一个模型,已经在过去几年里在 NLP 领域取得了革命性的成功。比如说Bert,GPT, T 5 这些模型。那不论你是使用自回归预测的方式,还是使用这种掩码完形填空的方式,它都是一种自监督的训练方式。所以说它的目标函数是跟你的下游任务无关的,它只是想通过预训练得到一个非常好的非常能泛化的特征。那随着计算资源的增多、模型的变大、还有数据变得更多,这个模型的能力也会稳健的提升。那这一套系统说白了其实就是说文字进,文字出,它并不是在做一个什么特殊的分类任务,它的这个模型架构也是跟下游任务无关的。所以说当直接用在这种下游任务上的时候,我们就不需要费尽心思去研究一个针对那个任务的输出头,或者说针对那个数据集的特殊的一些处理了。那这里面最厉害的、最耳熟能详的模型,也就是 OpenAI 自己的这个 GPT 3,它也能够做分类、做翻译,还能帮你写邮件、写小说、写新闻,简直看起来是无所不能,而且在大多数任务上,它并不需要特定领域的这个数据,或者说只需要一点点的这个数据去做一点微调,就可以和之前精心设计过的那些网络取得差不多的结果。作者接下来说,这些鼓舞人生的结果证实了,在这种文本进文本出,利用自监督的信号去训练整个模型的框架下,这种大规模的没有标注的数据,其实是要比那些手工标注的,质量非常高的那种数据集,反而是要更好使的。但是在视觉领域,大家一般的做法还是在 image net这种数据集上去预训练一个模型,这就会让训练好的模型有诸多的限制。那 NLP 里的这套框架到底能不能用在视觉里,作者说从之前的工作看起来应该是没问题。然后接下来作者就讨论了一下之前的工作,他们直接从 99 年的工作开始讨论起,一直讨论到最新 21 年的一些工作,中间横跨了 20 年。因为讨论的工作比较多,所以说这里我就不细说了,CLIP 主要是跟这篇Li 2017 这篇论文是非常相似的,他们都做了这种 Zero shot 的这种迁移性的学习,但是在 17 年的时候,既没有Transformer,也没有这么大规模这么好的数据集,所以说这篇论文的结果就没有像 CLIP 这样这么亮眼。我们后面在表格里也可以看到,当时这个方法在 Imagenet 上做 Zero shot 只有十几的准确度,跟 Clip 的 76. 2差了 60 多个点。然后在有了Transformer,有了对比学习、完形填空这种强大的自监督训练方式之后,最近也有一些工作尝试把这个图片和文字结合起来,去学得一个更好的特征。这里作者列了三个工作,

  • virtex:用自回归的预测方式做模型的预训练
  • ICMLM:用完形填空的方式做预训练
  • Convirt:对比学习的方式预训练,但只在医疗图像上做了实验

这几个工作都是基于 Transformer 去做的,跟 clip 其实也已经非常像了。但具体的做法也都有一些区别,比如对于 virtex 来说,他们就用的是这种自回归的预测方式去做模型的预训练。那对于 ICMLM来说,很显然他们是用这种完形填空的方式去。做预训练。然后Convirt就跟 CLIP 已经非常类似了,但是他们只在医疗图像上做了实验。总之这三种方法都没有在模型或者数据上取得一个很大的规模。所以说就没有像 CLIP 模型一样一战成名。然后作者就反思了一下,说既然利用这个自然语言,那边的这个监督信号是一个很有前途的方向,那为什么在视觉里这一系列的工作就这么少?那其实可能还是跟这个圈子文化有关系。作者这里说,因为之前的那些方法没有这么大的数据集,没有这么多的算力,没有这么大的模型,没有这么好的自监督训练的方式。对它在标准的这个测试数据集上,比如说 image net 上的这个效果就非常的差。比如我们刚才说的这个工作,它在 Zero shot 的这种设定下就只有 11. 5 的这个准确度,但是在 Imagenet 上之前最好的表现方法都已经 88. 4。了。而且就算是不用 deep learning,就用传统的视觉方法,它的准确度也有 50 的准确度。当然这里的对比并不公平,因为这 88. 4 还有这 50 都是有监督的训练。但是这里的这个 11. 5 是 Zero shot 的,但因为效果实在太低,所以说没有实用的价值,大家去钻研这个方向的热情就会小很多。取而代之另一系列的工作就非常受人关注,就是说怎么去利用这种更弱的这种监督信号。所以之前Mahajan et al. (2018)这个工作他就提出了一个新的预训练的任务,也就是说他收集了一个Instagram的数据集。然后他去预测这个图片自身带的这些hashtag,那通过这种方法,你的数据集就可以变得非常大,因为每张图片都会自带一些hashtag,你不用去人工的标注,同时你这些 hashtag 也就可以想象成是一种自然语言的一种监督信号,它也是一个或者几个单词,它是有明确的语义含义的。然后另外还有一些工作,比如说这两篇工作Kolesnikov et al. (2019) and Dosovitskiy et al. (2020),就是去训练一个模型,然后去预测 JFT 300 million 这个数据集上所有的这个类别。但因为 JFT 300 mini 这个数据集非常大,它的类别数好像有18000,然后因为有这么多的类别,所以它的标注其实是比较noisy 的,这样也就算是一种弱的监督信号。但总之作者想说的是,这一系列的工作之所以更火爆,就是因为他们的性能会更好。这一系列的工作其实也就代表了一个实用主义的这个中间地带,其实那些作者也知道使用这种有限的,而且就是固定的这种特别好的标注数据是不好的,是有很大的局限性的。他们是非常想用这种取之不尽用之不竭的这种原始文字的,但是因为后一种方向目前的这个效果还太低,所以说没办法他们就走了这种中间的地带,就是用这种文本带来的弱监督信号去帮助有监督的模型取得更好的效果,但是有得必有失,作者这里就指出,虽然你取得了更好的结果,但是你还是有很大的局限性。之前的这些工作需要精心的设计,而且它们的监督信号还是 1000 个类或者 18000 个类,它并不能真的做到随心所欲去检测任何它想检测的类,而且这两种方式都是会用一个固定的 Softmax 分类头去做分类,所以说他们的输出都是固定,要么是 1000 选一,要么是 1 万八选一。如果再有新的类别,他就无能为力了。所以他们没有灵活的这种做 Zero shot的能力。接下来作者说之前这些弱监督的方法,也就是之前我们提到的这两个工作,和最近的这些借助于自然语言处理去学习这个图像表征的方法,也就是这些 virtex、ICMLM这些工作,他们的最大的区别在哪?他们最大的区别就是在他们这个规模上,因为从方法上来说,不论你是从这个 Instagram 的这个 hashtag 上去学习,还是从 JFT 300 million 这个数据集上,这个标签这一两个单词上去学习。其实也都算是一种从自然语言处理学习图像特征的方法,它们之间的区别并不是很大,关键就是在规模上。那这个规模其实就是说数据的规模和模型的规模。那像之前这些弱监督学习的方法,他们是在亿级规模的数据集上去训练他们的模型的,而且训练了加速器年,它这里为什么用加速器,是因为大家用来训练的这个硬件是不一样的,大多数人可能还是用GPU,但像 Google 就是用TPU,当然还有很多别的训练硬件了。所以作者这里把所有的这些硬件都统称为是加速器,反正都比 CPU 快,这个其实我们之前在讲 VIT 那篇论文的时候也提到过,当时作者说他们训练这个 VIT 模型用了 2500 个 TPUV 三天,也就是说如果你用一个 TPUV 三核的话,你训练这个模型需要训练 2500 天,那换算过来的话大概就是 7 年。他们当时也是在 JFT 300 million 这个数据集上去训练的。对,大概就是这里说的训练了七个 accelerate years,然后在这种亿级规模的数据集上去训练。但最近的这些方法,比如说跟 CLIP 最相似的这三种方法,他们其实只是在几十万张图片上去做了这个训练,而且就训练了几天,那跟之前那种亿级规模的数据集,而且还训练了几年的规模比起来,它的效果肯定是不太行的。那 CLIP 这篇论文的作者就是想告诉大家这些方法效果不行,不是因为它的方法不行,主要是因为规模没上去,只要规模上去了,效果好到你怀疑人生。所以作者接下来就说,那在这篇论文里我们就是 close 了这个gap,什么gap?就是之前这几个工作它的这个训练规模不够大,那我们这里就是把它的规模推到够大。具体来说,首先 CLIP 的作者团队就从数据出手。他们就先去收集了一个超级大的这个图像文本配对的数据集里面有 400 million 这个图片文本的配对,那这个规模就够大了,就跟 JFT 300 million 数据集是一个水平上的了,也就是说跟之前这些工作——这些弱监督学习的方式,他们在数据上打成平手了,那至于模型上,作者也尝试了从 Resnet 到 efficient net 到vision。Transformer。最大的他们用了 VIT large 这个模型,所以说模型的规模也提上去了。那在大数据加大模型双重的加持之下,作者说我们就提出来一个非常简单的方法叫CLIP,也就是 contrast language image Pre training。它其实就是我们之前说的这个工作 Convirt 的一个简化版本,但是效果非常的好。然后在模型方面,作者在视觉这边一共尝试了 8 个模型,从 Resnet 最后到vision Transformer,这里面最小的模型和最大的模型之间的计算量差了大概有100倍。然后作者最后发现这个迁移学习的效果,是跟这个模型的大小基本上是呈正相关的,就是说小的模型它的效果就差一些,那大的模型效果就好一些,你的模型逐步增大,你的这个迁移学习的效果也逐步增高。它是一个非常平滑的过程,所以你也是可以预料的。那如果在你接下来真实的应用中,你采取了更大的模型或者更小的模型,其实你也可以大概估算出来它的这个迁移学习的效果会是多少,这个性质确实是非常实用的。然后到引言到最后自然又是老套路,作者得开始卖结果了,那 clip 这篇论文的结果非常非常的多,而且效果都非常非常的好。所以说他就把最重要的几个点罗列了出来,那首先既然 CLIP 模型做的是这个迁移学习做的是这个泛化性能,你能迁移的这个任务越多,你的这个榜刷的越多,那自然就可以证明你的这个模型更有用。所以作者这里叫怒刷 30 个数据集。然后在这些数据集上, clip 一般都能和之前精心设计的那些

本文:从文本中获得监督信号,也就是只要用语言描述过的物体,就有可能让视觉模型能识别到。

证明:用一个很简单的预训练任务,就能非常高效的、可扩展的去学习最好的图像表征

预训练任务:配对任务,给定一张图片和一些句子,模型需要判断哪个句子和图片是配对的

数据集: 4亿的图文数据集

自监督的训练方式:多模态的对比学习来完成模型训练

        预训练完成之后,自然语言就被用来引导视觉模型做物体分类,也就是Prompt,而且Prompt不局限于学到的视觉概念,还能扩展到新的类别,从而,学到的这个模型可以直接用在下游任务上去做zero-shot推理。

引言

NLP效果非常好的框架:文本进文本出+利用自监督信号训练整个模型+原始数据

        直接从原始的文本数据中去预训练一个模型已经在过去几年里在nlp领域取得了革命性的成功(bert gpt t5等模型)不论是完形填空还是自回归预测的方式,都是一种自监督的预训练方式,所以目标函数是与下游任务无关的,只是想通过预训练得到非常好非常能泛化的特征。随着计算资源、模型变大、数据增多,模型的能力也会稳健的提升。这就是一套文字进文字出,并不是在做什么特殊的分类任务。模型架构也是和下游任务无关的,那么在直接用在下游任务上的时候,就不用费尽心思去研究针对任务的输出头或者针对数据集的特殊处理了。这里面最厉害的就是OpenAI自己的gpt3模型了,什么任务都能做,而且不需要特定数据,或者只需要一点点数据做微调,就可以和之前精心设计的模型取得差不多的结果。

        这些鼓舞人心的结果证实了,这种文本进文本出,利用自监督的信号去训练整个模型的框架下,这种大规模没有标注的数据是要比那些手工标注质量非常高的数据集,反而是要更好用的。但是在视觉领域,大家一般还是在imagenet这种数据集上去预训练一个模型,这就会让预训练好的模型有诸多的限制。

NLP这套效果非常好的框架能不能用在视觉里?根据过去的工作看,是没问题的

方式:zero-shot的迁移学习

局限:模型和数据上都没有很大的规模,所以效果没有非常拔群。下面三个工作都是基于transformer做的

  • virtex:用自回归的预测方式做模型的预训练
  • ICMLM:用完形填空的方式做预训练
  • Convirt:对比学习的方式预训练,但只在医疗图像上做了实验
为什么利用自然语言那边的监督信号是一个很有前途的方向,那为什么在视觉里这一系列的工作那么少呢
  1. 没有大的数据集
  2. 没有大模型
  3. 没有大算力
  4. 没有这么好的自监督训练方式

所以效果没有那么好。

        很好的标注数据预训练出来的模型有局限性;原始文字预训练出来的模型性能太低;所以用文本带来的弱监督信号去帮助有监督的模型取得更好的效果,但是虽然这种折中方法效果很好,但还是有很大局限性:之前的工作需要精心设计,而且监督信号只有1000个或者18000个类,并不能做到真正的随心所欲的去检测到任何想检测到的类,而且Mahajan et al. (2018) and Kolesnikov et al.(2019)这两种方式都是固定用一个softmax分类头去做分类的,所以输出都是固定的,对于新类别无能为力,也就是没有灵活的做zero-shot的能力

        如Mahajan et al. (2018) and Kolesnikov et al.(2019)等,之前的弱监督方法和如VirTex, ICMLM借助自然语言处理去学习图像表征的方法,他们最大区别在规模上(数据上和模型上)

CLIP解决了规模问题:超大的图文对数据集,超大的模型

作者发现,迁移学习的效果和模型大小正相关

如何证明迁移效果:刷更多的榜。

CLIP能和有监督训练的数据集打成平手,甚至效果更好

用linear probe证明CLIP学到的特征的有效性。

CLIP比imagenet训练出来的模型效果更好,计算上也更加高效

zero-shot的clip模型更加稳健:当效果和之前有监督imagenet上训练好的模型效果持平的时候,泛化性能却远远好于imagenet上有监督训练好的模型

CLIP:想法简单,实现高效,性能在各个数据集上都非常好,而且泛化和稳健性都不错,全面碾压之前的方法。



33:38方法



CLIP怎么预训练的?

利用自然语言的监督信号,去训练一个比较好的视觉模型

总结(统一)之前的工作+把规模做大看看效果

之前的工作:想用文本做监督信号。为什么以前做不好呢?因为NLP那边的模型也不是很好学,Topic models和n-gram的形式都很复杂,不好做跨模态的训练,但是随着transformer和自监督的训练方式兴起,NLP那边彻底革命了:deep contextual representation,就是具有上下文语义环境的学习方式,比如bert用的完形填空。

在自监督的学习范式下,现在nlp模型终于可以用这种取之不尽用之不竭的文本监督信号了,所以训练出来的模型又大又好,不仅简单而且泛化的也好,这就为多模态的训练铺平了道路。

我们为什么非要用这种自然语言的监督信号来训练一个视觉模型呢?

因为好处实在是太多了,其中两个最重要的:

  1. 不用再标注数据了,很容易提高数据的规模,而且因为现在的监督信号是一个文本,而不是文中说的n选1的标签了,那模型的输入输出自由度就大了很多
  2. 因为在训练的时候把文字和图片绑定在了一起,那么学到的特征就不再单单是一个视觉特征了,而是一个多模态的特征,当和语言联系在一起以后,就很容易去做zero-shot的迁移学习了。如果只是做单模态的自监督学习的话,无论是用单模态的对比学习(MOCO),还是单模态的掩码学习(MAE)都只能学到视觉特征,而无法和自然语言联系到一起,那还是很难去做zero-shot的迁移

结论:用文本的监督信号帮助去训练一个视觉模型是很有潜力的。

1、要做图片和文本配对的学习,就需要有一个足够大的数据集,里面有很多很多图片文本对。

过去的数据集都不够大,质量不够好,所以自己造一个数据集wit,4亿个图文对

2、预训练的方法,以及如何选择预训练的方法



39:20



视觉这边的模型都非常大,训练起来都非常贵。过去的方法只是训练区预测仅仅1000个类,就已经需要训练数年。

现在数据集更大,任务更难(从自然语言处理里直接去学open set of visual concepts,要去学开放世界里所有的视觉概念)

训练效率对于多模态预训练的成功至关重要,作者做了一些尝试:图像CNN,文本transformer,从头开始训练,任务是给定图片 要预测图片所对应的文本。

为什么要用对比学习?

如果给定一张图片,要去预测它对应的文本,是需要逐字逐句去预测文本的,这个任务就太难了。因为对于一张图片来说,可以有很多很多不同的描述,文本之间的差距是非常巨大的,如果用预测型的任务去预训练模型的话,就有太多的可能性了,模型训练的就非常慢。作者发现,如果把训练任务变成一个对比的任务,也就是说,只需要判断这个图片和这个文本是不是一个配对,这个任务听起来就简单了很多,因为不再需要逐字逐句的去预测文本了,只需要图片和文本是配对的就行,这个约束一下就放宽了很多。这个监督信号其实也更合理。

CLIP 论文逐段精读【论文精读】_第6张图片

如图2,仅仅把预测型的对比函数换成对比型的目标函数(黄线→绿线),训练效率一下就提高了四倍;训练效率随着约束逐渐放宽在成倍的提高,也就说明基于对比学习的训练方法,训练效率是非常高的。

  • 蓝线:基于transformer做预测型的任务
  • 黄线:词袋预测,不再逐字逐句的预测文本,文本已经全局化的抽成了一些特征,所以相应的约束被放宽了
  • 绿线:对比学习,进一步放宽约束,不再预测单词,只需要判断是不是图文匹配对

3、伪代码认识CLIP方法



43:39伪代码



CLIP 论文逐段精读【论文精读】_第7张图片

CLIP的伪代码真的很简单,和之前的对比学习没有什么区别,无非就是把单模态的正样本换成了多模态的正样本。



46:23一些有意思的细节



  1. 因为收集的数据集太大了,所以模型的训练不太会有overfitting的问题,所以实现起来就比之前的工作简单很多。比如训练CLIP的时候,对应的文本编码器和图片编码器都是不需要提前进行预训练的
  2. 在做最后的投射的时候,没有用非线性的投射层,而是用了一个线性的投射层。SImCLR moco这一系列论文的时候,证明非线性的投射层会比用线性的投射层,带来将近10个点的性能提升。但是作者在本文中说,在他们多模态的预训练过程中,他们发现线性非线性没什么大关系,他们怀疑:这种非线性的投射层non-linear projections只是适配纯图片的单模态学习的
  3. 因为数据集太大了,所以也不需要做太多的数据增强,本文中唯一做了的数据增强就是随机裁剪
  4. 因为模型实在是太大了,数据集也实在是太大了,训练起来太耗时,所以不太好去做调参的工作,所以在算对比学习的超参数的时候,温度这个超参数(非常重要,稍微调一调最后的性能就会有很大的改变)但本文作者实在是不想调,于是就设置成了一个可以学习的标量,所以这个参数直接在模型训练过程中就被优化了,而不需要当做一个超参数,最后再去调参

怎么训练这些模型



48:36训练



视觉这边:训练了5个resnet,3个vit

ResNet-50, a ResNet-101, and then 3 more which follow EfficientNet-style model scaling and use approximately 4x, 16x, and 64x the compute of a ResNet-50

ViT-B/32, a ViT-B/16, and a ViT-L/14

第二章总结:

  1. CLIP模型是如何预训练的
  2. 作者为什么用对比学习来预训练CLIP

实验



52:22实验



1、什么是zero-shot transfer

动机:

之前的自监督或者无监督的方法,主要研究的是特征学习的能力,目标是去学一种泛化性比较好的特征。但即使学到了很好的特征,如果想应用到下游任务上,还是需要有标签的数据做微调,所以还牵扯各种各样的问题:下游任务不好收集数据,分布偏移(Distribution shift) 【分布偏移在监督学习中一般指的是训练分布与测试分布不同,在离线强化学习中指的是训练策略与行为策略不一致。】那么如何能够训练一个模型,接下来就不在训练或者不再微调了呢?

一旦借助文本训练好了这个又大又好的模型,然后就可以用这个文本作为引导,去很灵活的做zero-shot的迁移学习,至少在分类上效果都非常好。

怎么用CLIP做zeroshot的迁移呢?

CLIP 论文逐段精读【论文精读】_第8张图片

  1. 当CLIP预训练好之后,其实就有两个编码器:图像和文本,都已经训练好了
  2. 这时候任意给一张图片,通过图片编码器,就会得到一个图片特征,
  3. 文本输入:一些感兴趣的标签单词,通过prompt engineering就会得到对应数量的句子,然后通过文本编码器,就会得到相应的文本特征
  4. 所有文本特征和图片特征算余弦相似度,得到的相似度还会通过一层softmax,得到一个概率分布
  5. 哪个概率最大,也就是哪个相似度最高,大概率就是在描述这张照片。此时句子中包含的物体就是图片中的物体了

如果给imagenet里所有的图片去做zeroshot的推理,去测试模型的效果如何,那么1000个类应该生成1000个句子,如此去与图像特征算相似度,得到结果。当然,这个过程是可以分批次进行的,所以CLIP的推理还是非常高效的,不会非常慢。

对比结果



55:58





57:09提示工程



基于prompt的学习最近非常火,无论是在CV还是NLP都非常火

主要是在做微调或者直接做推理的时候用的一种方法,而不是在预训练阶段,所以不需要那么多的计算资源,而且效果好,所以影响力非常大。

在这里,prompt指的是文本的引导作用。

为什么要做prompt engineering和prompt ensembling?

  1. polysemy歧义性:一个单词可以同时有很多含义。在做图文匹配的时候,如果每次只用一个单词(标签对应的一个单词)去做文本的特征抽取,就可能会面临这种问题。比如在imagenet数据集里同时包含两个类:construction cranes and cranes that fly,在不同的语境下crane的含义是不同的,建筑环境中指的是起重机,作为一个动物指的是鹤。这个时候就会出现歧义了,算得很有可能就是错的。别的数据集也可能有这种问题。
  2. distribution gap:做预训练的时候,匹配的文本一般都是一个句子,很少是一个单词。可是在推理的时候,如果每次都进来的是一个单词,那么可能就会存在distribution gap的问题,抽出来的特征可能就不会很好。

基于上面两个问题,作者就想了一个很简单的方式:做了一个提示模板prompt template “A photo of a {label}.”把标签变成一个句子。已经是个句子了就不会出现distribution gap的问题。因为这个模板的含义是:这是一个什么的图片,所以这个标签多指的是名词,就能解决歧义性的问题了。

作者发现用了这个提示模板之后,准确度提高了1.3%。

prompt engineering不光可以做提示模版,还可以做很多事情:如果提前知道一些信息,这对zeroshot的推理是非常有帮助的。For example on Oxford-IIIT Pets, using “A photo of a flabelg, a type of pet.” to help provide context worked well. Likewise, on Food101 specifying a type of food and on FGVC Aircraft a type of aircraft helped too. For OCR datasets, we found that putting quotes around the text or number to be recognized improved performance. Finally, we found that on satellite image classification datasets it helped to specify that the images were of this form and we use variants of “a satellite photo of a flabelg.”.

prompt ensembling,多用一些提示的模板,做多次推理然后把结果综合起来,ensemble一般都会得到更好的结果。论文中显示用了80个提示模板做ensemble。

方法部分总结:

  1. 数据集
  2. 怎么选择模型
  3. 怎么做预训练
  4. 怎么做zeroshot推理

到这里,结果已经很好了,加上点讨论,加上个结论就是个八页的中规中矩的论文投稿,但是作者又做了十页的效果展示:

在27个数据集上,衡量了CLIP做zeroshot的迁移的效果,如图所示:

CLIP 论文逐段精读【论文精读】_第9张图片

Zero-Shot CLIP

Linear Probe on ResNet50作为基线:冻住预训练好的模型的主干,只用它抽特征,就训练最后一层的FC分类头层去做有监督的分类任务。这里的res50是用有监督的方式训练好的一个模型,从中去特征,然后在这些下游任务上去添加新的分类头,然后在这个新的分类头上去做linear probe的微调

绿色的都是相比于基线的提升

蓝色的是相比于基线的性能降低

  • 证实了zeroshot的这种迁移,也是有效的,是可以广泛进行应用的,而不是光在imagenet或者某些数据集上有用
  • 对于普通的给物体进行分类的数据集来说,CLIP一般都表现的比较好。因为图片中有可以描述的物体,那么对应的文本中应该也有这个物体的描述,所以图文就会匹配的非常好,CLIP模型也会对这些物体非常敏感。但是对于更难的一些任务,更难的一些数据集,比如DTD这种对纹理进行分类的数据集对于CLIP来说就非常难,非常抽象了,所以CLIP的表现就不好,因为对于难的任务来说,如果不给任何标签信息,这也有点强人所难了。文中讲到,对于特别难的任务,如果只做zeroshot的迁移,可能不太合理,有可能做fewshot的迁移会更合理,难任务比如给肿瘤分类,这种需要特定领域知识的任务,即使是对于人来说,如果没有先验知识,人类也是没法分类正确的。

证明对于更难的数据集,fewshot会比zeroshot的衡量更合理



01:06:25few shot



CLIP 论文逐段精读【论文精读】_第10张图片

  • 横坐标表示每个类别里用了多少训练样本
  • 纵坐标是平均的分类准确度(27个数据集的其中20个数据集上的平均)

zeroshotCLIP:0个训练样本,别的方法因为没有和NLP结合所以没法做zeroshot,所以最低也得从oneshot开始

fewshotCLIP:预训练之后冻住模型参数,只从里面抽特征做这种linear probe,训练最后的分类头,所以需要下游数据集里有这种有标签的数据

1、linear probe CLIP:把CLIP的图片编码器冻住做linear probe

2、之前的方法:BiT-M、SImCLR、resnet50。

观察到的几个有趣的结论:

  1. 蓝色曲线:BiT是为迁移学习量身定做的,算是迁移学习或者说fewshot迁移学习里,表现最好的工作之一,也是在很大的数据集imagenet21k上做的预训练,是一个很强大的baseline。但是我们可以看到zeroshotCLIP,不用任何训练样本,直接和最好的bit达成平手,可见利用自然语言的威力。
  2. 紫色曲线:对CLIP的图片编码器,做fewshot的linear probe。我们可以发现,当训练样本只有1、2、4的时候,这种用了训练样本的fewshot方式还不如直接zeroshot的CLIP。也再次证明了用文本做引导的多模态学习是多么的强大。
  3. 随着训练样本的增加,fewshot学习的CLIP模型效果最好。不仅超过了之前的方法,验证了CLIP模型的强大,同时还超越了zeroshotCLIP,验证了作者的说法:对于难的数据集来说,有一些训练样本还是非常有必要的。

下游任务用全部的数据,CLIP的效果会如何?



01:09:49



3.2节做了这个实验,之所以命名为表征学习,因为之前不论是无监督还是自监督的表征学习,都是先预训练一个模型,然后在下游任务上用全部的数据去做微调的。所以如果这里用上了全部的数据,那么就可以和之前特征学习的方式去做公平对比了。

如果下游任务用全部数据,那就用很多方式去衡量模型学到的特征好不好,最常见的两种方式:

  1. linear probe:把预训练好的模型冻住,在上面再训练一个分类头,
  2. finetune:把整个网络都放开,去做端到端的学习。微调一般是更灵活的,而且在下游任务数据集比较大的时候,微调往往是比linear probe的效果好很多的

在本文中,作者选用了linear probe而不是微调,原因如下:

  1. CLIP这种工作就是为了研究和数据集无关的预训练方式的,如果下游数据集足够大,整个网络放开在这个数据集上做微调的话,很有可能预训练的模型并不好,但是在微调的过程中经过不断地优化,最后的效果也很好,这样就不能判断预训练的模型到底好不好了。而linear probe的方式就不太灵活,整个网络大部分是冻住的,只有最后一层fc可以训练,可学习的空间就比较小,所以如果预训练的模型没有训练好,即使在下游任务上训练的再久,也很难优化到一个特别好的结果
  2. 因为linear probe不太需要调参,CLIP这篇论文做了大量的实验,涉及了大量的数据集,如果做端到端的微调,就会有太多可以调的超参和设计方案了。比如如果下游数据集特别大,而且数据标注质量也比较高的话,就会希望学习率大一点,因为想要这个预训练模型尽可能的去拟合下游的数据集;如果下游任务的数据集特别小,可能就需要特别特别小的学习率,因为可能稍一学习模型就过拟合了。总之就是要为每个数据集量身定做,得在各个数据集上去搜集超参数,才能在各个数据集上表现好一点。如果是linear probe因为模型主体已经冻住了,只是抽特征,唯一要学习的就是最后的分类层,所以可以调的参数非常少,所以不论是什么数据集什么任务,只要是分类,整个测试的流程就是一个正规化的流程,什么都不用改,所以大大简化了方法之间的对比。

CLIP 论文逐段精读【论文精读】_第11张图片

如图10,左右两张图画的是同一个意思:横坐标是对于一张图片来说,做一遍前向过程需要用多少的计算量;纵坐标是说在很多数据集上,最后的平均准确度。也就是准确度越高,用的时间越短,效果就越好,越靠左上角的模型,在精度和准确度之间的权衡就做的更好

  • EfficientNet-NoisyStudent:用了伪标签的efficientnet
  • Instagram-pretrained:弱监督的在Instagram上训练的模型
  • BYOL、MOCO:大火的用对比学习自监督学到的模型
  • Vit、Bit、Resnet:经典的有监督学习的基线模型

右图:作者把27个数据集上的效果平均了一下,可以看到CLIP-vit和CLIP-resnet的效果都是最好的,证明了CLIP不光是zeroshot和fewshot效果好,在用全部数据做训练的时候,CLIP照样是效果最好的。

左图:为了和之前的工作做一个公平对比,在12个数据集上比平均的效果,我们可以看到,用更大的模型也就是用vit的CLIP效果还是很好,但是用resnet的CLIP就比不上别的方法了。作者说这12个数据集和imagenet的关联性很高,所以那些模型如果在imagenet上做过有监督的预训练,那肯定它的效果就会特别好,超过CLIP也就不足为奇了。

CLIP 论文逐段精读【论文精读】_第12张图片

最后作者为了再次证明CLIP模型的强大,它选择了之前在imagenet上表现最好的模型:用最大的EfficientNet L2,用 NS 伪标签的方式去训练的一个模型,它在imagenet上霸榜了快一年,有88%的top-1准确率。

这里就是把CLIP的模型和EfficientNet L2 NS模型全都冻住,从他们里面抽特征,最后去做逻辑回归。然后作者发现在27个数据集里CLIP在21个上面都超过了EfficientNet L2 NS,而且很多数据集都是大比分超过,在那些表现不行的数据集上CLIP也只比EfficientNet L2 NS稍微低一点,差距并不大。

zeroshot、fewshot、全部数据去衡量模型的好坏,也就是说正规任务做完了,接下来就要衡量这个模型其他的特性



01:15:34泛化性



稳健性

3.5节,当数据有分布偏移的时候,CLIP的表现如何?

CLIP 论文逐段精读【论文精读】_第13张图片

当数据分布改变的非常厉害的时候,普通的模型掉点就非常严重(第一列数据),但是CLIP训练出来的模型就非常稳健,在所有的数据分布上都表现的非常好(第二列数据)



01:16:41



和人的表现对比

找了5个人,让他们看Oxford IIT Pets数据集里的测试图片。

CLIP 论文逐段精读【论文精读】_第14张图片

Zero-shot CLIP比Zero-shot human表现好的多

One-shot human一旦给人看过一张图片,准确度一下就从50提高到70了,这是因为人可以把新知识和过往的知识联系起来去做判断,但是Two-shot human的结果并没有提升,说明如果过往知识没有增加,只是多看一两张图是没有用的。

CLIP 论文逐段精读【论文精读】_第15张图片

另一个有趣的实验:把宠物种类列出来,看针对每个类模型的表现如何。

证明:对CLIP难的对人也难,简单的同理。人对常说常见的种类,就在常识范围内所以分类准确度就高,CLIP也是。



01:20:05去重



q去重实验

因为会产生疑问:数据集重叠的问题,会不会收集的数据集太大了,包含了下游任务的数据集所以效果才那么好

去重实验证明了:确实是CLIP本身的泛化能力强



01:20:41第六章



不足之处,分析局限性

  1. CLIP在很多数据集上平均下来看,是可以和一个比较简单的机械模型(imagenet上训练的res50模型)打成平手的,但是在大多数据集上这个res50根本不是sota,如果要和最好的模型比,这个res50要比sota差了很远。CLIPzeroshot76.2、noisy student88、vit MAE90。所以CLIP的性能强,但也没有强到不可一世的地步,但是CLIP如果加大数据集或者加大模型,性能还是能继续提高的。但是作者预估,如果要达到最好的性能,可能要在现在的训练量上再乘1000。即使对OpenAI来说用现有的硬件,也是没法训练的。如果想通过扩大CLIP规模的方式去弥补十几个点的差距,让CLIP在所有数据集上都达到sota的效果,那肯定需要有新的方法在计算和数据的高效性上有进一步的提高。
  2. CLIP在有些数据集上的zeroshot的结果并不好,比如在细分类fine-grained classification数据集上CLIP的效果是低于有监督训练res50的基线网络的;CLIP还无法处理特别抽象的概念(数一数图片中有多少物体;在监控视频里区分当前帧是异常还是非异常)。因为CLIP很擅长分类物体但是完全不了解什么叫异常,所以作者说相信在很多领域CLIP的zeroshot性能其实是跟瞎猜一样的。CLIP并不是一个万能的方法。
  3. CLIP虽然泛化做的很好,对于很多自然图像的分布偏移,模型推理还是相对稳健的,但是如果在做推理的时候,数据真的和你训练的数据差的非常远(数据已经out of distribution了),那CLIP的模型泛化照样也很差。
  4. 虽然CLIP是做zeroshot的分类任务,但还是从给定类别中去判断。相比而言直接去生成图像的标题是更灵活的方式,一切都是模型在处理,全都自动化,可以生成一个新的输出,而不是像CLIP一样,得给它一个新的类别,然后它告诉你和图片是否类似。可惜受限于训练资源,他们没法训练一个图像题目生成的基线网络。以后可能会有一个简单的想法:把对比学习的目标函数,和生成式的目标函数合在一起,这样就有可能把两个方法的优势结合在一起:既有对比学习训练模型的高效性,又有生成式模型的灵活性。
  5. CLIP对数据的利用不是很高效,还是跟别的深度学习的网络一样,需要大量的数据投喂。CLIP跑了128亿个图片,要把所有数据看一遍要405年,如果能减少数据用量当然很好:1、做数据增强 2、自监督 3、伪标签
  6. 作者说虽然我整篇文章都在说CLIP做zeroshot效果最好,但是我们在研发CLIP的过程中,为了跟他人做公平的比较,也为了得到一些回馈。所以我们往往是在整个测试数据集上去不停地做测试,比如CLIP这里imagenet上分这么高,并不是第一次训练出来分就这么高的,肯定是测试了很多变体,做了很多超参数的调整,最后才定下这套网络结构和这套超参数的。而在整个研发过程中,其实每次都用imagenet的测试集做了指导,所以这里面已经无形之中带入偏见了,而且并不是真正的zeroshot。作者说,文中他们用27个数据集做测试,为什么这么多数据集就选这27个呢,他们也不一定具有代表性呀,所以CLIP也是跟这27个数据集息息相关的。总结:如果能再创建一个新的数据集,就是用来测试各种各样的zeroshot的迁移能力的,那就太好了。如果只是像他们一样简单的,重复的使用已有的有监督训练的数据集,就难免会有局限性。
  7. 因为数据都是网上爬来的,不论图片还是文字,这些图文对既没有被过滤也没有被审查过,所以学出来的模型很有可能带了社会上的偏见。
  8. 虽然整篇文章都在说CLIP这个工作多么灵活,利用NLP多么厉害,但是对于很复杂的任务或者很复杂的概念,是语言也无法描述的,如果能在做下游任务(做泛化)的时候,提供一些训练样本是很有帮助的,但CLIP这个模型的提出,并不是为了fewshot的情况提出的,也不是为了它优化的,这就导致了一个非常奇怪的现象,当给CLIP提供了一些训练样本oneshot twoshot的时候,效果还不如直接用zeroshot,这就和人的学习截然不同了。那么如何让CLIP在fewshot情况下也能做的好呢?



01:31:06



j结论

研究动机:在NLP领域,用大规模的无监督数据去预训练模型,而且用和下游任务无关的训练方式(完形填空),在这两种工具的加持下,NLP那边取得了革命性的成功(gpt3)。他们想把NLP里的这种成功复制到其他领域去。

然后他们发现把这套思路用到视觉里,确实效果很好。然后他们还讨论了一下社会影响力。

一句话总结他们的方法:预训练阶段做了对比学习,利用文本的提示做了zeroshot的迁移学习,

结论:在大规模的数据和大模型的双向加持下,CLIP的效果能和之前精心设计的那些,而且是有监督训练出来的基线模型达成平手,但还有很多可以提升的空间。

CLIP最大的贡献:打破了之前固定种类的范式,也就是不论在收集数据集还是训练模型的时候,都不需要像imagenet那样做1000类或者像coco一样做80类了,直接搜集图片文本对,然后用无监督的方式,要么去预测相似性,要么去生成它,总之就是和固定类别的范式说拜拜了。这样不仅处理数据更方便,训练模型更方便,最主要的是在做模型推理的时候更方便,甚至可以去zeroshot的做各种各样的分类任务。

  1. 新意:100。打破了之前固定种类的范式,彻底放飞了视觉模型的训练过程,引发了一大批后续工作。
  2. 有效性:100。做了这么多数据集,效果这么好,泛化性能也这么好,甚至在某些情况下,比人的zeroshot性能还好。
  3. 问题大小:100。用一个模型就能解决大部分的分类任务,而且是zeroshot去解决。利用好CLIP模型,在其他领域稍微适配一下,就能把别的领域的任务都做掉。

你可能感兴趣的:(论文精讲,人工智能)