MoCo

MoCoV2

Improved Baselines with Momentum Contrastive Learning

https://arxiv.org/pdf/2003.04297.pdf

摘要:无监督学习最近取得了令人鼓舞的进展,例如动量对比(MoCo)和SimCLR。在本文中,我们通过在MoCo框架中实现SimCLR的两个设计改进来验证它们的有效性。通过对MoCo的简单修改,即使用MLP投影头和更多的数据扩充,我们建立了比SimCLR更好的基线,并且不需要大量的训练。我们希望这将使最先进的无监督学习研究更容易获得。代码将被公开。

1.引言

最近关于图像的无监督表征学习的研究[16,13,8,17,1,9,15,6,12,2]集中在一个被称为对比学习的中心概念上[5]。结果是有希望的:例如,动量对比度(MoCo)[6]表明,无监督预训练可以在多个检测和分割任务中超过ImageNet监督的预训练,SimCLR[2]进一步缩小了无监督和有监督预训练表示之间在线性分类器性能上的差距。

本说明确立了在MoCo框架内建立的更强有力和更可行的基线。我们报告了SimCLR中使用的两个设计改进,即MLP投影头和更强的数据增强,与MoCo和SimCLR的框架正交,并且当与MoCo一起使用时,它们导致更好的图像分类和目标检测转移学习结果。此外,MoCo框架可以处理大量的负样本,而不需要大量的训练(图1)。与SimCLR需要TPU支持的大型4k∼8k批量大小不同,我们的“MoCo v2”基线可以在典型的8-GPU机器上运行,并获得比SimCLR更好的结果。希望这些改进的基线能为今后的无监督学习研究提供参考。

MoCo_第1张图片
图1 从批量处理的角度看对比学习两种优化。图像被编码到一个表示空间中,在这个空间中计算成对的亲和力

2背景

对比学习

对比学习[5]是指,数据被组织成相似对和不相似对,要从中学习相似表示和不相似表示。这可以表示为字典查找问题。一个有效的对比损失函数叫做InfoNCE[13],它是:

MoCo_第2张图片

这里是一个查询表示(query representation),是正(相似)键样本的表示(a representation of the positive (similar) key sample),是负(不同)键样本的表示(representations of the negative (dissimilar) key samples)。是温度超参数。在实例辨别借口任务[16](由MoCo和SimCLR使用)中,如果查询和密钥是同一图像的数据增强版本,则它们形成正对,否则形成负对。

对比损失(1)可以通过不同的方法来最小化,区别是键是如何保存的[6](differ in how the keys are maintained)。在端到端机制(图1a)[13、8、17、1、9、2]中,负键(negative keys)来自同一批,并通过反向传播进行端到端更新。SimCLR[2]基于这种机制,需要一个大批量来提供大量的负例。在MoCo机制(图1b)[6]中,负键(negative keys)保持在队列中,并且在每个训练批中仅对查询和正键(queries and positive keys)进行编码。采用动量编码器,以提高了当前密钥和早期密钥的表示一致性(to improve the representation consistency between the current and earlier keys)。MoCo将批量大小与负例数量解耦。

改进的设计。

SimCLR[2]从三个方面改进了实例识别的端到端变体:(i)可以提供更多负样本的大批量(4k或8k);(ii)用MLP头替换输出fc投影头[16];(iii)更强的数据增强。

MoCo框架已包含使用大量负样本;MLP头和数据扩充与对比学习的实例化方式是正交的。接下来我们研究MoCo中的这些改进。

3. 实验

设置    在1.28M ImageNet[3]训练集上进行无监督学习。我们遵循两种常见的评估方案。(i) ImageNet线性分类:特征被冻结并训练一个有监督的线性分类器;我们报告1-crop(224×224),top-1验证精度。(ii)转移到VOC目标检测[4]:Faster R-CNN检测器[14](C4主干)在VOC 07+12 trainval集合上进行端到端微调,并使用COCO度量在VOC 07测试集合上进行评估[10]。我们使用与MoCo相同的超参数(除非另有说明)和代码库[6]。所有结果都使用标准尺寸ResNet-50[7]。

对于所有条目(包括监督的和mocov1基线),我们在VOC上对24k次迭代进行了微调,而不是[6]中的18k次。

MLP头。    在[2]之后,我们将MoCo中的fc头替换为2层MLP头(隐藏层2048-d,带有ReLU)。注:这只影响无监督训练阶段;线性分类或转移阶段不使用此MLP头。此外,和[2]一样,我们寻求最佳的相关于ImageNet线性分类精度的:

使用默认=0.07[16,6],MLP头的预训练从60.6%提高到62.9%;切换到MLP的最佳值(0.2),精确度提高到66.2%。表1(a)显示了它的检测结果:与ImageNet上的大提升相比,在检测任务上的增益更小。

数据增强。    我们扩展了[6]中的原始增强,在[2]中加入了模糊增强(我们发现[2]中更高强度的颜色失真在我们更高基线中导致增益减小)。仅额外的增强(即无MLP)就将ImageNet上的MoCo基线提高了2.8%至63.4%,见表1(b)。有趣的是,尽管线性分类准确率较低(63.4%对66.2%),但其检测准确率高于单独使用MLP(表1(b)对(a))。这表明线性分类精度与检测中的迁移性能不是单调相关的。使用MLP,额外的增强将ImageNet的精确度提高到67.3%,见表1(c)。

MoCo_第3张图片
表1 MoCo基线的消融,由ResNet-50评估(i)ImageNet线性分类,(ii)微调VOC目标检测(平均5次试验)。“MLP”:带MLP头;“aug+”:带额外模糊增强;“cos”:余弦学习速率表

