CLIP: Learning Transferable Visual Models From Natural Language Supervision

目录

  • Introduction
  • Approach
    • CLIP
    • Prompt Engineering and Ensembling
  • Experiments
    • Analysis of Zero-shot CLIP Performance
    • Representation Learning
    • Robustness to Natural Distribution Shift
  • Limitations
  • References

CLIP: Contrastive Language-Image Pre-training

Introduction

  • 在 NLP 领域,基于自监督学习的预训练模型已是大势所趋,但在 CV 领域,使用标注数据集进行预训练仍是行业主流。作者认为,在这种有监督学习中,标签是唯一提供视觉概念的数据,而这实际上限制了模型的泛化能力。为此,作者提出了一种新的预训练方法 CLIP,直接在 4 亿个 image-text pair 上进行对比学习,通过将自然语言作为图片的监督信号,预训练后的模型可以直接在诸多下游任务上进行 zero-shot inference
  • CLIP 的迁移学习能力非常强,作者在 30 个 CV 数据集上测试了预训练模型的性能,测试任务涵盖了 OCR, action recognition in videos, geo-localization 以及其他细粒度的物体分类任务,结果 CLIP 能很好地迁移到大部分任务上并且甚至不需要任何 dataset specific training (i.e. zero-shot) 就能经常达到和有监督的基线模型相近的效果。例如,CLIP 没有使用 ImageNet 训练集的任何图片做预训练就达到了有监督的 original ResNet-50 的精度

Approach

CLIP

CLIP: Learning Transferable Visual Models From Natural Language Supervision_第1张图片CLIP: Learning Transferable Visual Models From Natural Language Supervision_第2张图片

注意到,CLIP 在 representation 和 contrastive embedding space 之间并没有使用 non-linear projection,而是使用了一个线性投射层来将文本和图像特征投影到 multi-modal embedding space 中。作者指出在 CLIP 的训练中,这两种方案都差不多,非线性的投影层应该只是用来适配纯图片的单模态学习的。同时,温度参数 τ \tau τ 是直接由梯度下降而非作为超参数进行优化的

  • Natural Language Supervision: 如上图所示,给定 N N N 个 image-text pair,模型通过 image encoder 和 text encoder 分别对其编码,然后利用对比学习的思想,对于每张图片,匹配的 text 为正样本,同一 batch 内的其余 text 为负样本,形成了 N N N 个正样本和 N 2 − N N^2-N N2N 个负样本,这样就可以利用自然语言提供的监督信号进行对比学习 (这样的对比学习任务比起给定图片预测文本的预训练任务要简单得多,在训练时也更加高效,这对于大规模的预训练是非常重要的)
  • Creating a Sufficiently Large Dataset (WebImageText, WIT): 对比学习需要大量的数据,因此作者还专门从网上收集了 4 亿个 image-text pair 用于模型训练,这也是 CLIP 能够成功的重要因素之一。同时,由于采用了大数据集进行训练,CLIP 在预训练时不会出现过拟合,并且也不需要使用太多的数据增强,只使用了 random square crop 这一个数据增强操作
  • Zero-Shot Transfer: CLIP 使用 prompt template 进行 zero-shot 的迁移推理。以 ImageNet 为例,CLIP 就是先把 ImageNet 里的 1000 个类变成 1000 个诸如 “A photo of a {object}” 的句子,然后由 text encoder 进行编码后与 image encoder 得到的图片特征计算余弦相似度即可,最大相似度对应的类别即为推理类别。这一设计使得 CLIP 能够有效识别出新的类别,彻底摆脱了类别标签的束缚,不论在训练还是推理的时候都不需要提前定好类别列表。而且 CLIP 不光能识别新的物体,由于它将视觉语义和文字语义联系到了一起,所以它学到的特征语义性非常强,迁移效果也非常好 (如果不用 zero-shot 推理而是将预训练的 backbone 冻住再额外训练一个 linear classifier,CLIP 性能也优于 ImageNet 上的有监督模型)

