1、引言
在计算机视觉领域,通常需要经过训练模型来实现对预定类别目标预测(如分类、检测等任务),但是这种形式会限制模型的通用性。比如我们训练完了一个猫狗分类模型,如果现在希望识别一只老虎,那么原来训练的模型则不可用。在这样一个背景下,CLIP的提出完美解决了这一问题,通过引入大语言模型,在几乎不需要重新训练模型的基础上,实现对几乎所有类别目标的识别,可谓是对传统CV模型的降维打击!
CLIP模型通过学习互联网上4 亿对的图像与文本数据,来获取大量知识与经验,利用文本作为监督信号来训练可迁移的视觉模型。该模型可以轻松地迁移到大多数任务,并且性能通常可以与完全监督的baseline相媲美,而无需任何数据集特定的训练。例如,CLIP在不使用ImageNet任何一个训练样本的情况下,在分类任务上的准确性能与ResNet-50媲美!
Github:https://github.com/OpenAI/CLIP
2、核心方法
2.1 自然语言监督
与其他训练方法相比,自然语言监督学习有几个潜在的优势。与用于图像分类任务的标准众包标签相比,扩展自然语言监督要容易得多,因为它的标签不需要采用经典的“机器学习兼容格式”(例如标准的 1-of-N 多数投票“黄金标签”)。相反,可以很方便地从互联网上获取大量的监督数据。与大多数无监督或自监督学习方法相比,从自然语言学习具有重要优势,因为它不仅仅学习表示,而且还将该表示与语言连接起来,从而实现灵活的零样本迁移。
2.2 图文数据集构建
现有工作主要使用三个数据集:MS-COCO、Visual Genome 和 YFCC100M。虽然 MS-COCO 和 Visual Genome 是高质量的人群标记数据集,但按照现代标准来看,它们很小,每个数据集大约有 100,000 张训练照片。相比之下,其他计算机视觉系统需要接受多达 35 亿张 Instagram 照片的训练。YFCC100M(可容纳 1 亿张照片)是一种可能的替代方案,但每张图像的元数据稀疏且质量参差不齐。许多图像使用自动生成的文件名作为“标题”或包含相机曝光设置的“描述”。经过过滤仅保留带有自然语言标题和/或英文描述的图像后,数据集缩小了 6 倍,只剩下 1500 万张照片,这与 ImageNet 的大小大致相同。
自然语言监督的一个主要动机是互联网上公开提供的大量这种形式的数据。由于现有数据集没有充分反映这种可能性,因此仅考虑这些数据集的结果会低估这方面研究的潜力。为了解决这个问题,本文构建了一个包含 4 亿对(图像、文本)的新数据集,这些数据集是从互联网上的各种公开来源收集的。生成的数据集的总字数与用于训练 GPT-2 的 WebText 数据集相似。我们将此数据集称为 WebImageText。
2.3 模型选择与扩展
论文中文本编码器固定选择一个包含63M参数的Text Transformer模型,而图像编码器采用了两种的不同的架构:
- 一是常用的CNN架构ResNet,其中ResNet包含5个不同大小的模型:ResNet50,ResNet101,RN50x4,RN50x16 和 RNx64(后面三个模型是按照EfficientNet缩放规则对ResNet分别增大4x,16x 和 64x 得到)
- 二是基于Transformer的ViT,ViT选择3个不同大小的模型:ViT-B/32,ViT-B/16 和 ViT-L/14。
本文还用注意力池机制取代了全局平均池层,注意力池被实现为单层“transformer-style多头 QKV 注意力,其中查询以全局平均池化的图像表示为条件。对于第二种架构,论文使用最近推出的 Vision Transformer (ViT) 进行实验(Dosovitskiy 等人,2020)。论文只进行了微小的修改,即在Transformer之前向组合patch和位置嵌入添加额外的层归一化,并使用略有不同的初始化方案。
CLIP的文本编码器是一个 Transformer 结构,论文中使用 63M 参数、12 层、512 宽的模型,具有 8 个注意力头。该Transformer对具有 49,152 个词汇大小的文本的小写字节对编码 (BPE) 表示进行运算。为了计算效率,最大序列长度上限为 76。文本序列用 [SOS] 和 [EOS] 标记括起来,Transformer最高层在 [EOS] 标记处的激活被视为特征表示经过层归一化然后线性投影到多模态嵌入空间中的文本。文本编码器中使用了屏蔽自注意力,以保留使用预先训练的语言模型进行初始化或添加语言建模作为辅助目标的能力,尽管对此的探索留待未来的工作。
虽然之前的计算机视觉研究通常通过单独增加宽度或深度来缩放模型,但对于 ResNet 图像编码器,论文采用 Tan & Le(2019)的方法,该方法发现在所有宽度、深度和分辨率上分配额外的计算效果优于仅将其分配到模型的一个维度。虽然 Tan & Le (2019) 调整了分配给 EfficientNet 架构每个维度的计算比率,但论文使用了一个简单的基线,即平均分配额外计算以增加模型的宽度、深度和分辨率。对于文本编码器,论文仅将模型的宽度缩放为与计算出的 ResNet 宽度增加成正比,而根本不缩放深度,因为论文发现 CLIP 的性能对文本编码器的容量不太敏感。
2.4 模型训练
本文训练了一系列 5 个 ResNet 和 3 个 Vision Transformer。对于 ResNet,本文训练一个 ResNet-50、一个 ResNet-101,然后再训练 3 个,它们遵循 EfficientNet 风格的模型缩放,并使用 ResNet-50 的大约 4 倍、16 倍和 64 倍的计算量。它们分别表示为 RN50x4、RN50x16 和 RN50x64。对于 Vision Transformers,本文训练了 ViT-B/32、ViT-B/16 和 ViT-L/14。
所有的模型都训练32个epoch,采用AdamW优化器,而且训练过程采用了一个较大的batch size:32768。由于数据量较大,最大的ResNet模型RN50x64需要在592个V100卡上训练18天,而最大ViT模型ViT-L/14需要在256张V100卡上训练12天,可见要训练CLIP需要耗费多大的资源。对于ViT-L/14,还在336的分辨率下额外finetune了一个epoch来增强性能,论文发现这个模型效果最好,记为ViT-L/14@336,论文中进行对比实验的CLIP模型也采用这个。
3、模型与原理
3.1 基本原理
CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moco和simclr不同的是,CLIP的训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系。
3.2 模型架构
如下图所示,CLIP包括两个模型:Text Encoder 和 Image Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的Text Transformer;而 Image Encoder 用来提取图像的特征,可以采用常用 CNN 模型或者 Vision Transformer。
本文对提取的文本特征和图像特征进行对比学习。对于一个包含N个文本-图像对的训练Batch,将N个文本特征和N个图像特征两两组合,CLIP模型会预测出N^2个可能的文本-图像对的相似度,这里的相似度直接计算文本特征和图像特征的余弦相似性(cosine similarity),即上图所示的矩阵。这里共有N个正样本,即真正属于一对的文本和图像(矩阵中的对角线元素),而剩余的N^2-N个文本-图像对为负样本,那么CLIP的训练目标就是最大N个正样本的相似度,同时最小化N^2-N个负样本的相似度。
3.2 zero-shot分类
在计算机视觉中,以图像分类任务为例,zero-shot学习通常指的是去识别未见过类别的研究。虽然无监督学习领域的许多研究都集中在机器学习系统的表征学习能力上,但论文主张zero-shot迁移是衡量机器学习系统任务学习能力的一种方式。
与CV中常用的先预训练然后微调不同,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类,这也是CLIP亮点和强大之处。用CLIP实现zero-shot分类很简单,只需要简单的两步:
- 根据任务的分类标签构建每个类别的描述文本:
A photo of {label}
,然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为NN,那么将得到NN个文本特征; - 将要预测的图像送入Image Encoder得到图像特征,然后与NN个文本特征计算缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率值。
4、实验
4.1 Compare Visual N-Grams to CLIP
论文在3个分类数据集上进行了zero-shot效果对比,如下表所示,可以看到CLIP模型在效果上远远超过之前的模型,其中在ImageNet数据集可以达到76.2,这和全监督的ResNet50效果相当,不用任何训练数据就能达到这个效果是相当惊艳的。
4.2 Prompt engineering and Ensembling
简单来说,prompt learning的核心是通过构建合适prompt(提示)来使预训练模型能够直接应用到下游任务,这和之前的预训练+微调属于不同的范式。论文中也提到,如果直接采用类别标签作为文本描述,那么很多文本就是一个单词,缺少具体的上下文,而且也和CLIP的训练数据不太一致,效果上会不如采用A photo of {label}
(ImageNet数据集上可以提升1.3%)。论文也实验了采用80个不同的prompt来进行集成,发现在ImageNet数据集上能带来3.5%的提升,具体见CLIP公开的notebook。下图对比了基于ResNet的CLIP模型直接采用类别名与进行prompt engineering和ensembling的效果对比:
5、局限性
论文的最后也对CLIP的局限性做了讨论,这里简单总结其中比较重要的几点:
- CLIP的zero-shot性能虽然和有监督的ResNet50相当,但是还不是SOTA,作者估计要达到SOTA的效果,CLIP还需要增加1000x的计算量,这是难以想象的;
- CLIP的zero-shot在某些数据集上表现较差,如细粒度分类,抽象任务等;
- CLIP在自然分布漂移上表现鲁棒,但是依然存在域外泛化问题,即如果测试数据集的分布和训练集相差较大,CLIP会表现较差;
- CLIP并没有解决深度学习的数据效率低下难题,训练CLIP需要大量的数据;
6、总结
论文研究了是否有可能将 NLP 中与任务无关的网络规模预训练的成功转移到另一个领域。为了优化其训练目标,CLIP 模型在预训练期间学习执行各种任务。然后可以通过自然语言提示来利用这种任务学习,以实现向许多现有数据集的零样本迁移。在足够的规模下,这种方法的性能可以与特定任务的监督模型相媲美,尽管仍有很大的改进空间。不管怎么说,CLIP的提出为解决计算机视觉任务提供了另一种思路,与ViT一样同为重量级的工作!