与SimCLR的比较。    表2将SimCLR[2]与我们的结果(称为mocov2)进行了比较。为了公平比较,我们还研究了SimCLR采用的余弦(半周期)学习率表[11]。见表1(d,e)。mocov2在ImageNet上使用了200个epoch和256个批大小的预训练,达到了67.5%的准确率:在相同epoch和批大小的情况下,比SimCLR高5.6%,比SimCLR的大批结果高66.6%。通过800个历元的预训练,mocov2达到71.1%,超过SimCLR的69.3%(1000个历元)。

MoCo_第4张图片
表2  MoCovs. SimCLR:ImageNet线性分类器精度(ResNet-50,1-crop 224x224),基于无监督预训练的特征进行训练。SimCLR中的“aug+”包括模糊和更强的颜色失真。SimCLR烧蚀来自[2]中的图9(我们感谢作者提供的数值结果)。

计算成本。    在表3中,我们报告了实现的内存和时间开销。端到端案例反映了GPU中的SimCLR成本(而不是[2]中的TPU)。即使在高端的8-GPU机器中,4k批量大小也是难以处理的。此外,在相同的批处理大小256下,端到端变体在内存和时间上仍然更昂贵,因为它同时反向传播到和编码器,而MoCo仅反向传播到编码器。

表2和表3表明,要获得良好的准确度,不需要大批量,可以更容易获得最新的结果。我们调查的改进只需要对MoCov1进行几行代码更改,我们将公开代码以便于将来的研究。

参考文献:

[2]    SimCLR

[6]    MoCo



MoCoV1:

https://arxiv.org/pdf/1911.05722v3.pdf

Momentum Contrast for Unsupervised Visual Representation Learning

摘要:我们提出了动量对比(MoCo)的无监督视觉表征学习。从对比学习[29]作为词典查找的角度出发,我们构建了一个带有队列和移动平均编码器的动态词典。这使得能够在动态地构建一个大的、具有一致性的词典,从而促进对比的无监督学习。MoCo在ImageNet分类的通用线性设置下提供有竞争力结果。更重要的是,MoCo学习到的表征能很好地传递给下游任务。MoCo在PASCAL-VOC、COCO和其他数据集上的7个检测/分割任务上都优于其有监督的预训练对手,有时甚至远远超过它。这表明在许多视觉任务中,无监督和有监督表征学习之间的差距已经基本上被消除。

1. 引言

无监督表征学习在自然语言处理中非常成功,如GPT[50,51]和BERT[12]所示。但在计算机视觉领域,有监督的预训练仍然占主导地位,而无监督的预训练方法普遍滞后。原因可能源于它们各自信号空间的差异。语言任务具有离散的信号空间(词、子词单元等),用于构建标记化词典,无监督学习可以基于这些信号空间。相比之下,计算机视觉更关注字典的建立(dictionary building)[54,9,5],因为原始信号是在一个连续的高维空间中,并且不是为人类交流而构建的(也就是和词语不同)。

最近的几项研究[61、46、36、66、35、56、2]在使用与对比损失[29]相关的方法进行无监督视觉表征学习方面取得了有希望的结果。尽管这些方法受到各种动机的驱动,但它们可以被认为是构建动态字典。字典中的keys(tokens)是从数据(例如图像或图像块)中采样的,并由编码器网络表示。无监督学习训练编码器执行字典查找(look up):编码的query应该与其匹配的key相似,而与其他键不同。学习被描述为最小化对比损失[29]。

从这个角度来看,我们假设这样建立字典是可取的:(i)建立一个大的字典;(ii)建立一个具有一致性的字典(因为其在训练过程中不断发展,evolve during training)。直观地说,一个较大的字典可以更好地对底层连续的、高维的可视空间进行采样,而字典中的键应该由相同或相似的编码器表示,以便它们与查询的比较是一致的。然而,现有的使用对比损失的方法可能局限于这两个方面中的一个(稍后将在上下文中讨论)。

我们提出动量对比法(MoCo)作为一种为对比损失的无监督学习构建大而一致的词典的方法(图1)。我们将字典维护为一个数据样本队列:当前小批量的编码表示被排入队列,最旧的表示被出列。队列将字典大小与mini-batch size解耦,这样我们就可以将字典设置地很大。此外,由于字典keys来自前面的几个小批量(mini-batches),为了保持一致性,提出了一种缓慢前进的键编码器( aslowly progressing key encoder)实现为对查询编码器的基于动量的移动平均(implemented as a momentum-based moving average of the query encoder )

MoCo_第5张图片
图1。动量对比(MoCo)通过使用对比损失将编码过的查询 与编码过的keys的字典相匹配来训练视觉表示编码器。字典的键 是由一组数据样本动态定义的。字典被构建为一个队列,当前的小批量进入队列,最老的小批量退出队列,这样字典大小就与mini batch大小解耦。keys由一个缓慢前进的编码器编码,由查询编码器的动量更新驱动。这样就可以构建一个大而一致的字典用来视觉表示学习。

MoCo是一种为对比学习构建动态字典的机制,可以用于各种借口任务。在本文中,我们遵循一个简单的实例辨别任务[61,63,2]:如果一个query和一个key,它们编码的是来自同一张图片的不同视图(也就是不同的裁剪),它们就配为一对。使用这个借口任务,MoCo在ImageNet数据集中展示了线性分类的通用设置下的竞争结果[11]。

