《Learning Transferable Visual Models From Natural Language Supervision》论文学习

一、Abstract

最先进的计算机视觉系统被训练用以预测一组预定的固定目标类别。这种受限的监督方式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何新的视觉概念。因此,直接从关于图像的原始描述文本中学习是一个有希望的替代方法,它利用了更广泛的因特网监督来源。

我们证明了预测哪个标题与哪张图片匹配的简单预训练任务是一种有效且可扩展的方式,它能够从零开始学习SOTA图像表示,在从互联网收集的4亿(图像,文本)对数据集上进行学习。预训练之后,自然语言被用来引用已经学习到的视觉概念(或描述新的概念),从而实现了模型对下游任务的零样本迁移。

我们通过在超过30种不同的现有计算机视觉数据集上进行基准测试来研究这种方法的性能,这些任务包括OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类。该模型在大多数任务上都能有不错的迁移性能,并且通常能与完全监督的基线模型竞争,而不需要任何特定数据集的针对性训练。例如,我们在ImageNet上实现了与原始的ResNet-50相同的准确性,而且不需要使用任何它所训练的128万训练样本。

参考链接:

https://arxiv.org/pdf/2103.00020.pdf

 

二、Introduction and Motivating Work

近几年来,直接从原始文本学习的预训练方法已经彻底改变了自然语言处理(NLP)领域。像自回归(autoregressive)和掩码语言建模(masked language modeling)这种任务无关(Task-agnostic objectives)的技术,在计算量、模型容量和数据量上已经扩展了许多个数量级,能力也在稳步提升。

将“文本到文本”作为一个标准的输入输出接口的发展,使得与任务无关的架构能够零样本迁移(zero-shot transfer)到下游数据集,省去了专用输出头或数据集特定定制的需求。像GPT-3这样的系统现在在许多任务中都能与定制模型竞争,同时几乎不需要特定数据集的训练数据。

这些结果表明,现代预训练方法在网络规模的文本集合中获得的自监督数据集,超过了高质量众包标注的NLP数据集。然而,在计算机视觉等其他领域,预训练模型仍然标准做法是使用众包标注的数据集,例如ImageNet。那么,直接从网络文本学习的可扩展预训练方法是否能在计算机视觉中带来类似的突破呢?先前的研究是令人鼓舞的。

  • 20多年前,Mori等人探索了通过训练模型来预测与图像配对的文本文档中的名词和形容词,以改进基于内容的图像检索。
  • Quattoni等人证明了通过在分类器的权重空间中进行流形学习,可以学习更数据高效的图像表示,这些分类器被训练用以预测与图像相关的标题中的单词。
  • Srivastava和Salakhutdinov探讨了通过训练多模态深度玻尔兹曼机器在低级图像和文本标签特征之上进行深度表示学习。
  • Joulin等人对这一系列工作进行了现代化改进,并证明了训练CNN预测图像标题中的单词可以学到有用的图像表示。他们将YFCC100M数据集中图像的标题、描述和哈希标签元数据转换成了一个词袋多标签分类任务,并表明预训练AlexNet来预测这些标签所学到的表示,在迁移任务上的表现类似于基于ImageNet的预训练。
  • Li等人随后将这种方法扩展到预测短语n-grams以及单个单词,并展示了他们的系统通过基于所学到的视觉n-grams字典对目标类别进行评分并预测得分最高者来进行零样本迁移到其它图像分类数据集的能力。
  • 采用更为新颖的架构和预训练方法,VirTex、ICMLM和ConVIRT最近展示了基于变换器(transformer)的语言建模、掩码语言建模和对比目标来从文本学习图像表示的潜力。

尽管这些作为概念证明的研究成果令人兴奋,但使用自然语言监督进行图像表示学习仍然不常见。这可能是因为在常见基准测试上展示的性能远低于其他方法。例如,Li等人在零样本设置下在ImageNet上的准确率仅为11.5%,这远低于当前最先进水平的88.4%准确率。它甚至低于经典计算机视觉方法的50%准确率。相反,更狭窄范围但目标明确的弱监督使用提高了性能。Mahajan等人显示出预测Instagram图片中与ImageNet相关的标签是一个有效的预训练任务。在调整到ImageNet后,这些预训练模型提高了超过5%的准确率,并提升了当时的整体最先进水平。Kolesnikov等人和Dosovitskiy等人也通过预训练模型来预测噪声标签的JFT-300M数据集的类别,在更广泛的迁移基准上展示了大幅度的提升。

 

