paper:https://arxiv.org/abs/2103.00020
代码:GitHub - openai/CLIP: Contrastive Language-Image Pretraining
摘要
作者提出的CLIP使用的预训练方法:预测哪个标题与哪个图片相配这一简单的预训练任务是一种高效且可扩展的方式,可以在从互联网上收集的4亿对(图片、文本)数据集上从头开始学习SOTA图片表征。在预训练之后,自然语言被用来引用所学的视觉概念(或描述新的概念),使模型能够zero-shot地转移到下游任务中。
该模型可以不费吹灰之力地转移到大多数任务中,并且通常与完全监督的基线竞争,而不需要任何特定的数据集训练。例如,作者在ImageNet的zero-shot中与原始ResNet-50的准确度相当,而不需要使用它所训练的128万个训练实例中的任何一个。
动机
直接从原始文本学习的预训练方法在过去几年中彻底改变了自然语言处理,种种结果表明,在网络规模的文本集合中,现代预训练方法可访问的聚合监督超过了高质量的人群标记的 NLP 数据集。然而,在计算机视觉等其他领域,在 ImageNet 等人工标记的数据集上预训练模型仍然是主流做法。作者提出疑问:直接从网络文本中学习的可扩展预训练方法能否在计算机视觉领域取得类似的突破?
随后作者介绍了一些前人的做法,肯定了他们的贡献同时也指出了其不同的局限性。如:自然语言能够通过其普遍性来表达并监督更广泛的视觉概念。此前方法都使用静态 softmax 分类器来执行预测,并且缺乏动态输出机制。这严重限制了他们的灵活性并限制了他们的“zero-shot”能力。

图 2. CLIP 在zero-shot传输方面比我们的图像标题基线更有效。尽管表现力很强,但我们发现基于transformer的语言模型在zero-shot的 ImageNet 分类中相对较弱。在这里,我们看到它的学习速度比预测文本的词袋 (BoW) 编码的基线慢 3 倍 。将预测目标换成 CLIP 的对比目标进一步将效率提高了 4 倍。
方法
自然语言监督
论文方法的核心是从自然语言中包含的监督信息中学习感知的想法。其实这不是一个新想法,而且用于描述该领域工作的术语是多种多样的,甚至看似矛盾的,并且陈述的动机也是是多种多样的。此前很多工作者都引入了从与图像配对的文本中学习视觉表示的方法,但将其方法描述为了无监督、自我监督,弱监督和监督等各种各样。
与其他训练方法相比,从自然语言中学习有几个潜在的优势。与用于图像分类的标准化标签相比,扩展自然语言监督要容易得多,因为它不要求注释采用经典的 "机器学习兼容格式",如经典的1-N多数票 "黄金标签"。相反,在自然语言上工作的方法可以被动地从互联网上大量的文本中的监督中学习。与大多数无监督或自我监督的学习方法相比,从自然语言中学习也有一个重要的优势,那就是它不 "只是 "学习一个表征,而且还将该表征与语言联系起来,从而实现灵活的zero-shot。在以下几个小节中,我们将详细介绍论文所确定的具体方法。
创建一个足够大的数据集
此前同类型的工作主要使用三个数据集:MS-COCO、Visual Genome和YFCC100M。虽然MS-COCO和Visual Genome是高质量的人工标记的数据集,但以现代标准和算力来看,它们的规模仍然很小:大约有10万张训练照片。相比之下,其他计算机视觉系统是在多达35亿张Instagram照片上训练的。YFCC100M有1亿张照片,是一个可能的选择,但每张图片的元数据是稀疏的,而且质量不一。许多图像使用自动生成的文件名,如20160716 113957.JPG作为 "标题",或包含相机曝光设置的 "描述"。经过过滤,只保留有自然语言标题和/或英文描述的图片,数据集缩小了6倍,只有1500万张照片。这与ImageNet的规模大致相同。每个查询包括多达20,000个(图像,文本)对,由此产生的数据集与用于训练GPT-2的WebText数据集的总字数相似。作者把这个数据集称为WebImageText的WIT。
预训练方法
最先进的计算机视觉系统都使用非常大的计算量(本文有过之而无不及)。从自然语言中学习一套开放的视觉概念的任务似乎很艰巨。在作者团队的努力过程中,最终发现训练效率是成功扩展自然语言监督的关键,于是根据这个指标选择了最终的预训练方法。
最初的方法与VirTex类似,从头开始联合训练一个图像CNN和文本transformer,以预测图像的标题。然而遇到了有效扩展这种方法的困难。在图2中显示,一个6300万参数的transformer语言模型,已经使用了其ResNet-50图像编码器的两倍计算量且速度更慢。
最近在图像的对比性表征学习方面的工作发现,对比性目标可以比其同等的预测性目标学到更好的表征。其他工作发现,尽管图像的生成模型可以学习高质量的图像表征,但它们需要的计算量比具有相同性能的对比性模型多一个数量级。注意到这些发现,我们探索训练一个系统来解决潜在的更容易的代理任务,即只预测哪个文本作为一个整体与哪个图像配对,而不是预测该文本的确切字数。
给定一批N个(图像,文本)配对,CLIP被训练来预测整个批次的N×N个可能的(图像,文本)配对中哪些是正样本,哪些是负样本。基于此,CLIP尝试着通过联合训练图像编码器和文本编码器,使批次中N个真实配对的图像和文本embedding的余弦相似度最大化,从而使不配对的图像文本余弦相似度最小化。
由于作者的预训练数据集的规模很大,过度拟合不是一个主要的问题(四亿张图片哎)。因此训练CLIP的细节被论文简化。我们从头开始训练CLIP,没有用ImageNet的权重初始化图像编码器,也没有用预训练的权重初始化文本编码器。而且不使用表征和对比嵌入空间之间的非线性投影而只使用线性投影。因为CLIP的预训练数据集中的许多(图像,文本)对都只是一个单一的句子。因此还简化了图像转换函数tv。训练过程中唯一使用的数据增量就是从调整后的图像中随机裁剪成正方形。
选择和扩展一个模型
论文为图像编码器考虑了两种不同的架构。对于第一个架构,使用ResNet-50作为图像编码器的基础架构,而且还用注意力机制取代了全局平均池化层。注意力池化层被实现为单层的 "transformer式 "多头QKV注意力。对于第二个架构,论文使用最近推出的ViT,
文本编码器是一个Transformer作为基本规模,我们使用一个63M参数的12层512宽模型,有8个注意头,为了提高计算效率,最大的序列长度被限定为76。