无监督学习的一个主要目的是对表示(即特征)进行预训练,这些表示可以通过微调转移到下游任务中。我们发现,在与检测或分割相关的7个下游任务中,MoCo无监督预训练可以在某些情况下超过ImageNet监督的对应任务,有些情况下还是大幅度的提升。在这些实验中,我们探索了在ImageNet或10亿Instagram图像集上预先训练的MoCo,证明了MoCo可以在更真实、更大的图像规模和相对未处理的场景中很好地工作。这些结果表明,MoCo在很大程度上弥补了在许多计算机视觉任务中无监督和有监督表示学习之间的差距,并且在许多应用中可以作为ImageNet监督预训练的替代方法。

2. 相关工作

无监督/自监督(注释1)学习方法通常涉及两个方面:借口任务(pretext tasks)和损失函数。术语“借口”(pretext )意味着该任务不是真正的兴趣任务,而是为了学习良好的数据表示。损失函数通常可以独立于借口任务进行研究。MoCo侧重于损失函数。接下来我们将讨论这两个方面的相关研究。

注释1:自监督学习是无监督学习的一种形式。他们的区别在现有文献中是非正式的。在本文中,我们使用了更经典的术语“无监督学习”,即“不受人类注释标签的监督”。

损失函数。    定义损失函数的常用方法是测量模型预测和固定的目标之间的差异,例如通过L1或L2损失重建输入像素(例如,自动编码器),或者通过交叉熵或基于边缘的损失将输入分类为预定义的类别(例如,eight positions[13],color bins[64])。其他替代方案,如下文所述,也是可能的。

对比损失[29]衡量样本对在表征空间中的相似性。与将输入与固定目标匹配不同,在对比损失公式中,目标可以在训练期间动态变化,并且可以根据网络计算的数据表示来定义[29]。对比学习是最近几部关于无监督学习的著作的核心[61,46,36,66,35,56,2],我们将在后面的上下文中详细阐述。(第3.1节)

对抗性损失[24]衡量概率分布之间的差异。这是一项用于无监督数据生成的广泛成功的技术。[15,16]探讨了表征学习的对抗性方法。生成性对抗网络与噪声对比估计(NCE)之间存在关系(见[24])[28]。

借口任务。    有各种各样的借口任务。包括在某些损坏情况下恢复输入,例如,去噪自动编码器[58]、上下文自动编码器[48]或跨通道自动编码器(彩色化)[64、65]。一些借口任务形成伪标签,例如,单个(“示例”)图像的变换[17]、拼图(图块排序)[13,45]、跟踪[59]或分割视频中的物体[47],或聚类特征[3,4]。

对比学习 vs. 借口任务。    不同的借口任务可能是基于对比损失函数的某种形式。实例辨别任务[61]与基于实例的任务(exemplar-based task)[17]和NCE[28]有关。对比预测编码(CPC)[46]中的借口任务是上下文自动编码的一种形式[48],而对比多视角编码(CMC)[56]中的借口任务与色彩化有关[64]。

3. 方法

3.1 将对比学习看做字典查找

对比学习[29]及其最新发展可以被认为是以字典查找任务来训练编码器,如下所述。

考虑一个编码过的查询和一组编码过的样本,这些编码过的样本是字典的keys 。假设字典中有一个键(表示为)与匹配。对比损失[29]的函数取值为:当与它的正键相似,而与所有其他键(被认为是的负键)不同时,其值较低。其中相似性是由点积度量的,本文考虑了一种对比损失函数的形式,称为InfoNCE[46]:

其中是[61]中的温度超参数。求和是对一个正样本和个负样本求和。直观地说,这种损失基于softmax的分类器的对数损失,总共分为类,而要把分类为。对比损失函数也可以基于其他形式[29、59、61、36],例如margin-based的损失和NCE损失的不同变体。

对比损失作为一个无监督的目标函数,用于训练表示queries和keys的编码器网络(encoder networks)[29]。通常,查询表示为,其中是一个编码网络,是一个查询样本。同样,。具体情况取决于具体的借口任务。输入和可以是图像[29、61、63]、图像块[46]或包含一组图像块[46]的上下文。网络和可以相同[29、59、63]、部分共享[46、36、2]或不同[56]。

3.2 动量对比

从以上的角度来看,对比学习是一种基于图像等高维连续输入构建离散词典的方法。字典是动态的,因为keys是随机采取样本的,并且key encoder在训练过程中不断演化。我们的假设是,好的特征可以通过一个包含大量负样本的大字典来学习,而the encoder for the dictionary keys则尽可能地保持一致,尽管它在进化。基于这一动机,我们将呈现动量对比,如下所述。

队列形式的字典。    我们方法的核心是将字典作为数据样本队列。这使我们能够重用前一个小批量中的encoded keys。使用队列可以将字典大小与小批量大小解耦。我们的字典大小可以远远大于一个典型的小批量大小,并可以灵活和独立地设置为一个超参数。词典中的样本逐渐被替换。当前的小批量将排入字典队列,队列中最早的小批量将被删除。字典总是表示所有数据的一个抽样子集,而维护字典需要的额外计算是可控的。此外,删除最旧的小批量也是有益的,因为它的encoded keys是最过时的,因此与最新的密钥最不一致。

动量更新。

使用一个队列可以使字典变大,但它也使得难以通过反向传播(梯度应该传播到队列中的所有样本)来更新key encoder 。一个简单的解决方案是从query encoder  复制到key encode,忽略这个梯度。但是这种解决方案在实验中产生了很差的结果(见4.1节)。我们假设这种失败是编码器的快速变化导致key的不一致。由快速变化的编码器导致的,它降低了密钥表示的一致性。我们提出动量更新来解决这个问题。

将的参数记为,将的参数记为,我们这样更新:

    