三、Approach

0x1:Natural Language Supervision

我们方法的核心思想是从自然语言中包含的监督信息中学习感知。正如在引言中讨论的那样,这并不是一个新想法,然而用来描述这一领域工作的术语是多种多样的,甚至看起来相互矛盾,而且所陈述的动机也是多种多样的。

张等人(2020年),戈麦斯等人(2017年),朱林等人(2016年),以及德赛与约翰逊(2020年)都介绍了一些从文本与图像配对中学习视觉表征的方法,但他们分别将自己的方法描述为无监督、自监督、弱监督和监督。我们强调,在这一系列工作中共同的不是使用的具体方法的任何细节,而是对自然语言作为训练信号的重视。所有这些方法都是从自然语言监督中学习的。尽管早期工作在使用主题模型和n-gram表征时与自然语言的复杂性作斗争,但在深层次上下文表征学习方面的进步表明,我们现在已经有了有效利用这一丰富监督资源的工具。

与其他训练方法相比,从自然语言中学习具有几个潜在的优势。

  • 与标准的众包标注进行图像分类相比,扩展自然语言监督要容易得多,因为它不需要注释是经典的“机器学习兼容格式”,例如典型的1-of-N多数投票“标签”。相反,可以处理自然语言的方法可以从互联网上大量文本中包含的监督信息中被动学习。
  • 从自然语言中学习相对于大多数无监督或自监督学习方法还有一个重要的优势,因为它不仅仅是学习了一种表征,而且还将该表征与语言连接起来,这使得它能够灵活地进行零样本迁移。

0x2:Creating a Sufficiently Large Dataset

现有工作主要使用了三个数据集:

  • MS-COCO(林等人,2014年)
  • Visual Genome(克里希纳等人,2017年)
  • YFCC100M(托梅等人,2016年)

MS-COCO和Visual Genome是高质量的众包标注数据集,但按照现代标准,它们的规模都很小,每个大约有100,000张训练照片。相比之下,其他计算机视觉系统则是在多达35亿张Instagram照片上训练的(马哈詹等人,2018年)。YFCC100M有1亿张照片,可能是一个替代选择,但每张图片的元数据稀疏且质量参差不齐。许多图片使用自动生成的文件名,如20160716_113957.JPG,作为“标题”,或包含有关相机曝光设置的“描述”。在过滤后,仅保留那些有自然语言标题和/或英文描述的图片,数据集缩小了6倍,只剩下1500万张照片。这个数量大约与ImageNet相当。

自然语言监督的一个主要动机是互联网上公开可获得的大量此类形式的数据。由于现有数据集并没有充分反映这种可能性,仅考虑在它们上面的结果会低估这一研究方向的潜力。为了解决这个问题,我们构建了一个新的包含4亿个(图片,文本)对的数据集,这些数据从互联网上多个公开可用的来源收集而来。为了尽可能广泛地覆盖视觉概念,我们在构建过程中搜索包含了一组500,000个查询的(图片,文本)对。1我们通过每个查询最多包括20,000个(图片,文本)对来大致平衡结果。最终的数据集总词数与用来训练GPT-2的WebText数据集相似。我们将这个数据集称为WIT,即WebImageText。

0x3:Selecting an Efficient Pre-Training Method

先进的计算机视觉系统使用了非常大量的计算资源。马哈詹等人(2018年)训练他们的ResNeXt101-32x48d需要19个GPU年,而谢等人(2020年)训练他们的Noisy Student EfficientNet-L2需要33个TPUv3核年。考虑到这两个系统都是训练来预测仅1000个ImageNet类别,从自然语言中学习一个开放集合的视觉概念的任务看起来是艰巨的。在我们的努力过程中,我们发现训练效率是成功扩展自然语言监督的关键,我们根据这个指标选择了我们最终的预训练方法。

