[论文阅读笔记] Learning Transferable Visual Models From Natural Language Supervision

Abstract

将LLM带来的语言zero-shot能力扩展到图像领域,让图像pretrain不再局限于由数据集定义的类别,从而大幅度提升在downstream任务zero-shot的精度。文章提供了从零预训练的CLIP模型,用以训练的大数据集,以及基于对比学习的对齐方案。

Introduction

NLP领域下,使用大量数据pretrain > 使用高质量标注数据集。

→ \rightarrow CV是否也可以使用相似方法做pretrain?

→ \rightarrow 前人工作:

  1. 借助language supervision去指导图像representation生成。优点:数据量少;缺点:性能差
  2. 借助图像大数据集做pretrain。优点:性能好;缺点:数据量大,训练成本高

→ \rightarrow CLIP:融合两者,使用大规模语言数据来训练图像分类器。

  1. 使用互联网资料,创建巨型image-text数据集WIT
  2. 从零pretrain模型CLIP

Approach

语言中自行包含了Supervision信息,无需人为label也可以学习到知识;语言模型具备又zero-shot的潜力
→ \rightarrow 因此,将image的representation和语言关联非常有必要

现有数据集要么高质量但是数量少;要么低质量数量多,但做完筛选后数量很少。
→ \rightarrow 网络上面拉数据
→ \rightarrow 为保证多样性,筛选出text中含有50000对象名词中任何一个名词的数据对[这些对象名词从Wikipedia里面筛选,标准是出现了至少100次]
→ \rightarrow 为保证类别均衡,每类包含20000对(image,text)序列

pretrain对于计算量要求巨大
→ \rightarrow CNN+Transformer结构预测image的caption:参数量巨大;为了达到相同zero-shot能力,比BOW多花费了三倍训练量。
→ \rightarrow 问题的关键:这个架构试图去预测一段准确的描述性文字来作为caption,这个任务难度非常高。
→ \rightarrow CL可以学习到高性能的image representation,同时CL任务训练量很低。
→ \rightarrow 使用BOW encoder把text变成模糊概念,再将图文做CL任务,发现在减少训练量的同时提高了zero-shot性能 [这就是文中说的proxy task,具体代码见fig3]

Experiment

现有Unsupervised Learning的benchmark关注点在于特征提取能力
→ \rightarrow zero-shot的benchmark关注在于模型对这一类任务的掌握程度 [文中的task-learning]
→ \rightarrow 前人zero-shot工作:用图片去预测对应caption的n-gram,让他们预测概率最高。下游evaluation时对类别标签同样做n-gram,用下游图片去预测概率最大的类别n-gram。
→ \rightarrow CLIP:将language中学习到的zero-shot能力运用到CV上,可以视为每个batch(bs=32768)是32768个类别,每个类别对应一张图片[因为同类图片caption也可能不一致]。下游evaluation阶段会一次性计算数据集中所有类对应的text encoder output,然后计算每张图像output和标签的representation的近似度来估计分类。

常用的image dataset仅停留在类别层面。每类有一个类别名,训练时将类别名映射到index做训练。有一些数据集中,同一个词的不同意思会作为多个类出现,而因为没有上下文,text encoder会把它们认定为同一个意思。但是CLIP的text encoder如果只输入一个类别名称而没有上下文,效果会很差。
同时,CLIP用的pretrain数据集的text部分几乎不会出现只有一个类别名称的情况,一般都是一句完整句子。
→ \rightarrow 在不同数据集不同类别上加入一些人工prompt,让label单词变成短语或句子。

  • zero-shot能力评估
    CLIP在一些复杂数据集上zero-shot效果弱于supervised Resnet50
    → \rightarrow pretrain数据集中对于这些领域expert的信息较少
    → \rightarrow 看一下few-shot的效果,发现few-shot在每个类有类标样本数量达到一定值的时候效果才和zero-shot一致
    → \rightarrow 下游supervised learning中的example破坏了data内的关联性,模型学不出图像中哪些位置是对于任务有帮助的
    → \rightarrow 增加l2惩罚,减少参数的变化量

  • 常见的representation评估方案:1直接加linear classifier看acc;2加classifier后做微调看acc
    CLIP的representation在大部分下游任务中都强于Imagenet pretrain的模型,但在简单下游任务中效果不如Imagenet pretrain
    → \rightarrow 可能是因为CLIP的pretrain阶段没有做augmentation

  • 鲁棒性评估:大部分模型在测试集上性能好是因为它们捕捉了训练集中每个类惯用的一些信息,而在数据集加入了nature shift后,性能骤降。

  • Data Overlap:常见于pretrain,指的是下游evaluate的任务的测试集在pretrain阶段已经被模型学习过了。

Code

  1. clip.load()

超参数JIT代表使用了’just in time’编译技术优化的CLIP模型,提高运行速度。

  1. Linear-probe evaluation

使用sklearn训练一个输入image的feature,输出对应类别的线性分类器(head)。

你可能感兴趣的:(笔记,论文阅读,笔记)