这里是动量系数。反向传播只更新参数。等式(2)中的动量更新使得比更平滑地演化,因此,尽管队列中的keys(在不同的小批量中)由不同的编码器编码,但是这些编码器之间的差异可以变得很小。在实验中,相对较大的动量(例如,m=0.999,我们的默认值)比较小的值(例如,m=0.9)工作得更好,这表明缓慢演化的密钥编码器是利用队列的核心。

与以前机制的关系。    MoCo是使用对比损失的广义机制。我们将其与图2中现有的两种通用机制进行比较。它们在字典大小和一致性方面表现出不同的特性。

MoCo_第6张图片
图2 三种对比损失机制的概念比较(实证比较见图3和表3)。这里我们演示一对query和key.。这三种机制在如何维护keys和如何更新key encoder方面有所不同。(a) :用于计算query和key表示的编码器通过反向传播进行端到端更新(两个编码器可以不同)。(b) :key representations 从 memory bank中取样[61]。(c) :MoCo通过动量更新编码器动态编码new keys,并维护 keys为队列的形式(本图中未说明)。

反向传播的端到端更新是一种自然机制(例如,[29,46,36,63,2,35],图2a)。它使用当前小批量中的样本作为字典,因此keys(由相同的编码器参数集)被一致地编码。但是字典的大小与小批量大小是相关的,受到GPU内存大小的限制。它还面临着小批量的批量大小太大导致优化太难的问题[25]。最近的一些方法[46,36,2]是基于由局部位置驱动的借口任务,其中字典大小可以通过多个位置变大。但这些借口任务可能需要特殊的网络设计,如修补输入patchifying the input[46]或定制感受野大小[2],这可能会使这些网络向下游任务的传输复杂化。

另一种机制是[61]提出的memory bank方法(图2b)。memory bank由数据集中所有样本的表示组成。每个小批量的字典都是从memory bank中随机抽取的,没有反向传播,因此可以支持较大的字典大小。然而,memory bank中一个样本的表示,当它上次被采样的时候,它这次才会被更新,因此,在过去的epoch中,采样的keys基本上是和多个不同步骤的编码器相关,因此不太一致。[61]中对memory bank进行了动量更新。它的动量更新是在同一个样本的表示上,而不是在编码器上。这个动量更新与我们的方法无关,因为MoCo并没有跟踪每个样本。此外,我们的方法具有更高的存储效率,并且可以在十亿规模的数据上进行训练,这对于memory bank来说是很困难的。

第4节实验比较了这三种机制。

3.3 借口任务

对比学习可以驱动各种各样的借口任务。由于本文的重点不是设计一个新的借口任务,我们使用了一个简单的借口任务,主要遵循[61]中的实例辨别任务,最近的一些工作[63]与之相关。

在[61]之后,如果query和key 来自同一个图像,我们将它们视为正对,否则将它们视为负样本对。继[63,2]之后,我们在随机数据增强下对同一幅图像随机取两个“视图”,形成正对。queries和keys分别由它们的编码器和编码。编码器可以是任何卷积神经网络[39]。

算法1为这个借口任务提供了MoCo的伪代码。对于当前的小批量,我们对queries及其对应的keys进行编码,形成正样本对。负样本来自队列。

MoCo_第7张图片

技术细节。    我们采用ResNet[33]作为编码器,其最后一个全连接层(在全局平均池之后)具有固定维输出(128-D[61])。该输出向量通过其L2范数进行归一化[61]。这是query或key的表示形式。式(1)的温度参数设为0.07[61]。数据增强设置如下[61]:从随机缩放大小的图像中获取224×224像素的裁剪,然后进行随机颜色抖动、随机水平翻转和随机灰度转换,所有这些都在PyTorch的torchvision软件包中提供。

Shuffling BN。    我们的编码器和都具有和标准ResNet[33]一样的BN层[37]。在实验中,我们发现使用BN会阻止模型学习良好的表示,正如[35]中类似地报告的那样([35]避免使用BN)。模型似乎“欺骗”了借口任务,很容易找到低损失的解。这可能是因为一个batch内部样本之间的通信(由BN引起)泄漏了信息。

我们通过 shuffling BN来解决这个问题。我们使用多个GPU进行训练,并为每个GPU独立地对样本执行BN(按照常规做法)。对于key encoder ,我们在将当前小批量分配给GPU之前,先将样本顺序进行shuffle,在编码之后,再shuffle回来;对于query encoder ,则不对样本顺序进行shuffle。这确保了用于计算query及其positive key的批量统计信息来自两个不同的子集。这有效地解决了作弊问题,并使得BN层能有益于训练。

我们在我们的方法和它的端到端消融对手(图2a)中都使用了shuffling BN。memory bank(图2b)不受此问题的影响,因为其positive keys是来自以往的不同的小批量。

4. 实验

我们研究在以下领域进行的无监督培训:

ImageNet-1M(IN-1M):这是ImageNet[11]训练集,在1000个类中有128万个图像(通常称为ImageNet-1K;我们计算图像数,因为类别不是由无监督学习利用的)。这个数据集的类分布非常均衡,它的图像通常包含对象的图标视图(iconic view)。

Instagram-1B(IG-1B):继[44]之后,这是一个Instagram提供的10亿(9.4亿)公众图片的数据集。这些图像有大约1500种hashtags(标签)[44],这些标签与ImageNet的类别(categories)相关。与IN-1M数据集相比,该数据集相对不稳定,并且具有真实世界数据的长尾的、不均衡的分布。此数据集包含图标对象(iconic objects)和场景级图像( scene-level images)。