图3类似Numpy的伪代码,用于实现CLIP的核心思想。
训练
论文训练了一系列 5 个 ResNet和 3 个 Vision Transformer。对于 ResNet,我们训练了一个 ResNet-50、一个 ResNet-101,然后是另外 3 个,它们遵循 EfficientNet 样式的模型缩放,并使用 ResNet-50 的大约 4 倍、16 倍和 64 倍的计算。它们分别表示为 RN50x4、RN50x16 和 RN50x64。对于 Vision Transformers,我们训练了 ViT-B/32、ViT-B/16 和 ViT-L/14。我们训练所有模型 32 个 epoch。我们使用 Adam 优化器和解耦权重衰减正则化 应用于所有非增益或偏差的权重,并使用余弦调度 衰减学习率,在训练 1 个 epoch 时,使用网格搜索、随机搜索和手动调整基线 ResNet50 模型的组合来设置初始超参数。使用混合精度 加速训练和节省内存。为了节省额外的内存,使用了梯度检查点 check pointing 、半精度 Adam 统计 和半精度随机舍入文本编码器权重。嵌入相似度的计算也与单个 GPU 分片,仅计算其本地批次嵌入所需的成对相似度子集。
最大的模型RN50x64在592块 V100 GPU上训练了18天的时间,而最大的VIT在256 块V100 上花费了12天。对于 ViT-L/14,我们还以更高的 336 像素分辨率预训练了一个额外的 epoch,以提高类似于 FixRes 的性能。我们将此模型表示为 ViT-L/14@336px。除非另有说明,否则本文中报告为“CLIP”的所有结果均使用我们

CLIP模型采用对比学习方法,从互联网上抓取的大量图文数据中学习视觉表征,能够zero-shot迁移到多种图像分类任务中。该模型通过预测图片与其对应标题的匹配关系进行预训练,展现出与监督学习模型相近的性能。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



