![]() 极市导读 「经典永流传」再读CLIP! >>加入极市CV技术交流群,走在计算机视觉的最前沿 本文目录
太长不看版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 性能
论文地址: https:///pdf/2103.00020.pdf 官方博客: https:///research/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 图像分类,细粒度图像分类任务) 上获得了极具竞争力的性能,博客链接如下。 https://zhuanlan.zhihu.com/p/622067372 [CV 领域当时没这个能力] 这些结果说明,使用超大规模的文本集合训练出的 NLP 模型性能是足以超越高质量,密集标注数据集训练的结果的。但是,反观 CV 领域,当时大家还在使用高质量,密集标注数据集 (如 ImageNet-1K) 进行预训练。 [CV 领域借助文本监督方法的性能很差] 我们不禁要问:能不能使用类似的方法,从大规模文本中学习,从而在计算机视觉领域取得类似的突破?前人已经有大量的探索,这里不再赘述。虽然这些探索可以证明这个概念可以实现,但是使用自然语言来监督,进行图像表征学习的工作仍然很少。这可能是因为借助本文监督方法的性能很差,在当时,ImageNet-1K 的 "Zero-Shot" 性能[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的绿色曲线所示,其效率是橘红色曲线的4倍。具体的做法是: 对比学习阶段: 如下图2所示, 给定一个 Batch 的 个 (图片, 文本) 对, 图片输入给 Image Encoder 得到表征 ,文本输入给 Text Encoder 得到表征 ,作者认为 属于是正样本, 属于负样本。最大化 个正样本的 Cosine 相似度, 最小化 个负样本的 Cosine 相似度。 ![]() 伪代码如下图3所示。 ![]() 作者从头开始训练 CLIP,不使用 ImageNet-1K 权重初始化 Image Encoder,也不使用预先训练的权重初始化 Text Encoder。同时使用线性投影 (权重为) 将每个编码器的表征映射到多模态的嵌入空间。数据增强只使用随机裁剪,温度系数 \tau\tau 的对数形式随整个模型一起训练。 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, 得到特征 ,接下来把所有类别的词汇 "cat", "dog" 等, 做成一个 prompt: "A photo of a {object}", 并将这个 prompt 喂入 CLIP 预训练好的 Text Encoder, 依次得到特征 , 最后看哪个的余弦相似度和 最高, 就代表该图片是哪个类别的。 那我们就可以注意到貌似这个 prompt 的加入很关键,正好弥补了 Image Encoder 没有分类头的问题,又正好用上了 CLIP 训练好的 Text Encoder。 而且重要的是,CLIP 的这种推理的方法摆脱了类别的限制,比如一张 "三轮车" 的图片,假设 ImageNet 里面没有 "三轮车" 这个类,那么基于 ImageNet 所训练的任何模型都无法正确地讲这个图片分类为 "三轮车" ,但是 CLIP 的范式是可以做到的,只需要去做成一个 prompt:"A photo of a {tricycle}"。 那么我们不禁要问:其他任务可以像这样使用 prompt 吗?或者什么样的 prompt 可以带来 Zero-Shot 的性能提升? 作者做了实验发现:
![]() 作者还开脑洞尝试了通过使用多个上下文的 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%,其中蓝色的线代表直接嵌入类名的结果。 ![]() 1.5 CLIP 的模型选择对于 Image Encoder,作者尝试了改进版的 ResNet-50 和 ViT,对于 Text Encoder,作者使用改进版的 Transformer,作者使用了一个带有8个注意头的 63M 参数的12层512宽 Transformer 模型,其输入是一个大小为49152的词汇表的 BPE[2]小写表征。为了计算效率,最大序列长度为76。文本序列用 [SOS] 和 [EOS] 令牌括起来,[EOS] 处 Transformer 末层的输出被视为文本的特征,然后通过 LN,后接 Linear 层投影到多模态空间中。 至于模型缩放的问题,作者发现对于图像编码器 ResNet,同时缩放其深度,宽度,和输入分辨率的效果是最优的。而对于文本编码器 Transformer,作者只缩放模型的宽度,使其与 ResNet 宽度的计算增量成正比,而无需缩放深度,因为作者发现 CLIP 的性能对文本编码器的容量不太敏感。 1.6 零样本迁移 (Zero-Shot Transfer) 实验结果本节中的 Zero-Shot 是指研究对未见过的数据集的泛化性能,也就是说一个模型训练号以后,在它从未见到过的新数据集上的性能如何。
作者这里对比了另外一种方法 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 的准确性提高了一倍以上。 ![]()
除此之外,作者进一步探索 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 在更复杂任务中的较差能力。 ![]()
除此之外,作者还进行了一个有趣的实验,即探究 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 线性分类器的结果相当。 ![]() 1.7 表征学习 (Representation Learning) 实验结果为了更全面地评估 CLIP 模型的效果,作者进一步评估了它的表征学习能力。关于表征学习的评估方法,有很多方法来评估某个表征的质量,以及一个 "理想" 的表征应该具有哪些属性。一种比较常见的方法是冻住模型的骨干部分,只训练最后的分类器,通过在某个数据集上的精度来衡量提取到的特性的好坏。 如下图9所示是本文关于表征学习研究结果。作者首先研究了[3]论文的12个数据集,虽然像 ResNet-50 和 ResNet-101 这样的小型 CLIP 模型比在 ImageNet-1K 上训练的其他 ResNet 表现更好,但它们比在 ImageNet-21K (BiT-M) 上训练的 ResNet 表现更差。这些小型 CLIP 模型在具有类似计算需求的情况下,也不如 EfficientNet 系列的模型。作者继续在27个更多的数据集上做了相关研究,在这个更广泛的评估套件上,CLIP 的优势更加明显。所有 CLIP 模型,无论规模如何,在计算效率方面都优于其他模型。最佳模型的平均分数的提高从 2.6% 增加到 5%。 ![]() 作者还研究了 CLIP 的特征在各种各样的数据集上与最佳 ImageNet 模型的特征的比较。最佳 ImageNet 模型的特征用的是 Noisy Student EfficientNet-L2 的最佳模型的特征。结果发现在27个数据集上,CLIP 取得了21个数据集的优势。CLIP 在需要 OCR (SST2,HatefulMemes) ,地理定位和场景识别 (Country211, SUN397) 的任务上改进最多。此外,CLIP 在细粒度的汽车和交通标志识别方面也做得更好 (Stanford Cars 和 GTSRB)。 ![]() 参考
|
|