我们的初步方法,类似于VirTex,联合训练了一个图像CNN,以及一个从零开始的text transformer,用以预测图像的标题。然而,我们遇到了有效扩展这种方法的困难。在下图中,我们展示了一个6300万参数的transformer语言模型,它已经使用了其ResNet-50图像编码器两倍的计算量,但学习识别ImageNet类别的速度比一个更简单的基线(预测得到bag-of-words)慢三倍。

这两种方法都有一个关键的相似之处。他们试图预测伴随每张图片的文本的确切单词。

由于与图像共存的描述、评论和相关文本的多样性,这是一项困难的任务。最近在图像的对比表示学习(contrastive representation learning)方面的研究发现,对比目标可以学到比相应的预测目标更好的表示。另外的研究发现,虽然图像的生成模型可以学习高质量的图像表示,但它们比具有相同性能的对比模型需要多一个数量级的计算。

基于这些发现,我们探索了训练一个系统来解决潜在更容易的代理任务,即仅预测哪个文本作与哪个图像配对,而不是预测那个文本的确切单词。

从相同的词袋编码基线开始,我们在上图中将预测目标换成对比目标,并观察到零样本迁移到ImageNet的速度进一步提高了4倍。

给定一个包含N个(图像,文本)对的样本batch,CLIP被训练来预测在N×N个可能的(图像,文本)配对中正确的N个配对。为此,CLIP的损失函数是一个包含了image encoder和text encoder多模态嵌入空间的联合函数,并通过最小化image embedding和text embedding和联合概率分布在正确N个配对和N2-N错误配对上的cosine相似度来优化网络权重。我们使用互信息熵来归一化cosine相似度损失。

在下图中,我们包含了CLIP实现核心的伪代码。

由于我们的预训练数据集规模庞大,过拟合并不是主要的担忧。我们从零开始训练CLIP,既不使用ImageNet权重初始化图像编码器,也不使用预训练权重初始化文本编码器。我们仅使用线性投影将每个编码器的表示映射到多模态嵌入空间。

我们还移除了张等人(2020)的文本转换函数tu,该函数从文本中均匀抽样单个句子,因为CLIP的预训练数据集中的许多(图像,文本)对只有单个句子。我们还简化了图像转换函数tv。训练期间使用的唯一数据增强是从调整大小的图像中随机裁剪正方形。最后,控制softmax中logits范围的温度参数τ是作为一个对数参数化的乘法标量在训练期间直接优化的,以避免将其作为一个超参数进行调整。

0x4:Choosing and Scaling a Model

我们考虑了两种不同的图像编码器架构。

  • 对于第一种,我们由于其广泛的采用和经过验证的性能,使用ResNet-50作为图像编码器的基础架构。我们对原始版本进行了几处修改,使用了何等人(2019年)提出的ResNetD改进以及张(2019年)提出的抗锯齿矩形-2模糊池化。我们还用一种注意力池化机制替换了全局平均池化层。注意力池化是作为单层“transformer-style”的多头QKV注意力实现的,其中查询条件是基于图像的全局平均池化表示。
  • 对于第二种架构,我们尝试了最近引入的Vision Transformer (ViT)(Dosovitskiy等人,2020年)。我们遵循了原始算法的基本实现,仅添加一个额外的正则化层,以此将patch和position embedding合并到Transformer结构前,并使用了一个略有不同的初始化方案。

文本编码器是一个Transformer(Vaswani等人,2017年),其架构修改在Radford等人(2019年)中有描述。作为基础尺寸,我们使用一个具有63M参数的12层、宽度为512的模型,以及8个注意力头。Transformer建立在一个使用小写字母的字节对编码(BPE)表示的文本上,其词汇量大小为49,152(Sennrich等人,2015年)。

为了计算效率考虑,最大序列长度被限制在76个。文本序列以[SOS]和[EOS]标记为界,并且Transformer最高层在[EOS]标记处的激活被视为文本的特征表示,这在层正则化后线性投射进多模态嵌入空间。文本编码器中使用了掩码自注意力,为了保存用预训练语言模型初始化的能力,或者添加语言建模作为一个辅助目标。

