赞
踩
一段时间没看论文,又成堆了,抽个时间阅读并做个笔记,水平有限,错误难免,欢迎指正和交流学习提高。
本论文是从自然语言的监督学习中,应用到视觉领域,主要就是图片(视频<这里涉及到耗时太长,也是从视频中截取中心帧组合的图片集>)和文本的组合训练,这种预训练对于提供给下游没有样本的任务还是很棒的。
虽然深度学习已经彻底改变了计算机视觉,但目前的方法存在几个主要问题:典型的视觉数据集是劳动密集型的,创建成本高,因为需要花很多人力财力去收集图片和打标签,而且标准的视觉模型只擅长所在数据集类的任务,换句话来说除了成本之外,就是不够通用,都属于比较专一的视觉分类。
如果能够直接从原始文本中学习图像,那将是一种很有前途的选择,它利用了更广泛的监督来源。在预训练之后,使用自然语言来参考学习到的视觉概念(或描述新的概念),从而实现模型向下游任务的零样本转移。
我们通过对30多个不同的现有计算机视觉数据集进行基准测试来研究这种方法的性能,这些数据集涵盖了人脸、动物、OCR(光学字符识别)、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。
所以论文提出了这么个神经网络,旨在解决这些问题:它是在各种各样的图像上训练的,具有各种各样的自然语言监督,这些监督在互联网上大量可用。通过设计,可以用自然语言指示网络执行各种各样的分类基准测试,而无需直接优化基准测试的性能,类似于GPT-3这样的“零样本zero-shot”能力。
证明了预测哪个标题与哪个图像相匹配的简单预训练任务是一种有效且可扩展的方法,可以在从互联网收集的4亿对(图像,文本)数据集上从头开始学习目前最先进的图像表示。
标准图像模型联合训练一个图像特征提取器和一个线性分类器来预测一些标签,CLIP(Contrastive Language-Image Pre-Training对比语言图像预训练)联合训练一个图像编码器和一个文本编码器来预测一批(图像,文本)训练样本的正确配对。在测试时,学习的文本编码器通过嵌入目标数据集的类的名称或描述来合成零成本线性分类器。
如下图:
这里的(图像,文本)样本对,收集了4亿对的新数据集(这些数据来自互联网上各种公开可用的资源),并演示了简化版本的从头开始训练的ConVIRT,我们称之为CLIP,是一种从自然语言监督中学习的有效方法。
对比预训练:组合文本编码与图像编码器为一个N*N矩阵,对角线就是余弦相似度最高的,为正类样本,其余就是负类样本
从标签文本创建分类器:我们将标签文本做成了句子,在分类标签object前面加了修饰A photo of a {object}.这是一种很有价值的做法,在后面会具体讲到。
我们跟零样本的ImageNet的转移进行了比较,发现更加有效,速度更快,模型更健壮,如下图:
这个结果也说明了其泛化性能的强大,尤其对于不可知任务的预测都非常有效果,也体现了其通用性。
目前最好的计算机视觉系统的计算量都非常大,比如ImageNet只能预测1000个分类。
如果从自然语言中学习一组开放的视觉概念的任务似乎令人望而生畏,所以训练效率是一个很关键的因素。我们放弃用常规的预测方法,只预测哪个文本作为一个整体与哪个图像配对。
通过联合训练图像编码器和文本编码器,使批处理中N对图像和文本嵌入的余弦相似度最大化,同时使N²−N对错误的图像和文本嵌入的余弦相似度最小,然后在这些相似性得分上优化对称交叉熵损失。
由于我们的预训练数据集很大,过度拟合不是主要问题,并对训练CLIP的细节做了简化。 我们从头开始训练CLIP,而不使用ImageNet权重初始化图像编码器或使用预训练权重初始化文本编码器,使用线性投影将每个编码器的表示映射到多模态嵌入空间,而且整个训练期间唯一的数据增强就是随机裁剪,最后,控制softmax中对数范围的温度参数τ在训练过程中被直接优化为对数参数化的乘法标量,以避免变成超参数。
- # 图像编码 - ResNet or Vision Transformer
- # 文本编码 - CBOW or Text Transformer
- # I[n, h, w, c] - minibatch of aligned images
- # T[n, l] - minibatch of aligned texts
- # W_i[d_i, d_e] - learned proj of image to embed 图像嵌入投影
- # W_t[d_t, d_e] - learned proj of text to embed 文本嵌入投影
- # t - learned temperature parameter
- #提取图像与文本的特征
- I_f = image_encoder(I) #[n, d_i]
- T_f = text_encoder(T) #[n, d_t]
- #联合多模态嵌入[n, d_e]
- I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
- T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
- #缩放成对余弦相似度[n, n]
- logits = np.dot(I_e, T_e.T) * np.exp(t)
- # 对称损失函数(两个交叉熵损失函数的均值)
- labels = np.arange(n)
- loss_i = cross_entropy_loss(logits, labels, axis=0)
- loss_t = cross_entropy_loss(logits, labels, axis=1)
- loss = (loss_i + loss_t)/2
图像编码器:两种不同架构。
首先,我们使用ResNet-50作为图像编码器的基础架构,因为它被广泛采用并且性能成熟。我们使用ResNetD改进和抗锯齿的rect-2模糊池对原始版本进行了一些修改,将全局平均池化层替换为注意力池化机制。
注意力池被实现为一个单层的"transformer-style"多头QKV注意力,其中查询以全局平均池为条件图像的表示。
第二个体系结构,我们使用最近介绍的Vision Transformer进行实验,对转换器之前的组合贴片和位置嵌入添加了额外的层规范化,并使用略有不同的初始化方案。
文本编码器:使用Transformer转换器,作为基本尺寸,我们使用一个具有8个注意力头的63M参数的12层512宽的模型。转换器对具有49152词汇表大小的文本的小写字节对编码(BPE)表示进行操作,为了计算效率,最大序列长度被限制在76。文本序列用[[SOS]和EOS]令牌括起来,[EOS]令牌处转换器最高层的激活被视为文本的特征表示,文本被层归一化,然后线性投影到多模态嵌入空间中。
相比以前的计算机视觉研究通常通过单独增加宽度或深度来缩放模型,我们这里使用一个简单的基线,平均分配额外的计算来增加模型的宽度、深度和分辨率。
对于文本编码器,我们只缩放模型的宽度,使其与ResNet宽度的计算增量成正比,而根本不缩放深度,因为我们发现CLIP的性能对文本编码器的容量不太敏感。
我们训练5个ResNets和3个Vision Transformers。
对于ResNet,我们训练了ResNet-50, ResNet-101,4倍ResNet-50,16倍ResNet-50和64倍ResNet-50
对于Vision Transformers,我们训练了一个ViT-B/32,一个ViT-B/16和一个ViT-L/14。
所有模型都训练32个epoch,使用Adam优化器与解耦权重衰减正则化,应用于所有非增益或偏差的权重,并使用余弦调度来衰减学习率。
初始超参数设置使用网格搜索,随机搜索,当训练为1个epoch时手动调整基线ResNet50模型的组合。然后,由于计算约束,超参数被启发式地适应于更大的模型。可学习的温度参数τ初始化为0.07,并修剪以防止对数缩放超过100,我们发现这是防止训练不稳定所必需的。我们使用非常大的32,768个小批量。
混合精度用于加速训练和节省内存。为了节省额外的内存,使用梯度检查点(检查点不保存整个计算图的所有中间结果以进行反向传播的计算,而是在反向传播的过程中重新计算中间结果,用时间换空间)、半精度Adam统计和半精度随机四舍五入文本编码器权重。
这里对上面图片中的 a photo of a {object} 的表达,有什么意义,进行一个详细说明:
一个常见的问题是一词多义。当类的名称是提供给CLIP的文本编码器的唯一信息时,由于缺乏上下文,它无法区分指的是哪个词义。在某些情况下,同一个单词的多个含义可能会作为不同的类包含在同一个数据集中。
在ImageNet中,比如单词“cranes”它的意思是建筑方面的起重机和飞行的动物鹤。
另一个例子是在Oxford-IIIT Pet数据集的类中发现的,从上下文来看,单词“boxer”显然是指一种宠物狗拳师犬,但缺乏上下文的文本编码器也可能是指运动员拳击手。
所以对于这种歧义,我们发现使用提示模板 "A photo of a {label}.",是一个很好的默认值,可以帮助指定文本是关于图像的内容,仅仅使用这个提示符就可以将ImageNet上的准确率提高1.3%。
类似于围绕GPT-3的“提示工程”讨论,我们还观察到,通过为每个任务定制提示文本可以显著提高零样本的性能。下面是一些不详尽的例子。我们在几个细粒度的图像分类数据集中发现,它有助于指定类别。例如,在Oxford-IIIT Pets中,使用"A photo of a {label}, a type of pet.",效果很好。同样,在Food101上指定"a type of food"和在FGVC指定"a type of aircraft",也是很有帮助的。对于光学字符识别(OCR)数据集,我们发现在要识别的文本或数字周围加上引号可以提高性能。最后,我们发现在卫星图像分类数据集中,指定 "a satellite photo of a {label}.”也是有帮助的。
但是我们也看到,零样本CLIP在一些专门的、复杂的或抽象的任务上相当弱,比如卫星图像分类(EuroSAT和RESISC45)、淋巴结肿瘤检测(PatchCamelyon)、合成场景中的物体计数(CLEVRCounts)、与自动驾驶相关的任务,比如,德国交通标志识别(GTSRB),识别距离最近的汽车(KITTI距离)。
对于鲁棒性,其实看数据集的类别广泛以及数据量这么大,零样本的泛化性能应该是不错的。
而且还可视化了0-shot, 1-shot, 2-shot, 4-shot等的表现,如下图:
可以看到,0 shot零样本的精度反而比有样本的还要高。
我们来看下CLIP与人类表现和人类学习相比会怎样?
为了更好地了解人类在与CLIP类似的评估设置中的表现,我们进行了评估人类在执行我们的任务的时候,在零样本中表现有多强,以及如果向他们展示一两个图像样本,人类的表现会提高多少。这可以帮助我们比较人类和CLIP的任务难度,并确定它们之间的相关性和差异。
我们让五名不同的人,分别查看Oxford IIT Pets数据集的3669张图像中的每一张,并从37种猫或狗中选择最符合图片的品种(如果他们完全不确定就贴上“我不知道”)。在没有得到任何品种的例子(零样本),在没有互联网搜索的情况下尽其所能给它们贴上标签,以及增加一个和两个样本的实验情况。
那这里的实验结果,其实我们也知道,人类有先验知识,要么知道,要么清楚的知道自己不知道。所以我们推测,寻找一种将先验知识适当地整合到小样本学习中的方法,可能是改进CLIP算法的重要一步。
对CLIP来说最难的问题也往往对人类来说也是最难的问题,我们通过CLIP的难度对图像类别进行排序,以正确标签的概率为衡量标准,如下图:
可以看到跟人类比较,图形的整体平均精度走势还是很一致的。
虽然上面的示例都显示出了其强大的泛化性能以及鲁棒性,不过在一些数据集上,该基线的性能还是远低于整体水平。
CLIP的零样本在有些任务上仍然很弱,与特定任务模型相比,CLIP在几种类型的细粒度分类(如区分汽车模型、花卉种类和飞机变体)上的性能较差。
对于不太可能包含在CLIP预训练数据集中的新任务,例如,照片中最近的汽车的距离进行分类,CLIP的性能可以接近随机。CLIP在MNIST的手写数字上仅达到88%的正确率,这种也很好理解,因为这样的图片基本上不会广泛存在于网络搜索图片中。
尽管CLIP可以灵活地为各种各样的任务和数据集生成零样本的分类器,但CLIP仍然仅限于从给定零样本分类器中的那些概念中进行选择。与真正灵活的方法(如图像字幕)相比,这是一个重大的限制。
另外CLIP是通过与互联网上的图像配对的文本进行训练的,而这些图像-文本对,是未经过滤和管理的,所以将会导致CLIP模型学习许多社会偏见。
当然对于偏见,除了来自互联网数据之外,算法决策以及关于如何定义类的设计,都可能导致和放大使用AI系统导致的社会偏见和不平等。
对于许多数据集,CLIP的表现明显优于其他模型,这表明自然语言监督优于基于图像分类的传统预训练方法。
我们在零射击设置下对CLIP的研究表明,该模型在广泛应用的任务(如图像检索或搜索)中显示出重要的前景。例如,它可以在给定文本的数据库中找到相关图像,或者在给定图像找到相关文本。此外,在很少或没有额外数据或训练的情况下,将CLIP转向定制应用程序的相对容易程度可以解锁各种我们今天难以想象的新颖应用程序,就像过去几年中大型语言模型所发生的那样。
通过训练系统将描述性文本与视频而不是图像配对来进行大规模特征学习,一些作品探索了在视频中使用密集的自然语言监督,当与CLIP一起考虑时,这些工作表明大规模自然语言监督是一种有前途的方法,可以在许多领域学习高质量的感知系统。
通过添加原始音频作为额外的监督视觉源,将这一工作扩展到一个额外的模式,并展示了将所有三种监督源结合起来的好处,将视觉和语言丰富地联系起来,以解决复杂的下游任务,比如,视觉问答、视觉常识推理或多模态需要。
引用来源:
关于微调:计算机视觉之迁移学习中的微调(fine tuning)
论文原文:https://arxiv.org/pdf/2103.00020.pdf
github:https://github.com/OpenAI/CLIP
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。