CLIP解读二
文章来源 多模态超详细解读 (一):CLIP:大规模语言-图像对比预训练实现不俗 Zero-Shot 性能 (opens new window)
太长不看版
CLIP 是由 OpenAI 提出的一种多模态神经网络,它能有效地借助自然语言的监督来学习视觉的概念。典型的视觉数据集是劳动密集型的,创建成本很高,且使用它们训练得到的标准视觉模型只擅长一项任务,导致适应新的任务并不容易。而 CLIP 在各种各样的图像上进行训练,同时依赖于互联网上大量自然语言的监督。CLIP 可以用自然语言指示进行大量的分类基准:我们只需要提供要识别的视觉类别的名称,无需再在目标基准上面进行专门的训练,这有点类似于 GPT-2 和 GPT-3 的 "Zero-Shot" 的能力。比如,CLIP 在 ImageNet-1K 上的性能与专门有监督训练的 ResNet-50 相当,但是却没有使用 1.28M 的 ImageNet-1K 训练数据集。事实上,CLIP 也可以 "Zero-Shot" 地有效转移到大多数任务上面,并且能获得与完全监督的基线相竞争的性能。
1 CLIP:大规模语言-图像对比预训练实现不俗 Zero-Shot 性能
论文名称:Learning Transferable Visual Models From Natural Language Supervision (ICML 2021)
论文地址:
https://arxiv.org/pdf/2103.00020.pdf (opens new window)
代码地址:
https://github.com/OpenAI/CLIP (opens new window)
官方解读博客:
https://openai.com/research/clip (opens new window)
- 1 CLIP 论文解读:
1.1 背景和动机
CLIP 这篇论文讲了一个很长的故事。
[NLP 领域 "Zero-Shot" 能力的诞生] 在过去的几年 (2018-2020,以 GPT 到 GPT-3 为代表) 里,直接从原始文本中进行自监督预训练的方法彻底改变了 NLP 这个领域。NLP 领域自监督预训练的方法一般是采用自回归 (Autoregressive),或者掩码文本建模 (Masked Language Modeling),其特点是在模型容量,数据规模方面扩展了许多数量级,使得模型能力稳步提高,并发现模型开始具备了 "Zero-Shot" 能力,也叫零样本学习的能力,即无需在目标下游任务上面进行专门的训练,即获得对应的能力。旗舰产品比如 GPT-3,通过精心设计的大模型,在多数下游任务 (比如动作识别,OCR,ImageNet-1K 图像分类,细粒度图像分类任务) 上获得了极具竞争力的性能,博客链接如下。
GPT 系列超详细解读 (三):GPT-3:大型语言模型是少样本学习器 (opens new window)
[CV 领域当时没这个能力] 这些结果说明,使用超大规模的文本集合训练出的 NLP 模型性能是足以超越高质量,密集标注数据集训练的结果的。但是,反观 CV 领域,当时大家还在使用高质量,密集标注数据集 (如 ImageNet-1K) 进行预训练。
[CV 领域借助文本监督方法的性能很差] 我们不禁要问:能不能使用类似的方法,从大规模文本中学习,从而在计算机视觉领域取得类似的突破?前人已经有大量的探索,这里不再赘述。虽然这些探索可以证明这个概念可以实现,但是使用自然语言来监督,进行图像表征学习的工作仍然很少。这可能是因为借助本文监督方法的性能很差,在当时,ImageNet-1K 的 "Zero-Shot" 性能#ref_1仅有 11.5%,远低于当时 SOTA 的 88.5%。
[借助文本的监督方法属于有监督和无监督的一个中间地带] 借助文本的监督方法属于:"借助有限的标注数据进行有监督训练" 和 "借助几乎无限量的原始文本进行无监督训练" 二者之间的中间地带。相同的是,这两种方式都使用静态的 Softmax 分类器来执行预测,缺乏动态输出的机制。这严重限制了它们的灵活性和 "Zero-Shot" 能力。
[CLIP 方法及其结果] 在本文中作者研究了借助大规模自然语言监督训练图像分类器。互联网上存在大量公开可用的无标注文本数据集,作者创建了一个包含4亿对 (图像,文本) 的新数据集,并通过对比语言-图像预训练的方式训练了 CLIP 模型,是一种从自然语言监督中学习视觉模型的有效新方法。作者发现 CLIP 类似于 GPT 家族,在预训练期间学习执行一系列任务,包括动作识别,OCR,地理定位,ImageNet-1K 图像分类,细粒度图像分类任务等。作者通过在30多个现有数据集上对 CLIP 的 "Zero-Shot" 迁移学习性能进行测试,并发现 CLIP 可以与有监督训练得到的模型性能相当。比如,CLIP 在 ImageNet-1K 上的性能与专门有监督训练的 ResNet-50 相当,但是却没有使用 1.28M 的 ImageNet-1K 训练数据集。
1.2 自然语言的监督
本文方法的核心是从自然语言的监督中获得感知能力。只要是你的方法具备这一特点,都可以称之为 "接受了自然语言的监督"。那这种方法有哪些优势呢?其一就是可扩展性。因为它不需要经典机器学习方法中大量的有标签数据。
1.3 CLIP 的数据集
本文的一个主要特点是想利用互联网上大量公开可用的数据。由于现有的数据集 (MS-COCO 约100,000张,YFCC100M 高质量的仅仅约 15M 张,和 ImageNet-1K 大小相似) 不够大,可能会低估这一研究领域的潜力。
为了解决这个问题,作者构建了一个新的数据集,其中包含4亿对 (图像,文本) 对,这些数据来自互联网上各种公开可用的资源。而且这个数据清理得非常好,质量是非常高的,这也可能是 CLIP 这么强大的主要原因之一。结果数据集的总字数与用于训练 GPT-2 的 WebText 数据集相似,因此作者将此数据集称为 WebImageText (WIT)。
1.4 CLIP 的预训练方法
本文采取基于对比学习的高效预训练方法。作者的思路是这样的:一开始的方法是联合训练了一个处理图像的 CNN 和一个处理文本的 Transformer 模型,来预测图像的 caption。这个实验结果如下图1的蓝色曲线所示,可以看到其 Scalability 是很差的。橘红色曲线是预测文本的词袋,其效率是蓝色曲线的3倍。这两种方法都有一个关键的相似性,即试图去预测每幅图片对应的文字的确切单词是什么。但我们知道这可不是一件容易的事,因为与同一幅图像对应的描述、注释和相关文本种类繁多。
图1:不同方法的 Zero-Shot ImageNet-1K 精度
基于最近的图像对比表征学习方面的研究,可以仅预测整个文本与哪个图像配对,而不是该文本的确切单词,实验结果如下图1的绿色曲线所示,其效率是橘红色曲线的4倍。具体的做法是:
对比学习阶段:如下图2所示,给定一个 Batch 的
图2:CLIP 的对比学习阶段
伪代码如下图3所示。
图3:CLIP 对比学习伪代码
作者从头开始训练 CLIP,不使用 ImageNet-1K 权重初始化 Image Encoder,也不使用预先训练的权重初始化 Text Encoder。同时使用线性投影 (权重为
Zero-Shot Transfer:如下图4所示,这个阶段是使用 CLIP 的预训练好的 Image Encoder 和 Text Encoder 来做 Zero-Shot Transfer。比如来一张 ImageNet-1K 验证集的图片,我们希望 CLIP 预训练好的模型能完成这个分类的任务。但是你想想看,这个 Image Encoder 是没有分类头 (最后的 Classifier) 的,也就是说它没法直接去做分类任务,所以说呢 CLIP 采用了下面的 Prompt Template 模式:
比如来一张 ImageNet-1K 验证集的图片,作者把它喂入 CLIP 预训练好的 Image Encoder,得到特征
那我们就可以注意到貌似这个 prompt 的加入很关键,正好弥补了 Image Encoder 没有分类头的问题,又正好用上了 CLIP 训练好的 Text Encoder。
而且重要的是,CLIP 的这种推理的方法摆脱了类别的限制,比如一张 "三轮车" 的图片,假设 ImageNet 里面没有 "三轮车" 这个类,那么基于 ImageNet 所训练的任何模型都无法正确地讲这个图片分类为 "三轮车" ,但是 CLIP 的范式是可以做到的,只需要去做成一个 prompt:"A photo of a {tricycle}"。
那么我们不禁要问**:其他任务可以像这样使用 prompt 吗?或者什么样的 prompt 可以带来 Zero-Shot 的性能提升?**作者做了实验发现:
- 对于细粒度图像分类任务,比如 Oxford-IIIT Pets 数据集,prompt 就可以设置为:"A photo of a {label}, a type of pet."。比如 Food101 数据集,prompt 就可以设置为:"A photo of a {label}, a type of food."。比如 FGVC Aircraft 数据集,prompt 就可以设置为:"A photo of a {label}, a type of aircraft."
- 对于 OCR 任务,加上一些文本或者数字的引号可以提升性能。
- 对于卫星图像分类数据集,prompt 就可以设置为:"a satellite photo of a {label}."。
图4:CLIP 的 Zero-Shot Transfer
作者还开脑洞尝试了通过使用多个上下文的 prompt 来 Ensemble 多个 Zero-Shot 分类器,比如一个 prompt 是 'A photo of a big {label}",另一个 prompt 是 'A photo of a small {label}"。作者观察到这样可以可靠地提高性能。在 ImageNet 上,作者集成了 80 个不同的上下文提示,这比上面讨论的单个默认提示提高了 3.5% 的性能。当一起考虑时,如下图5所示是 Prompt 工程和 Ensemble 策略如何改变一组 CLIP 模型的性能,可以看到 Prompt 工程和 Ensemble 策略将 ImageNet 精度提高了近 5%,其中蓝色的线代表直接嵌入类名的结果。
图5:prompt 工程和 Ensemble 对 Zero-Shot 性能的影响
1.5 CLIP 的模型选择
对于 Image Encoder,作者尝试了改进版的 ResNet-50 和 ViT,对于 Text Encoder,作者使用改进版的 Transformer,作者使用了一个带有8个注意头的 63M 参数的12层512宽 Transformer 模型,其输入是一个大小为49152的词汇表的 BPE#ref_2小写表征。为了计算效率,最大序列长度为76。文本序列用 [SOS] 和 [EOS] 令牌括起来,[EOS] 处 Transformer 末层的输出被视为文本的特征,然后通过 LN,后接 Linear 层投影到多模态空间中。
至于模型缩放的问题,作者发现对于图像编码器 ResNet,同时缩放其深度,宽度,和输入分辨率的效果是最优的。而对于文本编码器 Transformer,作者只缩放模型的宽度,使其与 ResNet 宽度的计算增量成正比,而无需缩放深度,因为作者发现 CLIP 的性能对文本编码器的容量不太敏感。
1.6 零样本迁移 (Zero-Shot Transfer) 实验结果
本节中的 Zero-Shot 是指研究对未见过的数据集的泛化性能,也就是说一个模型训练号以后,在它从未见到过的新数据集上的性能如何。
CLIP 与 Visual N-Grams 的对比
作者这里对比了另外一种方法 Visual N-Grams,如下图6所示。最佳 CLIP 模型将 ImageNet 上的准确率从 11.5% 提高到 76.2%,并且与原始 ResNet-50 的性能相匹配。注意到 ResNet-50 是完全监督训练出来的,使用了全部的 ImageNet 训练集,而 CLIP 却没使用任何一张 ImageNet 训练集,这俩结果能力基本一致。CLIP 在其他2个报告的数据集上也优于 Visual N-Grams。在 Yahoo 上,CLIP 将错误数量减少了 95%,在 SUN 上,CLIP 将 Visual N-Grams 的准确性提高了一倍以上。
图6:CLIP 与 Visual N-Grams 的对比
Zero-Shot CLIP 与完全监督的基线相比具有竞争力
除此之外,作者进一步探索 CLIP 的 Zero-Shot 性能。为了说明这一点,作者比较了 CLIP 与基于 ResNet-50 完全监督的、正则化的逻辑回归分类器的性能。实验结果如下图7所示,在一共对比的27个数据集中,Zero-Shot CLIP 在16个数据集上面战胜了全监督的 ResNet-50 模型。
在细粒度分类任务上,可以观察到性能上的广泛差异。在其中两个数据集 (Stanford Cars 和 Food101) 上,Zero-Shot CLIP 在 ResNet-50 特征上的表现比逻辑回归好 20% 以上,而在另外两个数据集 (Flowers102 和 FGVCAircraft) 上,Zero-Shot CLIP 的表现比逻辑回归差 10% 以上。在 OxfordPets 和 Birdsnap 上,二者的表现更为接近。
在 ImageNet、CIFAR10/100、STL10 和 PascalVOC2007 等 "更广义的" 分类数据集上,二者的性能相对相似,在所有情况下,Zero-Shot CLIP 都有轻微的优势。在 STL10 上,CLIP 在不使用任何训练样本的情况下达到了 99.3% 的精度。在 Kinetics70 上,CLIP的表现比ResNet-50高出14.5%,在 UCF101 上,Zero-Shot CLIP 的性能也比 ResNet-50 的性能高出 7.7%。作者推测这估计是因为与 ImageNet 中以名词为中心的对象监督相比,自然语言对涉及动词的视觉概念提供了更广泛的监督。
也可以看到,Zero-Shot CLIP 在一些专业、复杂或抽象的任务上相当弱,如卫星图像分类 (EuroSAT 和RESISC45)、淋巴结肿瘤检测 (PatchCamelyon)、合成场景中的物体计数 (CLEVRCounts)、与自动驾驶相关的任务,如德国交通标志识别 (GTSRB)、识别到最近汽车的距离 (KITTI distance)。这些结果突出了 Zero-Shot CLIP 在更复杂任务中的较差能力。
图7:Zero-Shot CLIP 与完全监督的基线相比具有竞争力
CLIP 零样本迁移的 Data Efficiency
除此之外,作者还进行了一个有趣的实验,即探究 CLIP 的零样本迁移的性能与其他模型的少样本学习性能的比较。这里的其他模型,作者使用的是 ImageNet-21K 数据集上面预训练的 BiT-M ResNet-152x2。如下图8所示的结果是零样本迁移 (Zero-Shot Transfer) 的 data efficiency,即少样本学习 (Few-Shot Learning) 在样本量为多少时的性能能够跟上 CLIP 零样本迁移的性能。可以发现每个数据集的效率差异很大,从有的数据集不到一个标记到有的数据集需要184个标记。比如,Flowers102 数据集可以在 1-shot 的情况下就能够跟上 CLIP 零样本迁移的性能,但是像 FER2013 数据集在 184-shot 的情况下才能够做得到。平均估计数据效率为每个类 20.8 个示例。对于 ImageNet 数据集,CLIP 零样本迁移的结果与在相同特征空间上训练的 16-shot 线性分类器的结果相当。
图8:CLIP Zero-Shot Transfer 的 data efficiency
1.7 表征学习 (Representation Learning) 实验结果
为了更全面地评估 CLIP 模型的效果,作者进一步评估了它的表征学习能力。关于表征学习的评估方法,有很多方法来评估某个表征的质量,以及一个 "理想" 的表征应该具有哪些属性。一种比较常见的方法是冻住模型的骨干部分,只训练最后的分类器,通过在某个数据集上的精度来衡量提取到的特性的好坏。
如下图9所示是本文关于表征学习研究结果。作者首先研究了#ref_3论文的12个数据集,虽然像 ResNet-50 和 ResNet-101 这样的小型 CLIP 模型比在 ImageNet-1K 上训练的其他 ResNet 表现更好,但它们比在 ImageNet-21K (BiT-M) 上训练的 ResNet 表现更差。这些小型 CLIP 模型在具有类似计算需求的情况下,也不如 EfficientNet 系列的模型。作者继续在27个更多的数据集上做了相关研究,在这个更广泛的评估套件上,CLIP 的优势更加明显。所有 CLIP 模型,无论规模如何,在计算效率方面都优于其他模型。最佳模型的平均分数的提高从 2.6% 增加到 5%。
图9:CLIP 模型与最先进的计算机视觉模型 Linear Probe 性能的比较
作者还研究了 CLIP 的特征在各种各样的数据集上与最佳 ImageNet 模型的特征的比较。最佳 ImageNet 模型的特征用的是 Noisy Student EfficientNet-L2 的最佳模型的特征。结果发现在27个数据集上,CLIP 取得了21个数据集的优势。CLIP 在需要 OCR (SST2,HatefulMemes) ,地理定位和场景识别 (Country211, SUN397) 的任务上改进最多。此外,CLIP 在细粒度的汽车和交通标志识别方面也做得更好 (Stanford Cars 和 GTSRB)。
图10:CLIP 的特征在各种各样的数据集上优于最佳 ImageNet 模型的特征