训练。    我们使用SGD作为优化器。SGD权重衰减为0.0001,SGD动量为0.9。对于IN-1M,我们在8个gpu中使用256(算法1中为N)的mini-batch size,初始学习率为0.03。我们训练200个epochs ,在第120和第160个epoch学习率乘以0.1[61],需要53小时的训练ResNet-50。对于IG-1B,我们在64个gpu中使用1024个mini-batch size,学习率为0.12,每62.5k次迭代(64M图像)后,学习率呈指数衰减0.9倍。我们训练了1.25M的迭代(大约IG-1B的1.4个epochs),ResNet-50需要6天。

4.1 线性分类协议

我们首先根据一个共同的协议,将特征冻结起来,做线性分类来验证我们的方法。在本小节中,我们对In-1M进行无监督的预训练,然后冻结特征并训练一个有监督的线性分类器(一个全连接层,后跟softmax)。我们在ResNet的全局平均池化特征上训练这个分类器,持续100个epochs。我们报告了ImageNet验证集的1-crop、top-1分类精度。

对于该分类器,我们进行了网格搜索,发现最优初始学习率为30,权值衰减为0(类似于[56]中的报道)。这些超参数在本小节介绍的所有消融条目中都表现良好。这些超参数值意味着特征分布(如magnitudes)可能与ImageNet监督训练的特征分布有很大不同,我们将在4.2节中重新讨论这个问题。

消融:对比损失机制。    我们比较了图2中所示的三种机制。为了聚焦对比损失机制的效果,三者使用的都是3.3节所述的借口任务。我们还使用了与公式(1)中对比损失函数形式相同的InfoNCE。这样,我们仅就这三种机制进行比较。

结果如图3所示。总的来说,这三种机制都受益于更大的值。在[61,56]中,在memory bank机制下观察到了类似的趋势,而在这里,我们表明,这种趋势更普遍,可以在所有机制中看到。这些结果支持了我们建立大型字典的动机。

MoCo_第8张图片
图3。ImageNet线性分类协议下三种对比损失机制的比较。在memory bank和MoCo中负样本数量为 ,在端到端中为 (相差一个是因为正键在同一个小批量中)网络是ResNet-50。

当很小时,端到端机制的性能类似于MoCo。但是,在端到端的情况下,字典大小受限于mini-batch size。在这里,一台高端机器(8 Volta 32GB GPUs)能承受的最大的mini-batch是1024个。更重要的是,大的mini-batch训练是一个开放的问题[25]:我们发现有必要在这里使用线性学习率缩放规则[25],否则准确率会下降(1024个小批量的准确率下降∼2%)。但使用更大的mini-batch进行优化比较困难[25],而且即使内存足够,是否可以将该趋势外推到更大的K值也是值得考虑的。

memory bank[61]机制可以支持更大的字典大小。但它比MoCo还要差2.6%。这与我们的假设是一致的:内存库中的 key来自过去不同epoch的不同编码器,它们并不一致。注意,memory bank达到58.0%的结果反映了我们改进了[61]的实现。(其中58.0%是使用InfoNCE,且K=65536。当使用NCE和K=4096(与[61]相同)时,我们复现的结果是54.3%,接近[61]中的54.0%。)

消融:动量。    下表显示了ResNet-50在预训练中不同MoCo动量值(等式(2)中的)下的精度(此处K=4096):

当m为0.99∼0.9999时,它的性能相当好,这表明缓慢演化(即相对较大的动量)的key encoder是有益的。当m太小(如0.9)时,精度下降很大;在无动量(m为0)时,训练损失振荡,无法收敛。这些结果支持了我们建立一致性词典的动机。

与以前的结果进行比较。    以前的无监督学习方法在模型大小上有很大的不同。为了进行公平和全面的比较,我们报告了准确度与参数之间的权衡(注释:参数量是特征提取器的参数量,例如,如果conv-x不包括在线性分类中,我们就不计算conv-x的参数)。除了ResNet-50(R50)[33]之外,我们还报道了它的变体,即2×和4×的宽度(即更多通道),和[38]一样(注释:本文中2×和4×的宽度对应于[38]中的×8和×16的宽度,因为[38]中将标准ResNet称为×4的宽度)。我们设置K=65536和m=0.999。表1是比较。

MoCo_第9张图片
MoCo_第10张图片
表1 在ImageNet上进行线性分类协议下的比较。图是对表格的可视化。在ImageNet-1M训练集上,所有这些都被报告为无监督的预训练,然后在冻结特征上进行有监督的线性分类训练,在验证集上进行评估。参数计数是特征提取器的计数。我们将与优化过的复现版(如果有的话)进行比较(在数字后面引用)。注: R101*/R170*是将最后个residual stage去掉的ResNet-101/170[14, 46, 35], 并且R170更宽[35]; Rv50是reversible net[23], RX50 is ResNeXt-50-32x8d[62]。†是指预训练使用由ImageNet labels监督的FastAutoAugment[40]

采用R50的MoCo具有竞争力,精确度达到60.6%,优于所有同类型号(24M)的竞争对手。MoCo得益于更大的型号,使用R50w4×,精确度达到68.6%。

值得注意的是,我们使用标准ResNet-50实现了竞争性结果,并且不需要特定的架构设计,例如,patchified inputs[46,35],精心定制的感受野[2],或组合两个网络[56]。通过使用一个不是为借口任务定制的网络结构,可以更容易地将特征迁移到各种视觉任务并进行比较,这将在下一小节中进行研究。

本文的重点是用于一般对比学习的一种机制;我们不探讨可能进一步提高准确率的正交因素(例如特定的借口任务)。例如,“MoCo v2”[8]是本文初步版本的扩展,考虑到数据增强和输出投影头[7]的微小变化,R50的准确率达到71.1%(高于60.6%)。我们相信这个额外的结果显示了MoCo框架的通用性和健壮性。

4.2 迁移特征

