Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

    • Multimodal_Survey
    • CLIP全文翻译
    • CLIP解读一
    • CLIP解读二
      • 1 CLIP:大规模语言-图像对比预训练实现不俗 Zero-Shot 性能
      • 参考
  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • 多模态
Geeks_Z
2024-12-03
目录

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 的 N 个 (图片,文本) 对,图片输入给 Image Encoder 得到表征 I1,I2,...,IN ,文本输入给 Text Encoder 得到表征 T1,T2,...,TN ,作者认为 (Ij,Tj) 属于是正样本, (Ij,Tk) 属于负样本。最大化 N 个正样本的 Cosine 相似度,最小化 N2−N 个负样本的 Cosine 相似度。

图2:CLIP 的对比学习阶段

伪代码如下图3所示。

图3:CLIP 对比学习伪代码

作者从头开始训练 CLIP,不使用 ImageNet-1K 权重初始化 Image Encoder,也不使用预先训练的权重初始化 Text Encoder。同时使用线性投影 (权重为 Wi,Wt ) 将每个编码器的表征映射到多模态的嵌入空间。数据增强只使用随机裁剪,温度系数 τ 的对数形式随整个模型一起训练。

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,得到特征 I1 ,接下来把所有类别的词汇 "cat", "dog" 等,做成一个 prompt:"A photo of a {object}",并将这个 prompt 喂入 CLIP 预训练好的 Text Encoder,依次得到特征 T1,T2,...,TN ,最后看哪个的余弦相似度和 I1 最高,就代表该图片是哪个类别的。

那我们就可以注意到貌似这个 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 模型的特征

参考

  1. #ref_1_0Learning Visual N-Grams from Web Data
  2. #ref_2_0Neural Machine Translation of Rare Words with Subword Units
  3. #ref_3_0Do Better ImageNet Models Transfer Better?
#CLIP
上次更新: 2025/07/06, 13:25:25
CLIP解读一
知识蒸馏概述

← CLIP解读一 知识蒸馏概述→

最近更新
01
优化器
07-04
02
weight_decay
07-03
03
帮助信息查看
06-08
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式