尽管以往的计算机视觉研究通常通过增加宽度(Mahajan等人,2018年)或深度(何等人,2016a)来单独扩展模型,但对于ResNet图像编码器,我们采用了Tan & Le(2019年)的方法,他们发现在宽度、深度和分辨率上分配额外计算资源比只在模型的一个维度上分配要表现得更好。尽管Tan & Le(2019年)为他们的EfficientNet架构调整了分配给每个维度计算资源的比例,我们使用了一个简单的基线,即将额外的计算资源平等地分配给增加模型的宽度、深度和分辨率。

对于文本编码器,我们仅将模型的宽度比例地扩大到等于ResNet宽度增加的计算,而根本不扩展深度,因为我们发现CLIP的性能对文本编码器的容量不那么敏感。

0x5:Training

我们训练了一系列5个ResNets和3个视觉变换器(Vision Transformers)。

  • 对于ResNets,我们训练了一个ResNet-50、一个ResNet-101,然后是另外3个遵循EfficientNet风格模型缩放的网络,并且分别使用大约4倍、16倍和64倍于ResNet-50的计算量。它们分别被表示为RN50x4、RN50x16和RN50x64。
  • 对于视觉变换器,我们训练了一个ViT-B/32、一个ViT-B/16和一个ViT-L/14。

我们训练所有模型共32个epoch。

我们使用Adam优化器(Kingma & Ba, 2014),并配合解耦的权重衰减正则化(Loshchilov & Hutter, 2017)应用于所有非增益或偏置的权重,并使用余弦调度(Loshchilov & Hutter, 2016)衰减学习率。

初始超参数是通过对训练了1个epoch的基准ResNet-50模型进行网格搜索、随机搜索和手动调整的组合来设置的。然后由于计算限制,超参数被启发式地适应于更大的模型。

可学习的温度参数τ被初始化为等同于(Wu等人,2018)中的0.07,并且被限制住以防止对逻辑值的缩放超过100,我们发现这是防止训练不稳定所必需的。

我们使用非常大的小批量尺寸为32,768。混合精度(Micikevicius等人,2017)被用于加速训练和节约内存。

为了节省额外内存,我们使用了梯度检查点(Griewank & Walther, 2000; Chen等人,2016)、半精度Adam统计(Dhariwal等人,2020)和半精度随机舍入文本编码器权重。

嵌入相似性的计算也被分片,每个GPU只计算对于它们本地嵌入批次所必需的成对相似性的子集。

最大的ResNet模型,RN50x64,在592个V100 GPU上训练了18天,而最大的视觉变换器在256个V100 GPU上训练了12天。对于ViT-L/14,我们还在更高的336像素分辨率上预训练了一个额外的epoch,以提高性能,类似于FixRes(Touvron等人,2019)。我们将此模型表示为ViT-L/14@336px。

四、Experiments 

from PIL import Image
import requests

from transformers import CLIPProcessor, CLIPModel

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)

outputs = model(**inputs)
logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
probs = logits_per_image.softmax(dim=1)  #

print(probs)

参考链接:

https://github.com/openai/CLIP
https://huggingface.co/docs/transformers/model_doc/clip

 

五、Limitations

CLIP仍然存在许多局限性。

在有训练分割的数据集上,零样本CLIP的表现平均而言与在ResNet-50特征上的简单监督基线(线性分类器)相当。在大多数这些数据集上,这一基线的表现现在已远低于整体的最新技术水平。CLIP在任务学习和迁移能力上仍然需要大量的改进工作。虽然迄今为止规模扩大持续提升了性能,并表明了持续改进的可能路径,但我们估计需要增加大约1000倍的计算量,零样本CLIP才能达到整体最新技术水平的表现。用当前的硬件来训练这是不可行的。因此,需要进一步研究如何提高CLIP在计算和数据效率上的表现。

另外我们发现,CLIP的零样本表现在几种特定任务上还是比特定任务的模型的效果差,例如区分汽车型号、花的品种和飞机的变型。CLIP还在更抽象和系统性的任务上遇到困难,如计算图像中物体的数量。最后,对于那些不太可能包含在CLIP预训练数据集中的新颖任务,例如分类照片中最近的汽车距离,CLIP的表现可能接近随机。我们有信心,还有许多、许多任务存在,CLIP的零样本表现接近偶然水平。