无监督学习的一个主要目标是学习可迁移的特征。当用于下游任务(例如[21、20、43、52])微调的初始化时,ImageNet监督的预训练是最有影响力的。接下来,我们将MoCo与ImageNet监督的预训练进行比较,将其迁移到各种任务中,包括PASCAL VOC[18],COCO[42]等。作为前提条件,我们讨论了涉及的两个重要问题[31]:normalization and schedules。

归一化。    如4.1节提到的,与ImageNet监督预训练相比,无监督预训练产生的特征具有不同的分布。但是一个下游任务的系统通常有超参数(例如,学习率)被选择用于有监督的预训练。为了解决这个问题,我们在微调过程中采用了特征归一化(feature normalization):我们用经过训练(并在GPU之间同步)的BN进行微调,而不是用affine layer冻结它[33]。我们还在新初始化的层(例如FPN[41])中使用BN,这有助于校准magnitudes。

在对有监督和无监督的预训练模型进行微调时,我们进行归一化处理。MoCo使用与ImageNet相同的超参数

Schedules.    如果微调schedule足够长,则随机初始化的训练检测器可以是强基线,并且可以与COCO上的ImageNet监督预训练结果相匹配[31]。我们的目标是研究特征的可迁移性,因此我们的实验是在受控的schedule上进行的,例如COCO的1×(∼12个epoch)或2×的schedules,而不是[31]中的6×到9×。在较小的数据集(如VOC)上,训练更长时间可能赶不上[31](笔者注:在小数据集上随机初始化可能无法通过训练得更长达到与监督预训练或无监督预训练相当的结果)。

尽管如此,在我们的微调中,MoCo使用了与ImageNet监督相同的schedule,并且提供了随机初始化结果作为参考。

总的来说,我们的微调使用与有监督的预训练对应项相同的设置。这可能使MoCo处于不利地位。即便如此,MoCp还是很有竞争力。这样做还可以在多个数据集/任务上进行比较,而无需额外的超参数搜索。

4.2.1 PASCAL VOC物体检测

设置。    检测器是Faster R-CNN[52],主干为R50-dilated-C5或R50-C4[32](详情见附录),用微调过的BN,使用detectron2的实现[60]。我们端到端微调所有层。训练时图像比例为[480,800]像素,推理时为800像素。相同的设置用于所有模型,包括监督的预训练基线。我们评估了VOC的默认指标即AP50(即IoU阈值为50%),以及COCO风格的更严格指标AP,以及AP75。评估在VOC test2007集上。

消融:主干    表2显示了在trainval07+12上微调的结果(∼16.5k图像)。对于R50-DC5(表2a),在IN-1M上预训练的MoCo与监督的预训练对手相当,在IG-1B上预训练的MoCo超过了它。对于R50-C4(表2b),在IN-1M或IG-1B上预训练的MoCo都超过它的对手(监督预训练):高达+0.9 AP50、+3.7 AP和+4.9 AP75。

有趣的是,迁移精度取决于检测器的结构。对于C4主干,默认情况下使用现有的基于ResNet结果[14、61、26、66],无监督的预训练的优势更大。预训练与检测器结构之间的关系在过去一直是未被发现的,现在这是一个应该考虑的因素。

MoCo_第11张图片
表2 目标检测在PASCAL VOC trainval07+12上微调。评估基于test2007:AP50(defaultVOC指标)、AP(COCO风格)和AP75,平均5次试验。所有这些都针对24k次迭代(大约23个epoch)进行了微调。括号中是与ImageNet监督的预培训对应项之间的差距。绿色表示至少+0.5点的间距。

消融:对比损失机制。    我们指出,这些结果有部分原因是我们建立了坚实的对比学习的检测基线。为了说明这些提升是由MoCo机制贡献的,在对比学习中,我们使用与MoCo相同的微调设置,对使用端到端或memory bank机制预训练的模型进行微调,这两种机制都是由我们实现的(即图3中最好的结果)。

这些对手表现过得去(表3)。C4主干的AP和AP75也比ImageNet监督的对应结果要高,见表2b,但其他指标较低。它们在所有指标上都比MoCo差。这显示了MoCo的好处。此外,如何在更大规模的数据中训练这些对手是一个悬而未决的问题,他们可能不会从IG-1B中受益。

MoCo_第12张图片
表3 比较三种对比损失机制,在PASCAL VOC目标检测任务上、在trainval07+12上微调,在test2007上评估(5次试验的平均值)。所有模型都由我们实现(图3),在IN-1M上预训练,并使用与表2中相同的设置进行微调。

与以前的结果进行比较。    和对手一样,我们使用C4主干对trainval2007(∼5k图像)进行了微调。比较见表4。

对于AP50指标,先前的方法中没有一个可以赶得上其对应的监督预训练对手。MoCo在IN-1M、IN-14M(full-ImageNet)、YFCC-100M[55]和IG-1B中的任何一种上进行了预训练,其性能都优于监督基线。在更严格的指标中可以看到巨大的收益:高达+5.2AP和+9.0AP75。这些收益大于trainval07+12中的收益(表2b)。

表4 与以前在pascal2007上微调的目标检测方法的比较。在test2007上评估。ImageNet监督的对应项来自各自的论文,并且被报告为具有与各自的无监督预训练对应项相同的结构。所有条目都基于C4主干。[14]中的型号是R101 v2[34],其他型号是R50。RelPos(relative position)[13]结果是多任务论文[14]中最好的单任务案例。拼图(Jigsaw)[45]的结果来自于[26]中基于ResNet的实现。我们的结果是9k迭代微调,超过5个试验取平均。括号中是与ImageNet监督的预训练对应结果之间的差距。绿色表示至少+0.5点的间距。