Choosing and Scaling a Model

  • image encoder 的结构可以选择 ResNet-50ViT。作者在使用 ResNet-50 时还做了一些改动,使用了 ResNet-D improvements 和 antialiased rect-2 blur pooling,同时将 global average pooling 替换为了 attention pooling (i.e. a single l ayer of “transformer-style” multi-head QKV attention where the query is conditioned on the global average-pooled representation of the image)。在使用 ViT 时,作者在 patch embedding 和 position embedding 层之后加了 layer normalization 并且使用了不同的初始化方式
  • text encoderTransformer 并遵循了 GPT-2 中的改动。为了计算的高效,文本序列长度最大仅为 76,由特殊 token [SOS][EOS] 包围,其中 [EOS] 的输出为整个文本的特征表示,在经过 layer norm 后投影到 embedding space
  • 扩展模型规模时,作者选择按照计算成本均匀地增加 image encoder 的宽度、深度和分辨率。由于作者发现 CLIP 的性能对 text encoder 的能力不太敏感,因此只增加了 text encoder 的宽度

Training

  • CLIP 训练时的工程优化细节可参考论文 2.5 节。最终获得的最佳模型的 image encoder 使用 ViT-L/14 并且在更大的分辨率 ViT-L/14@336px 上进行了 fine-tune 以获得进一步的性能提升

Prompt Engineering and Ensembling

Common issues in prompt engineering

  • (1) polysemy (多义性): 如果在做 prompt engineering 时只提供给 text encoder 一个单词,那么由于缺乏上下文信息,很容易出现多义性问题,例如 construction cranes (起重机) 和 cranes (鹤),boxer (一种狗) 和 boxer (拳击手)
  • (2) 在预训练数据集中,与图片匹配的文本大多为一整个句子,包含不止一个单词

Prompt Template

  • 为了减少 distribution gap,作者采用了 “A photo of a {label}.” 作为 prompt template,这在 ImageNet 上比仅使用 label text 提升了 1.3% 的性能
  • 同时,根据数据集调整 prompt text 也可以显著提高 zero-shot 的性能。例如在 Oxford-IIIT Pets 上做分类任务时,prompt text 使用 “A photo of a {label}, a type of pet.”;在做卫星图片分类时,prompt text 使用 “a satellite photo of a {label}.”;在 OCR 数据集上时,给想找的文本或数字加上双引号

Prompt Ensembling

  • Prompt Ensembling 就是将几个 zero-shot classifiers 集成起来,每个分类器都使用不同的 prompt template,例如 “A photo of a big {label}” 和 “A photo of a small {label}”。另外,CLIP 是在 embedding space 而非 probability space 上进行集成的,这样可以节约计算成本
  • 在大多数数据集上,Prompt Ensembling 都能提高模型性能。例如在 ImageNet 上,作者集成了 80 个不同的 context prompts 使得性能提升了 3.5%

Experiments

Analysis of Zero-shot CLIP Performance

zero-shot transfer

CLIP: Learning Transferable Visual Models From Natural Language Supervision_第3张图片

  • CLIP 在普通的物体分类数据集上 (e.g. StanfordCars, Food, CIFAR10, CIFAR100…) 一般都表现得比较好。但对于一些更难的数据集 (e.g. 对纹理进行分类的数据集 DTD,对图片中物体进行计数的数据集 CLEVERCounts),CLIP 在进行 zero-shot transfer 时就表现不佳了,因此作者认为对于这些较难的数据集,做 few-shot transfer 会更加合理,为此,作者还进行了 few-shot transfer 的实验

few-shot transfer

CLIP: Learning Transferable Visual Models From Natural Language Supervision_第4张图片