虽然零样本CLIP在许多自然图像分布上泛化得很好,但我们观察到零样本CLIP对于对它而言真正超出分布范围的数据泛化性仍然很差。光学字符识别(OCR)任务中有一个很好的例子。CLIP学习到了一个高质量的语义OCR表示,该表示在数字渲染文本上表现良好,这在其预训练数据集中很常见,Rendered SST2的表现证实了这一点。然而,CLIP在手写数字MNIST数据集上仅达到了88%的准确率。一个简单得令人尴尬的基线,即对原始像素进行逻辑回归,表现比零样本CLIP更好。语义和几乎重复的最近邻检索验证了我们预训练数据集中几乎没有类似MNIST数字的图像。这表明CLIP对解决深度学习模型的脆弱泛化问题几乎没有帮助。相反,CLIP试图规避问题,并希望通过在如此庞大和多样的数据集上训练,所有数据将有效地处于分布内。正如MNIST所证明的,这是一个天真的假设,很容易被违反。

尽管CLIP可以灵活地为各种任务和数据集生成零样本分类器,但CLIP仍然只能从给定零样本分类器中的概念中选择。与像图像字幕这样真正灵活的方法相比,这是一个显著的限制,图像字幕可以生成新颖的输出。不幸的是,我们发现图像字幕基线的计算效率远低于CLIP。一个值得尝试的简单想法是联合训练对比和生成目标,希望将CLIP的效率与字幕模型的灵活性结合起来。作为另一种替代方案,可以在推理时对许多关于给定图像的自然语言解释进行搜索,类似于Andreas等人在2017年提出的“Learning with Latent Language”中的方法。

CLIP同样没有解决深度学习中的数据效率低下问题。相反,CLIP通过使用可以扩展到数亿训练样本的监督来源进行补偿。如果在训练CLIP模型期间看到的每一张图像以每秒一张的速率呈现,那么要遍历32个训练周期中看到的128亿张图像需要405年的时间。将CLIP与自我监督(Henaff, 2020; Chen et al., 2020c)和自我训练(Lee; Xie et al., 2020)方法结合起来是一个有前景的方向,因为它们已经证明能够提高数据效率,超越标准的监督学习。

我们的方法论有几个重大的局限性。尽管我们专注于零样本迁移,但我们在开发CLIP的过程中反复查询完整验证集上的性能。这些验证集通常有数千个例子,对于真正的零样本场景来说是不切实际的。在半监督学习领域也提出了类似的担忧(Oliver et al., 2018)。另一个潜在问题是我们选择的评估数据集。虽然我们报告了在Kornblith et al. (2019)的12个数据集评估套件上的结果作为一个标准化的集合,但我们的主要结果使用的是一个有些杂乱无章地组装的27个数据集集合,这无疑是与CLIP的发展和能力共同适应的。创建一个专门设计用来评估广泛零样本迁移能力的新任务基准,而不是重复使用现有的监督数据集,将有助于解决这些问题。

CLIP是在互联网上与图像配对的文本上训练的。这些图像-文本对是未经过滤和未经策划的,导致CLIP模型学习了许多社会偏见。这一点之前已经在图像字幕模型上得到证明(Bhargava & Forsyth, 2019)。

虽然我们在整个工作中强调通过自然语言指定图像分类器是一个灵活和通用的接口,但它有自己的局限性。许多复杂的任务和视觉概念仅通过文本是难以指定的。实际训练样本无疑是有用的,但CLIP并不直接针对少量样本的表现进行优化。在我们的工作中,我们备选方案是在CLIP的特征之上拟合线性分类器。这导致了一个违反直觉的现象:当从零样本设置过渡到少量样本设置时,性能会下降,这与人类的表现明显不同,人类的表现在从零样本到少量样本的设置中有很大的提高。未来的工作需要开发方法,将CLIP强大的零样本性能与高效的少样本学习相结合。

 

 

 

posted @ 2023-12-20 15:28  郑瀚Andrew  阅读(81)  评论(0编辑  收藏  举报