4.2.2 COCO目标检测与分割

设置。    模型是带有FPN[41]或C4主干的Mask R-CNN[32],用微调过的BN,使用detectron2的实现[60]。在训练期间,图像大小为[640x800]像素,在推断时为800。我们端到端微调所有层。我们对train2017进行了微调(∼118k图像),并对val2017进行了评估。在[22]中,schedule是默认的1×或2×。

结果。    表5显示了具有FPN(表5a,b)和C4(表5c,d)骨架的COCO的结果。对于1×schedule,所有模型(包括ImageNet监督的对应模型)都严重缺乏训练,相比2×schedule有大约2个点的差距。在2×schedule下,MoCo在两个主干网的所有度量上都优于ImageNet监督的MoCo。

MoCo_第13张图片
表5 在COCO上微调的目标检测和实例分割:在val2017上评估边界框AP(APbb)和掩码AP(APmk)。括号中是与ImageNet监督的预训练对应项之间的差距。绿色表示至少+0.5点的间距。

4.2.3更多下游任务

表6显示了更多的下游任务(实现细节见附录)。总的来说,MoCo的表现相比ImageNet监督预训练很有竞争力:

COCO关键点检测:与随机初始化相比,有监督的预训练没有明显的优势,而MoCo在所有指标上都优于随机初始化。

COCO密集位姿估计[1]:在这个高度定位敏感的任务中,MoCo大大优于有监督的预训练,例如在中提高了3.7分。

LVIS v0.5实例分割[27]:此任务有∼1000个类别,是长尾分布的。特别是在ImageNet监督基线的LVIS中,我们发现使用冻结BN(24.4)进行微调比使用可微调BN更好(详情见附录)。因此,我们在这项任务中比较了MoCo和更好的监督预训练变体。具有IG-1B的MoCo在所有指标上都超过了它。

Cityscapes实例分割[10]:相比监督预训练对手,具有IG-1B的MoCo在APmk相当,并且在APmk 50中更高。

语义分割:在Cityscapes[10]上,MoCo的表现优于其监督预训练对手,高达0.9个百分点。但是在VOC语义分割上,MoCo至少差了0.8个百分点,这是我们观察到的一个负面情况。

MoCo_第14张图片
表6 MoCo vs.ImageNet监督预训练,对各种任务进行微调。对于每个任务,所有条目都使用相同的结构和schedule(见附录)。括号中是与ImageNet监督的预培训对应项之间的差距。绿色表示至少+0.5点的间距。†是指将BN层冻结,这能带来提升,详情见正文。

总结。    总之,MoCo在7项检测或分割任务(也就是上文中的......)中的表现优于其在ImageNet监督下的预训练对手。此外,MoCo在城市景观实例分割方面也不相上下,在VOC语义分割方面落后;我们在附录[57]中给出了另一个类似的例子。总的来说,MoCo在很大程度上弥补了多视觉任务中无监督和有监督表征学习之间的差距。

值得注意的是,在所有这些任务中,在IG-1B上预训练的MoCo始终优于在IN-1M上预训练的MoCo。这表明MoCo在这个大规模的、相对未处理的数据集上可以表现得很好。这代表了一个面向现实世界的无监督学习的场景。

5 讨论与结论

我们的方法已经在各种计算机视觉任务和数据集中显示了无监督学习的积极成果。有几个悬而未决的问题值得讨论。MoCo从IN-1M到IG-1B的改进是显而易见的,但相对较小,这表明大尺度数据可能没有得到充分利用。我们希望先进的借口任务将改善这一点。除了简单的实例辨别任务[61]之外,还可以采用MoCo来进行诸如masked auto-encoding的借口任务,像在NLP中所做的[12]或视觉中所做的[46]中一样。我们希望MoCo能对其他涉及对比学习的借口任务有所帮助。

附录

A.1    实现:目标检测主干

R50-扩张的C5和R50-C4主干与Detectron2中的主干相似[60]:(i)R50-扩张的Dc5:主干包括ResNet conv5阶段,扩张为2,步幅为1,然后是3×3卷积(带BN),将维度减少到512。框预测头由两个完全连接的隐藏层组成。(ii)R50-C4:主干以conv4阶段结束,盒预测头由conv5阶段(包括全局池)和BN层组成。

A.2    实现:COCO关键点检测

我们使用带有R50-FPN的Mask R-CNN(keypoint版本),在[60]中实现,在COCO train2017上微调,并在val2017上评估。schedule是2×。

A.3    实现:COCO密集姿态估计

我们使用DensePose R-CNN[1]和R50-FPN,在[60]中实施,在COCO train2017上微调,并在val2017上评估。schedule为“s1×”。

A.4    实现:LVIS实例分割

我们使用带R50-FPN的掩码R-CNN,在LVIS[27]train v0.5中进行微调,并在val v0.5中进行评估。我们遵循[27]中的基线(arXiv v3附录B)。

LVIS是一个新的数据集,其模型设计有待探索。下表包括相关消融(均为5次试验的平均值):

MoCo_第15张图片

有监督的训练前基线,端到端调整,但BN冻结,有24.4 APmk。但是在这个基线中调整BN会导致更糟糕的结果和过度拟合(这与COCO/VOC不同,在COCO/VOC中,调整BN可以提供更好的或类似的精度)。MoCo的IN-1M和IG-1B的APmk分别为24.1apmk和24.9apmk,在相同的可调BN设置下,两者的性能都优于有监督的预训练对手。在最佳的单独设置下,MoCo仍然可以优于有监督的培训前案例(24.9 vs.24.4,如第4.2节表6所示)。