Representation Learning

  • 作者为了进一步研究 CLIP 学得特征的泛化性,还做了额外的实验,就是使用数据集中的全部数据进行 linear probe (不用 fine-tune 的原因是 linear probe 相比 fine-tune 更加不灵活,因此更能反映出预训练模型的好坏,此外 linear probe 还不太用调参,大大减少了在多个数据集上测试的工作量)

CLIP: Learning Transferable Visual Models From Natural Language Supervision_第5张图片
CLIP: Learning Transferable Visual Models From Natural Language Supervision_第6张图片

Robustness to Natural Distribution Shift

CLIP: Learning Transferable Visual Models From Natural Language Supervision_第7张图片

Limitations

  • (1) 尽管 CLIP 的性能在平均上看比 ResNet-50 要好,但 ResNet-50 其实在大多数数据集上性能都远低于 SOTA,因此 CLIP 的性能并非不可一世。另外,虽然加大模型规模可以提高模型性能,但作者预测需要当前 1000 倍的计算量才可以使得 zero-shot 的 CLIP 在总体上达到 SOTA,因此,需要进一步提高 CLIP 的计算和数据高效性 (computational and data efficiency)
  • (2) CLIP 在有些任务上的 zero-shot 性能并不好,与一些 task-specific 的模型相比,CLIP 的性能在一些细分类任务上效果不佳 (e.g. differentiating models of cars, species of flowers, and variants of aircraft). 另外,CLIP 在一些更加抽象和系统性的任务上也表现不佳 (e.g. counting the number of objects in an image). 最后,对于一些不太可能被包含在 CLIP 预训练数据集中的新任务,CLIP 的性能接近于随机 (e.g. classifying the distance to the nearest car in a photo)
  • (3) 虽然 zero-shot CLIP 泛化性能比较好,但当数据真的 out-of-distribution 时,zero-shot CLIP 泛化性能也很差。例如,CLIP 在数字渲染的文本上能学得高质量的 semantic OCR representation,但由于 CLIP 的预训练数据集中没有像 MNIST 一样的图片,CLIP 只在手写数字数据集 MNIST 上取得了 88% 的精度,就连简单的逻辑回归也能超过 CLIP 的性能
  • (4) CLIP 在做 zero-shot transfer 时仍然需要利用 prompt engineering 从给定的几个类别中进行选择,没有 image captioning 这种生成式任务灵活,因此将对比目标和生成目标一起训练也是一个值得尝试的方向
  • (5) CLIP 没有解决深度学习中低数据利用率的问题,而是转而通过自然语言提供的监督信号在大规模数据集上训练。将 CLIP 与 self-supervision 和 self-training 结合也是一个比较有前途的方向
  • (6) 尽管 CLIP 一直在讨论 zero-shot transfer,但作者在研发 CLIP 时一直在 ImageNet 验证集上做测试,这就在无形中打破了 zero-shot 的限制,另外作者用于测试的 27 个数据集也与 CLIP 的研发过程息息相关。新建一个评估 zero-shot transfer capabilities 的数据集能帮助解决该问题
  • (7) 由于 CLIP 预训练的数据集是从网上爬的,因此 CLIP 模型也会学到很多社会偏见
  • (8) 用自然语言做监督信号也有它的局限性,很多复杂的任务和视觉概念即使用文本也无法描述,这时用一些训练样本去微调模型就很重要了,但 CLIP 并没有直接优化 few-shot 性能。例如在之前的 “few-shot transfer” 实验中可以看到,4-shot linear probe CLIP 的性能才能刚刚达到 zero-shot CLIP 的性能。因此,将 CLIP 强大的 zero-shot 性能与高效的 few-shot learning 结合是十分必要的

References

  • paper: Learning Transferable Visual Models From Natural Language Supervision
  • code and pre-trained model weights: https://github.com/OpenAI/CLIP
  • CLIP 论文逐段精读【论文精读】

你可能感兴趣的:(#,多模态,深度学习,机器学习,计算机视觉)