赞
踩
论文链接:Learning Transferable Visual Models From Natural Language Supervision
论文题目是learning transferable visual modals from natural language supervision,也就是利用自然语言这种监督信号学习可迁移的视觉模型,文中这个模型叫CLIP。他在2021年的2月份发表,截至2024年4月,这篇文章的高影响力引用已经接近4千。他发表在计算机视觉国际会议,也就是International Conference on Machine Learning(LCML)上。这个会议的主要收录论文的研究方向主要是机器学习,人工智能和算法,最新的影响因子是32.4。
首先介绍一下文章的摘要,作者提出先前的计算机视觉系统大多采用监督学习,他只能对预先定义的类别中的物体进行分类。作者在4亿文本-图像上预训练匹配文本和图像的模型,最后可以实现输入一个文本和其对应的图片之后,系统可以准确识别出图片对应的文本内容。
作者没有开源预训练的代码,但开源了预训练的模型。我们调用这个模型,输入一个红包的图片,然后在代码的对应位置输入一些类别的词,比如在这里我们给的就是飞机,狗,汽车,鸟和红包。可以看到,最后的分类结果给红包分配的概率是0.83,成功辨别出了红包。这就实现了并没有进行任何的训练,就能够实现任意类别图片分类的任务。
作者在ImageNet数据集上证明了CLIP的可迁移性。CLIP可以达到ResNet-50的分类精度,且不需要ImageNet 128万个数据中的任何一个。但是否是因为4亿个数据集已经包含了这128万个数据,我们无从得知。
首先介绍一下先前机器学习模型使用的监督学习方式。在训练能够识别狗的模型时,我们就需要预先定义“狗”这个类型,并输入一些狗的样本。当我们输入一张待分类图片后,系统会给出这张图片是“狗”的概率。在这个场景下,因为模型学习时只接受了狗这个样本,所以所有输入的图片都会被判定为是“狗”,人牵着狗是狗,猫也是狗。
从上面的分析中,我们可以知道,监督学习的范式存在两个主要的问题。第一个就是他在预训练时,需要大量人工标记的数据,比如ImageNet中的图片已经达到了百万张,这样的人工标记工作量是非常惊人的。第二个问题就是监督学习只能分类出预先定义的类别。如果出现不是预先定义的类别时,模型完全不会分辨出来。
而作者采用的自然语言监督信号来训练机器学习模型首先在文本采集方面只需要下载配对的文字图片对,一般情况下,一篇推文或者一个网页,图片都会有对应的文字说明,比如说下面这张图是我在苏州博物馆官网下找到的一个推文的配图,右侧是对应的一个介绍。关于模型的迁移性,CLIP这个模型在学习视觉信息的基础上增加学习了自然语言信息,迁移性会比先前的监督学习好。
关于文章采用的数据集。作者对已有的配对的文字-图片数据集MS-COCO,Visual Genome和YFCC100M都不满意,它们要么样本数量太少,要么标注质量很差。于是作者就新构建了一个叫WebImageText数据集。它包含4亿个图片-文字对。
自然语言学习先前采用的模型有主题模型,N-gram模型等。其中,主题模型的目的是获取文档的主题,它的一般流程是从一段文字中获得这段文字的主题,之后再提取这段主题中的关键词。比如一个描写计算机视觉的文档提取出的单词就可能是人工智能,图像分割,目标检测等。主题模型最基础的应用就是可以对文档进行分类。
n-gram模型是预测一个句子按照特定的语序出现的概率。输入I love deep learning,输出的就是按这个顺序出现的概率。一个训练的比较好的n-gram模型对于我爱计算机视觉翻译成英文的语序概率判断会如下面这张图所示。正确的语序概率会高。这两种模型都很复杂,无法进行跨模态训练,也就是联合文本和图像进行训练。
计算机视觉历史上采用的模型,比如ResNeXt101-32x48d模型需要训练19个GPU年,Noisy Student模型需要训练33个TPU年,并且他俩都是有监督学习,只能训练固定的类别。可想而知用它们来构建CLIP模型需要耗费的计算资源非常多。
在2017年出现了transformer模型,transformer模型的可拓展性很强,于是作者就考虑用transformer模型来做图片主题的提取。最初的模型和virtex模型很类似,提取图像对应的文本信息,然后对提取到的文本信息进行排序。这样的训练存在的问题是对于一张图片有很多种描述,比如对下面这张图的描述,可以是抢夺丸子的人和kun,也可以是坐在锅边的人和kun。
针对训练一个模型来预测描述图片中的文本存在的训练效率问题和文本描述的多样性问题,作者预测图片中的关键词,这样的方式放宽了预测是约束条件。后面作者进一步放宽约束条件,模型只需要判断文字和图片是否配对,即采用对比学习的方式进行模型的预训练。右侧这张图的横轴是训练图片的数量,纵轴是zero-shot的准确度。可以看到,只预测关键词的模型学习效率比预测图片主题提升了六倍,也就是橙色的线和蓝色的线相比。绿色的线表示判断文本和图像是否匹配的模式,可以看到他的效率又提升了4倍。
左侧的代码是作者提出的预训练模型的主体代码结构,右侧是它对应的模型结构。I对应右侧的图片,T对应右侧的文字。将文字输入文本编码器,图片输入图片编码器。作者最后采用的文本编码器是text transformer,图片编码器是vision transformer。下面对编码器输出的向量进行归一化,并对归一化的文本和图像向量求相似度。也就是右侧的紫色部分对应的向量和绿色部分对应的向量。接下来这部分是对图片的相似度求损失函数,最后希望实现对角线上的相似度为1,其余元素为0。
对于文本编码器,文章采用的是Attention is all you need提出的transformer中的编码器部分。输入原始数据后,先进行token的划分,并编码成对应的token ID,经过嵌入层之后token ID被转换为一个向量,这个向量被称为词向量。单词所在的位置也会被编码为一个向量。经由编码器,词向量和位置向量组合为一个向量。
对于位置编码器,文章采用的是vision transformer。和文本编码器类似,图片先被分割为一个个的patch,patch被拉长变成一个向量,这个向量可能还是会很长,模型会对它进行降维,降维之后嵌入位置信息,图像向量和位置向量组合为一个向量。
训练好文本编码器和图像编码器之后,这两个编码器就可以用来进行分类。如果预训练的数据集中已经有“狗”这个样本,那么显然输入文本“狗”和图像“狗”,图像会被正确判定为“狗”;如果输入一个预训练的数据集中没有的图片,比如说“鸭嘴兽”,模型在很大概率上还是会将“鸭嘴兽”的图片正确识别为鸭嘴兽,因为模型在预训练时学习的时每个词与图片匹配的特征,所以在输入鸭嘴兽时,模型会识别“鸭嘴”和“兽”。
模型的识别过程是输入的图片经过图片编码器被提取为图片向量。输入的所有文本也被提取为文本向量,再由对比学习获得与图像匹配的文本信息。可以看到,在上面这张图中,输入文本编辑器的并不是单独的单词,而是加了一个前缀,也就是“A photo of a”。增加的这个词为模型提供了prompt,也就是提示,为了给系统提供更多关于该单词指代内容的信息。第一是因为单词含义具有多样性,比如crane这个单词,他同时具有起重机和丹顶鹤的意思。如果是在工地上,那么cranes指的就是起重机,如果是会飞的,那么crane指的就是丹顶鹤。再比如boxer,它既可以指一种狗,也可以指拳击运动员,如果不加以限制,那么很可能模型就会把这两种含义搞混。
第二是预训练和模型使用之间数据分布的差异性。因为预训练时使用的文本是直接从网络上下载的一大段文字,如果在使用时采用单独的词语,由文本编码器抽取的特征向量就不是很好。作者加的“A photo of a”首先就确定了这个词语肯定是个名词。同时,我们也可以在输入的文本中增加更多的提示,比如我们想要分类柯基,就可以输入一张柯基的图片,一种宠物。在OCR任务中,我们还可以对想要识别的物品上增加双引号,作者说这样可以增加识别的准确度。
下面是CLIP与其他工作的对比介绍。CLIP和ResNet50分别在27个数据集上进行分类。其中CLIP是完全zero-shot的,而ResNet50在新样本上进行了有监督训练,并进行了微调。绿色的部分是CLIP比ResNet50好的部分,在27个数据集中,CLIP在16个数据集的分类中表现的比ResNet优秀,剩下的一些数据集,作者说是一些比较难的数据集,包括数数,异常判断等。因为作者组建的数据集的内容都是从网络上下载的,大多是一些简单的物体,所以在这些需要一定先验知识的数据中没有很好的表现也是无可厚非,这和人类识别一个物体也比较吻合。所以作者提出在这些数据集上使用few-shot会更适合。
在文中few-shot的具体实现方式是固定预训练的文本和数据编码器用于抽取特征,加个线性层用于分类。使用线性层需要调节的参数比较少,相比之下fine tune的调参比较复杂,CLIP需要在巨大的数据集上进行训练,参数调节一次就需要训练一次,虽然作者所在的团队很有钱,也不是很能接受这么大的开销。第二个问题就是fine-tune可能会导致训练的模型过拟合,使得模型在实际使用起来效果不是很好。
这张图的横坐标是用于微调的样本数量,作者在这里使用了上文中27个数据集中的20个进行测试,纵坐标是在这20个数据集上准确度的平均值。我们可以看到,CLIP在没有进行任何微调的情况下,已经超过了google专门为迁移学习量身定制的模型big transformer,也就是蓝色的这条线。它是few-shot中表现的最好的模型之一。ResNet50的准确度和zero-shot相比差了很多。这张图还有一个很有意思的点,就是在微调样本比较少的情况下,few-shot表现的还没有zero-shot好,也就是紫色这条线在4个样本之前他的平均准确度是在zero-shot之下的。作者希望训练出来的模型可以和我们学习一样东西的模式吻合,也就是我们获得了更多的信息之后可以更好的对新的物体进行分类。所以,作者说在这个点上,模型还需要进一步改进。
作者在这篇文章中还对自己模型的缺陷进行了一个总结。首先,CLIP虽然和一些模型相比,zero-shot的准确度很高,但是和一些准确度更高的模型上准确度仍有差距。比如说前面提到的训练效率比较低的noisy student模型。如果想要弥补这一差距,作者说可以通过扩大数据集规模,但是预估需要扩大1000倍,这个计算量的需求作者认为难以支持。
在某些数据集中,CLIP的zero表现较差,之前提到的27个数据集中有11个表现的比较差,这些数据集一般是需要一些比较难的先验知识,比如说判断医学影像中是否存在肿瘤,很显然网络上关于肿瘤的识别的资料很少,很可能是因为在4亿张训练的图片中几乎没有涉及这种。所以CLIP本质上是用很多的数据进行投喂才能实现比较好的zero-shot,
CLIP对于数据集的利用率并不是很高,前面实验的对比CLIP都已经在4亿张图片上进行了预训练,前面也说了如果想要赶上noisy student模型的准确性,CLIP需要在4000亿的数据集上进行训练,这个数字是非常巨大的,作者希望能够提高数据的利用率。
CLIP模型的使用需要传入类别和对应的图片,系统可以将图片识别为传入的类别,这种使用方法和直接输入图片就能识别出图片的主题来说不够灵活。作者希望之后能够实现一个更加灵活的模型。可能也是因为是openAI公司的团队,希望把一切GPT化,也就是用户输入一个东西,模型能够根据输入的内容生成输出。
我认为CLIP模型的一个最大的亮点是它不只是能够和之前的resnet等计算机视觉模型一样只能识别固定标签的内容。他在收集数据时不需要人工将这些图片分类为固定的类别,在训练模型时,也不需要预先定义分类的类别,在使用模型时用户可以根据自己的需求输入相应的内容,这也不局限于固定的类别。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。