A.5    实现:语义分割

我们使用基于FCN的[43]结构。主干由R50中的卷积层组成,conv5块中的3×3卷积具有伸缩2和步长1。然后是256个通道的两个额外的3×3卷积,带有BN和ReLU,然后是1×1卷积,用于每像素分类。总步幅为16(FCN-16s[43])。按照[6]中的大视场设计,我们在两个额外的3×3卷积中设置了膨胀率=6。

训练包括随机缩放(比例为[0.5,2.0])、裁剪和水平翻转。VOC的裁剪大小为513,城市景观的作物大小为769。对原始图像大小进行推断。我们的训练的mini batch大小为16,权重衰减为0.0001。VOC的学习率为0.003,城市景观的学习率为0.01(在70%和90%的训练中乘以0.1)。对于VOC,我们在trainaug2012集(增加了[30],10582个图像)上训练30k次迭代,并在val2012上进行评估。对于城市景观,我们在训练精细集(2975个图像)上训练90k次迭代,并在val集上进行评估。结果报告为5次试验的平均值。

A.6    iNaturalist细粒度分类

除了本文中的检测/分割实验外,我们还研究了iNaturalist数据集上的细粒度分类[57]。我们在训练集(437k图像,8142类)上对预训练模型进行端到端微调,并在val集上进行评估。培训遵循PyTorch中典型的ResNet实现,共100个epoch。微调的学习率为0.025(从零开始为0.1),在第70和90个百分位的训练中下降了10。以下是R50结果:

MoCo比随机初始化的训练好4%,与ImageNet监督相当。这再次表明,MoCo无监督的预训是有竞争力的。

A.7    ImageNet中的微调

冻结特征的线性分类(4.1节)是评估无监督预训练方法的通用协议。然而,在实践中,更常见的是在下游任务中端到端地微调特性。为完整起见,下表报告了ImageNet的1000分类的端到端微调结果,并与从头开始的培训进行了比较(微调使用的初始学习率为0.03,而从头开始为0.1):

由于这里ImageNet是下游任务,在IN-1M上预训练的MoCo的情况并不代表真实的场景(作为参考,我们报告在微调后其精确度为77.0%)。但是在IG-1B的独立的、未标记的数据集中的无监督的预训练代表了一个典型的场景:在这种情况下,MoCo提高了0.8%。

A.8    COCO更长的微调

在表5中,我们报告了COCO1×(大约12epochs)和2×schedules的结果。这些schedules是从Maskr-CNN最初的论文[32]继承而来的,考虑到该领域后来的进展,这可能是次优的。在表A.1中,我们补充了6×schedule(∼72个epoch)的结果,并与2×计划的结果进行了比较。

我们观察到:(i)使用ImageNet监督的预训练进行微调仍然有改进(41.9 APbb);(ii)从头开始的训练基本上赶上了(41.4 APbb);(iii)MoCo同行进一步改进(例如,到42.8 APbb),并且有更大的差距(例如,6×+0.9 APbb,而2×+0.5 APbb)。表A.1和表5表明,当微调时间较长时,MoCo预训练特征比ImageNet监督特征具有更大的优势。

表A.1 目标检测和实例分割可可:2x vs.6x schedule。括号中是与ImageNet监督的预训练对应项之间的差距。绿色表示至少+0.5点的差距。

A.9    Shuffling BN的消融

图A.1给出了使用和不使用shuffling BN的MoCo训练曲线:去除shuffling BN对借口任务表现出明显的过度拟合:借口任务(虚线)的训练精度迅速提高到>99.9%,基于kNN的验证分类精度(实线)很快下降。这在MoCo和端到端变体中都可以观察到;memory bank变体隐式地对和具有不同的统计信息,因此避免了这个问题。

这些实验表明,不使用shuffling BN的情况下,子批量统计数据可以作为一个“签名(“signature”)”来判断positive key在哪个子批量中。shuffling BN可以删除此signature并避免此类欺骗。

MoCo_第16张图片
图A.1 shuffling BN的消融。虚线:借口任务的训练曲线,绘制为(K+1)路字典查找的准确度。实线:基于kNN的监视器[61](非线性分类器)对ImageNet分类精度的验证曲线。这幅图展示了前80个时期的训练:不使用shuffling BN的话,训练时间越长,过拟合越严重。



MoCo v3    2021.4.5

An Empirical Study of Training Self-Supervised Visual Transformers

https://arxiv.org/abs/2104.02057

本文并不描述一种新的方法。取而代之的是,鉴于计算机视觉的最新进展,它研究了一个简单的、递增的、但必须知道的基线:视觉变换器的自监督学习(ViT)。虽然标准卷积网络的训练方法已经非常成熟和健壮,但是ViT的训练方法还没有建立起来,特别是在训练变得更具挑战性的自监督场景中。在这项工作中,我们回到了基础,并调查了几个基本组成部分对训练自监督的ViT的影响。我们观察到,不稳定性是降低精确度的一个主要问题,显然很好的结果可以掩盖它。我们发现,这些结果确实是部分失败,当训练变得更稳定时,它们可以得到改善。我们在MoCo v3和其他几个自监督框架中对ViT结果进行了基准测试,并在各个方面进行了烧蚀。我们讨论了目前的积极证据以及挑战和开放性问题。希望本文的工作能为今后的研究提供有益的数据点和经验。



MoCo只能多GPU实现吗?    一个GPU也可以!   

https://hub.fastgit.org/facebookresearch/moco/issues/47

https://hub.fastgit.org/facebookresearch/SlowFast/blob/master/slowfast/models/batchnorm_helper.py#L37-L46

MoCo_第17张图片

你可能感兴趣的:(MoCo)