没有合适的资源?快使用搜索试试~ 我知道了~
动量对比:无监督视觉表示学习的动态字典构建和迁移性能
Kaiming HeHaoqi FanYuxin WuSaining XieRoss GirshickFacebook AI Research (FAIR)q197290动量对比用于无监督的视觉表示学习0摘要0我们提出了动量对比(MoCo)用于无监督的视觉表示学习。从对比学习的角度来看,我们使用一个队列和一个移动平均编码器构建了一个动态字典。这使得可以动态构建一个大而一致的字典,从而促进对比无监督学习。MoCo在ImageNet分类任务的常见线性协议下取得了有竞争力的结果。更重要的是,MoCo学习到的表示在下游任务中具有很好的迁移性能。MoCo在PASCALVOC、COCO和其他数据集上的7个检测/分割任务中,有时可以超过其有监督预训练对应物,并取得较大的优势。这表明在许多视觉任务中,无监督和有监督表示学习之间的差距已经大大缩小。0代码:https://github.com/facebookresearch/moco01. 引言0无监督的表示学习在自然语言处理中非常成功,例如GPT[50, 51]和BERT[12]。但在计算机视觉领域,有监督的预训练仍然占主导地位,而无监督方法通常落后。原因可能在于它们各自的信号空间的差异。语言任务具有离散的信号空间(单词、子词单元等),可以建立基于标记化字典的无监督学习。相比之下,计算机视觉进一步关注字典的构建[54, 9,5],因为原始信号是在连续的高维空间中,并且不适合人类交流(例如,不像单词)。最近的几项研究[61, 46, 36, 66,35, 56,2]使用与对比损失[29]相关的方法,在无监督的视觉表示学习上取得了有希望的结果。尽管受到不同的动机驱动,但这些方法可以被看作是构建动态字典。字典中的“键”(标记)是从数据(例如图像或补丁)中采样的,并由编码器网络表示。无监督学习训练编码器执行字典查找:编码的“查询”应与其匹配的键相似,与其他键不相似。学习被制定为最小化对比损失[29]。0编码器动量编码器0对比损失0相似性0队列 k 0 k1 k 2 ...0x 查询 x 键 0 x 键 1 x 键 2 ...0图1. 动量对比(MoCo)通过使用对比损失将编码的查询 q与编码的键字典进行匹配,训练了一个视觉表示编码器。字典键 { k0 , k 1 , k 2 , ... }是由一组数据样本动态定义的。字典被构建为一个队列,当前的小批量被入队,最旧的小批量被出队,使其与小批量大小解耦。键由一个缓慢前进的编码器编码,由查询编码器驱动。这种方法可以为学习视觉表示提供一个大而一致的字典。0从这个角度来看,我们假设在训练过程中构建的字典应该是:(i)大的,(ii)在演化过程中保持一致。直观地说,一个更大的字典可能更好地采样底层的连续高维视觉空间,而字典中的键应该由相同或相似的编码器表示,以使其与查询的比较保持一致。然而,现有使用对比损失的方法在这两个方面中可能存在局限性(在上下文中稍后讨论)。0我们提出了动量对比(MoCo)作为一种使用对比损失进行无监督学习的构建大型一致字典的方法(图1)。我们将字典作为数据样本的队列进行维护:当前小批量的编码表示被入队,最旧的被出队。队列将字典大小与小批量大小解耦,使其可以很大。此外,由于字典键来自前面几个小批量,因此提出了一种缓慢前进的键编码器,实现为查询编码器的基于动量的移动平均值,以保持一致性。Lq = − logexp(q·k+/τ)�Ki=0 exp(q·ki/τ)(1)97300MoCo是一种用于对比学习的构建动态字典的机制,可以与各种预训练任务一起使用。在本文中,我们遵循一个简单的实例区分任务[61, 63,2]:如果查询和键是同一图像的编码视图(例如不同的裁剪),则它们匹配。使用这个预训练任务,MoCo在ImageNet数据集[11]的线性分类常规协议下展现出竞争力的结果。无监督学习的一个主要目的是通过微调将能够转移到下游任务的表示(即特征)进行预训练。我们展示了在与检测或分割相关的7个下游任务中,MoCo无监督预训练可以超越其ImageNet监督对应物,在某些情况下差距非常大。在这些实验中,我们探索了在ImageNet或十亿级Instagram图像集上预训练的MoCo,证明了MoCo在更真实、十亿级图像规模和相对未筛选的场景中表现良好。这些结果表明,MoCo在许多计算机视觉任务中大大缩小了无监督和监督表示学习之间的差距,并且可以作为ImageNet监督预训练在几个应用中的替代方案。02. 相关工作0无监督/自监督学习方法通常涉及两个方面:预训练任务和损失函数。术语“预训练”意味着解决的任务不是真正感兴趣的,而是仅为了学习良好的数据表示而解决的。损失函数通常可以独立于预训练任务进行研究。MoCo侧重于损失函数方面。接下来,我们将讨论与这两个方面相关的研究。0损失函数。定义损失函数的一种常见方式是衡量模型预测与固定目标之间的差异,例如通过L1或L2损失重构输入像素(例如自动编码器),或通过交叉熵或基于边界的损失将输入分类为预定义的类别(例如八个位置[13],颜色分组[64])。其他替代方案也是可能的。对比损失[29]衡量表示空间中样本对的相似性。与将输入与固定目标匹配不同,在对比损失的形式中,目标可以在训练过程中动态变化,并且可以根据网络计算的数据表示来定义[29]。对比学习是最近几项无监督学习研究的核心内容[61, 46, 36, 66, 35, 56,2],我们稍后在上下文中详细介绍(第3.1节)。对抗性损失[24]衡量概率分布之间的差异。这是一种广泛成功的技术。01自监督学习是无监督学习的一种形式。它们之间的区别在现有文献中是非正式的。在本文中,我们使用更经典的术语“无监督学习”,意思是“不受人类注释标签监督的”。0用于无监督数据生成的对抗性表示学习方法在[15,16]中进行了探索。生成对抗网络与噪声对比估计(NCE)[28]之间存在关系(参见[24])。0前提任务。已经提出了各种各样的前提任务。例如,恢复某种损坏下的输入,例如去噪自编码器[ 58],上下文自编码器[ 48 ]或交叉通道自编码器(着色)[ 64 , 65]。一些前提任务通过对单个(“范例”)图像进行变换来形成伪标签,例如图像变换[ 17 ],补丁排序[ 13 , 45],跟踪[ 59 ]或分割视频中的对象[ 47 ],或者聚类特征[ 3 ,4 ]。0对比学习 vs .前提任务。各种前提任务可以基于某种形式的对比损失函数。实例鉴别方法[ 61 ]与基于范例的任务[ 17 ]和NCE[ 28]相关。对比预测编码(CPC)[ 46]中的前提任务是一种上下文自编码[ 48]的形式,对比多视角编码(CMC)[ 56 ]与着色[ 64]相关。03. 方法03.1. 对比学习作为字典查找0对比学习[ 29]及其最新发展可以被视为训练一个用于字典查找任务的编码器,如下所述。考虑一个编码查询 q 和一组编码样本 { k0 , k 1 , k 2 , ... },它们是字典的键。假设字典中有一个单一的键(表示为 k+ ),它与 q 匹配。对比损失[ 29 ]是一个函数,当 q与其正键 k + 相似且与所有其他键(对于 q被视为负键)不相似时,其值较低。通过点积来衡量相似性,本文考虑了一种对比损失函数,称为InfoNCE[ 46 ]:0其中 τ 是一个温度超参数[ 61 ]。求和是在一个正样本和K 个负样本上进行的。直观地说,这个损失是一个( K+1)-路softmax分类器的对数损失,该分类器试图将 q分类为 k + 。对比损失函数也可以基于其他形式[ 29 , 59, 61 , 36],例如基于边界的损失和NCE损失的变体。对比损失作为训练表示查询和键的编码器网络的无监督目标函数[ 29]。一般来说,查询表示是 q = f q ( x q ) ,其中 f q是一个编码器网络,而 x q 是一个查询样本(同样, k = f k ( x k ) )。它们的实例化取决于具体的前提任务。输入x q 和 x k 可以是图像[ 29 , 61 , 63 ],补丁[ 46]或由一组补丁组成的上下文[ 46 ]。网络 f q 和 f k可以是相同的[ 29 , 59 , 63 ],部分共享的[ 46 , 36 , 2]或不同的[ 56 ]。qkqk(c) MoCoxqxkqkq·kq·kq·k97310对比损失0梯度梯度0(a) 端到端 x q x k0对比损失0梯度0编码器动量编码器0对比损失0采样0内存库0梯度0(b) 内存库 x q0编码器编码器 q 编码器 k0图2.三种对比损失机制的概念比较(实证比较见图3和表3)。这里我们展示了一对查询和键。这三种机制在键的维护方式和键编码器的更新方式上有所不同。(a):计算查询和键表示的编码器通过反向传播进行端到端更新(两个编码器可以不同)。(b):键表示从一个内存库中进行采样[ 61 ]。 (c):MoCo通过动量更新的编码器即时编码新的键,并维护一个键队列(此图中未示)。03.2. 动量对比0从上述角度来看,对比学习是一种在高维连续输入(如图像)上构建离散字典的方法。字典在动态意义上是随机采样的键,并且键编码器在训练过程中会演化。我们的假设是,通过一个包含丰富的负样本集的大字典可以学习到好的特征,同时尽可能保持字典键的编码器的一致性。基于这个动机,我们提出了下面描述的动量对比方法。0字典作为队列。我们方法的核心是将字典作为数据样本的队列进行维护。这样可以重复使用来自前一批次的编码键。引入队列使得字典大小与小批量大小解耦。我们的字典大小可以远大于典型的小批量大小,并且可以作为超参数进行灵活和独立地设置。字典中的样本逐渐被替换。当前的小批量被入队到字典中,而队列中最旧的小批量被移除。字典始终表示所有数据的一个采样子集,同时维护这个字典的额外计算是可管理的。此外,移除最旧的小批量可能是有益的,因为它的编码键是最过时的,因此与最新的编码键最不一致。0动量更新。使用队列可以使字典变大,但是通过反向传播更新键编码器变得不可行(梯度应该传播到队列中的所有样本)。一种简单的解决方案是从查询编码器fq复制键编码器fk,忽略梯度。但是这种解决方案在实验中效果不好(第4.1节)。我们假设这种失败是由于快速变化的编码器降低了键表示的一致性。我们提出了动量更新来解决这个问题。0形式上,将fk的参数表示为θk,将fq的参数表示为θq,我们通过以下方式更新θk:0θk ← mθk + (1 - m)θq. (2)0这里的m ∈ [0,1)是动量系数。只有参数θq通过反向传播进行更新。方程(2)中的动量更新使得θk的演化比θq更加平滑。因此,尽管队列中的键由不同的编码器(在不同的小批量中)进行编码,但这些编码器之间的差异可以变得很小。在实验中,相对较大的动量(例如m =0.999,我们的默认值)比较小的值(例如m =0.9)效果要好得多,这表明一个演化缓慢的键编码器是利用队列的核心。0与先前机制的关系。MoCo是使用对比损失的一种通用机制。我们将其与图2中的两种现有通用机制进行比较。它们在字典大小和一致性方面表现出不同的特性。通过反向传播的端到端更新是一种自然的机制(例如[29, 46, 36, 63, 2,35],图2a)。它使用当前小批量中的样本作为字典,因此键是一致编码的(由相同的编码器参数集)。但是字典大小与小批量大小耦合,受限于GPU内存大小。它还面临大型小批量优化的挑战[25]。一些最近的方法[46, 36,2]基于由局部位置驱动的预训练任务,其中字典大小可以通过多个位置进行扩大。但是这些预训练任务可能需要特殊的网络设计,例如对输入进行分块处理[46]或自定义感受野大小[2],这可能会使这些网络在下游任务中的转移变得复杂。另一种机制是[61]提出的存储库方法(图2b)。存储库由数据集中所有样本的表示组成。每个小批量的字典是从存储库中随机采样的,没有反向传播,因此可以支持大字典大小。然而,样本在97320Algorithm 1 MoCo的类似于PyTorch风格的伪代码。0# f_q,f_k:查询和键的编码器网络 #queue:作为键队列的字典(CxK) # m:动量 # t:温度0f_k.params = f_q.params # 初始化 for x in loader: # 加载一个小批量 x with Nsam0x_q = aug(x) # 一个随机增强版本 x_k = aug(x) # 另一个随机增强版本0q = f_q.forward(x_q) # 查询:NxC k = f_k.forward(x_k) #键:NxC k = k.detach() # 键没有梯度0# 正对数:Nx1 l_pos = bmm(q.view(N,1,C), k.view(N,C,1))0# 负对数:NxK l_neg = mm(q.view(N,C), queue.view(C,K))0# 对数:Nx(1+K) logits = cat([l_pos, l_neg], dim=1)0# 对比损失,公式(1)labels = zeros(N) # 正样本为第0个loss= CrossEntropyLoss(logits/t, labels)0# SGD更新:查询网络 loss.backward()update(f_q.params)0# 动量更新:键网络f_k.params =m*f_k.params+(1-m)*f_q.params0# 更新字典 enqueue(queue, k) # 将当前小批量入队 dequeue(queue) #出队最早的小批量0bmm:批次矩阵乘法;mm:矩阵乘法;cat:连接。0当内存库最后一次被看到时,它已经更新,因此采样的键实际上是关于过去时期各个步骤的编码器的。[61]中采用了内存库的动量更新。它的动量更新是关于相同样本的表示,而不是编码器。这个动量更新与我们的方法无关,因为MoCo不会追踪每个样本。此外,我们的方法更节省内存,并且可以在十亿级数据上进行训练,而这对于内存库来说是难以处理的。第4节通过实验证明了这三种机制的比较。03.3. 预训练任务0对比学习可以驱动各种预训练任务。由于本文的重点不是设计新的预训练任务,我们主要使用了一个简单的任务,主要遵循[61]中的“实例鉴别”任务,与最近的一些工作[63,2]相关。根据[61],如果查询和键来自同一图像,则将它们视为正样本对,否则视为负样本对。根据[63,2],我们对同一图像的两个随机“视图”进行随机数据增强,形成正样本对。查询和键分别由它们的编码器f q和fk进行编码。编码器可以是任何卷积神经网络[39]。算法1提供了MoCo的伪代码。0预训练任务。对于当前的小批量,我们对查询和对应的键进行编码,形成正样本对。负样本来自队列。0技术细节。我们采用ResNet[33]作为编码器,其最后的全连接层(在全局平均池化之后)具有固定维度的输出(128-D[61])。该输出向量通过其L2范数进行归一化[61]。这是查询或键的表示。公式(1)中的温度τ设置为0.07[61]。数据增强设置遵循[61]:从随机调整大小的图像中获取一个224×224像素的裁剪,然后进行随机颜色抖动、随机水平翻转和随机灰度转换,所有这些都可以在PyTorch的torchvision包中找到。0Shuf�ing BN. 我们的编码器f q和fk都使用了批归一化(BN)[37],就像标准的ResNet[33]一样。在实验中,我们发现使用BN会阻止模型学习良好的表示,这与[35]中的报告相似(该报告避免使用BN)。模型似乎“作弊”了预训练任务,并且很容易找到一个低损失的解决方案。这可能是因为样本之间的批内通信(由BN引起)泄漏了信息。我们通过对BN进行洗牌来解决这个问题。我们使用多个GPU进行训练,并且对每个GPU上的样本独立进行BN(与常见做法相同)。对于关键编码器fk,我们在当前小批量中对样本顺序进行洗牌,然后在分配给GPU之前进行洗牌(编码后再进行洗牌);查询编码器fq的小批量样本顺序不改变。这确保用于计算查询和其正样本键的批次统计信息来自两个不同的子集。这有效地解决了作弊问题,并允许训练从BN中受益。我们在我们的方法和其端到端消融对照组(图2a)中都使用了洗牌的BN。这与内存库对照组(图2b)无关,因为过去的正样本键来自不同的小批量。04. 实验0我们研究了在以下数据集上进行的无监督训练:ImageNet-1M(IN-1M):这是ImageNet[11]的训练集,包含了1000个类别的约128万张图像(通常称为ImageNet-1K;我们按照图像数量计算,因为无监督学习不利用类别信息)。该数据集在类别分布上平衡,并且其图像通常包含对象的标志性视图。Instagram-1B(IG-1B):根据[44]的方法,这是一个包含约10亿(9.4亿)来自Instagram的公共图像的数据集。这些图像来自于与ImageNet类别相关的约1500个标签[44]。与IN-1M相比,该数据集相对不太经过筛选,具有现实世界数据的长尾、不平衡分布。该数据集包含标志性对象和场景级别的图像。50525456586050.052.054.156.557.858.054.756.457.559.060.460.654.956.357.397330训练。我们使用SGD作为优化器。SGD的权重衰减为0.0001,动量为0.9。对于IN-1M,我们在8个GPU上使用256的小批量大小(算法1中的N),初始学习率为0.03。我们训练200个epoch,学习率在第120和160个epoch时乘以0.1[61],共计约53小时训练ResNet-50。对于IG-1B,我们在64个GPU上使用1024的小批量大小,学习率为0.12,每62500次迭代(6400万图像)后按0.9×指数衰减。我们训练125万次迭代(约1.4个IG-1B的epoch),共计约6天训练ResNet-50。04.1. 线性分类协议0我们首先通过冻结特征进行线性分类验证我们的方法,遵循常见的协议。在本小节中,我们在IN-1M上进行无监督预训练。然后我们冻结特征并训练一个监督线性分类器(一个全连接层后面跟着softmax)。我们在ResNet的全局平均池化特征上训练这个分类器,共进行100个epoch。我们报告在ImageNet验证集上的1-crop、top-1分类准确率。对于这个分类器,我们进行了网格搜索,发现最佳的初始学习率为30,权重衰减为0(与[56]中类似地报告)。这些超参数对于本小节中呈现的所有消融实验都表现良好。这些超参数值意味着特征分布(例如大小)与ImageNet有监督训练的特征分布可能存在显著差异,这是我们将在第4.2节中重新讨论的一个问题。0消融实验:对比损失机制。我们比较了图2中所示的三种机制。为了关注对比损失机制的影响,我们将它们都实现在相同的预训练任务中,如第3.3节所述。我们还使用了与对比损失函数InfoNCE相同的形式,即公式(1)。因此,比较仅限于这三种机制。结果如图3所示。总体而言,这三种机制都受益于更大的K。在内存库机制下,已经观察到了类似的趋势[61,56],而这里我们展示了这种趋势更为普遍,可以在所有机制中观察到。这些结果支持我们构建大型词典的动机。当K较小时,端到端机制的性能与MoCo相似。然而,由于端到端的要求,字典大小受到小批量大小的限制。在这里,高端机器(8个Volta 32GBGPU)能够承受的最大小批量为1024。更重要的是,大型小批量训练是一个开放性问题[25]:我们发现在这里使用线性学习率缩放规则[25]是必要的,否则准确率会下降(在1024小批量下下降约2%)。但是,使用更大的小批量进行优化更加困难[25],而且是否可以将这种趋势推广到更大的K是有问题的,即使内存足够。0256 512 1024 4096 16384 65536 K(对数刻度)0准确率(%)0端到端 内存库MoCo0图3.在ImageNet线性分类协议下,对比了三种对比损失机制。我们采用相同的预训练任务(第3.3节)只是改变了对比损失机制(图2)。在内存库和MoCo中,负样本的数量为K,而在端到端中为K-1(因为正样本键位于同一小批量中)。网络为ResNet-50。0[61]中的记忆库机制可以支持更大的字典大小。但它比MoCo差2.6%。这与我们的假设一致:记忆库中的键来自过去时期各处的非常不同的编码器,并且它们不一致。请注意,58.0%的记忆库结果反映了我们对[61]的改进实现。20消融实验:动量。下表显示了使用不同的MoCo动量值(方程(2)中的m)进行预训练时的ResNet-50准确率(这里K= 4096):0动量 m 0 0.9 0.99 0.999 0.99990准确率(%) 失败 55.2 57.8 59.0 58.9当m在0.99�0.9999之间时,它表现得相当好,表明进展缓慢(即相对较大的动量)的关键编码器是有益的。当m太小(例如0.9)时,准确率显著下降;在没有动量的极端情况下(m为0),训练损失波动并且无法收敛。这些结果支持我们构建一致字典的动机。0与先前结果的比较。先前的无监督学习方法在模型大小上可能有很大差异。为了公平和全面的比较,我们报告准确率与参数数量的权衡。除了ResNet-50(R50)[33],我们还报告了其更宽(更多通道)的变体,按照[38]的方法。我们设置K = 65536和m =0.999。表1是比较结果。MoCo在R50上表现出竞争力,并达到了60.6%的准确率,优于所有类似模型大小(约24M)的竞争对手。MoCo受益于更大的模型,在R50w 4×上实现了68.6%的准确率。值得注意的是,我们使用标准的ResNet-50并且不需要特定的架构设计,例如。02 这里的58.0%是使用InfoNCE和K = 65536时的结果。当使用NCE和K =4096(与[61]相同)时,我们重现了54.3%的结果,接近[61]中的54.0%。3参数是特征提取器的参数:例如,如果线性分类中不包括convx,则不计算conv x的参数。4 我们的w 2 ×和w 4 ×模型对应于[38]中的“ ×8”和“ × 16”情况,因为标准尺寸的ResNet在[38]中被称为“ × 4”。020040060040506070ExemplarRelativePositionJigsawRotationColorizationDeepClusterInstDiscCPCv1CPCv2BigBiGAN-R50BigBiGAN-Rv50w4xAMDIM-smallAMDIM-largeCMC-R50CMC-R50w2xLocalAggR50RX50R50w2xR50w4xRv50w4×8661.3R50w2×L+ab18868.4†AMDIMlarge62668.1†MoCoR502460.6RX504663.9R50w2×9465.497340#参数(M)0准确率(%)0先前的MoCo0方法 架构 #参数(M) 准确率(%)0Exemplar [17] R50w 3 × 211 46.0 [38] RelativePosition [13]R50w 2 × 94 51.4 [38] Jigsaw [45] R50w 2 × 94 44.6 [38]Rotation [19] Rv50w 4 × 86 55.4 [38] Colorization [64] R101 � 2839.6 [14] DeepCluster [3] VGG [53] 15 48.4 [4] BigBiGAN [16]R50 24 56.60基于对比学习的方法如下:InstDisc [61] R50 24 54.0 LocalAgg [66] R50 24 58.8 CPCv1 [46] R101 � 28 48.7 CPC v2 [35] R170 �更宽 303 65.9 CMC [56] R50 L+ab 47 64.1 †0AMDIM [2] AMDIM small 194 63.5 †0R50w 4 × 375 68.6 表1.在ImageNet上线性分类协议下的比较。图表可视化了表格。所有结果都是在ImageNet-1M训练集上进行无监督预训练,然后在冻结特征上进行监督线性分类训练,并在验证集上进行评估。参数计数是特征提取器的参数。我们与改进的重新实现进行比较(数字后面有引用)。注释:R101 � /R170 �是去除了最后一个残差阶段的ResNet-101/170 [14, 46,35],R170是更宽的[35];Rv50是可逆网络[23],RX50是ResNeXt-50-32 ×8d [62]。0†:预训练使用FastAutoAugment [40],由ImageNet标签进行监督。0修补输入[46,35],精心设计的感受野[2],或者结合两个网络[56]。通过使用一个不针对预训练任务定制的架构,更容易将特征转移到各种视觉任务中并进行比较,这将在下一小节中进行研究。本文的重点是一种用于一般对比学习的机制;我们不探索可能进一步提高准确性的其他因素(如特定的预训练任务)。例如,“MoCov2”[8]是本文初稿的扩展,通过对数据增强和输出投影头进行小的改变,使用R50实现了71.1%的准确率(从60.6%提高)。我们认为这个额外的结果显示了MoCo框架的普适性和鲁棒性。0预训练 AP 50 AP AP 750随机初始化 64.4 37.9 38.60有监督 IN-1M 81.4 54.0 59.10MoCo IN-1M 81.1(-0.3)54.6(+0.6)59.9(+0.8)0MoCo IG-1B 81.6(+0.2)55.5(+1.5)61.2(+2.1)0(a)Faster R-CNN,R50-扩张-C50预训练 AP 50 AP AP 750随机初始化 60.2 33.8 33.10有监督 IN-1M 81.3 53.5 58.80MoCo IN-1M 81.5(+0.2)55.9(+2.4)62.6(+3.8)0MoCo IG-1B 82.2(+0.9)57.2(+3.7)63.7(+4.9)0(b)Faster R-CNN,R50-C4 表2. 在PASCAL VOCtrainval07+12上微调的目标检测。评估指标为test2007: AP50(默认的VOC指标),AP(COCO风格)和AP75,平均5次试验。所有模型都进行了24k次迭代的微调(约23个epoch)。括号中是与ImageNet有监督预训练对应模型之间的差距。绿色表示差距至少为+0.5个点。0R50-扩张-C5 R50-C4 预训练 AP 50 AP AP 75 AP 50 AP AP 750端到端 79.2 52.0 56.6 80.4 54.6 60.3 内存库 79.8 52.9 57.9 80.654.9 60.60MoCo 81.1 54.6 59.9 81.5 55.9 62.6 表3. 在PASCALVOC目标检测上比较三种对比损失机制,微调trainval07+12并在test2007上评估(平均5次试验)。所有模型都是我们实现的(图3),在IN-1M上进行了预训练,并使用与表2中相同的设置进行微调。04.2. 特征转移0无监督学习的一个主要目标是学习可转移的特征。在下游任务的微调中,ImageNet有监督预训练作为初始化时最具影响力(例如[21,20,43,52])。接下来,我们将MoCo与ImageNet有监督预训练进行比较,将其转移到包括PASCALVOC [18]、COCO[42]等各种任务中。作为前提条件,我们讨论了涉及的两个重要问题:归一化和调度。0归一化。如第4.1节所述,无监督预训练产生的特征与ImageNet有监督预训练的特征可能具有不同的分布。但是,下游任务的系统通常具有为有监督预训练选择的超参数(例如学习率)。为了解决这个问题,我们在微调过程中采用特征归一化:我们使用经过训练的BN进行微调(并在多个GPU之间进行同步[49]),而不是通过一个仿射层[33]将其冻结。我们还在新初始化的层(例如FPN[41])中使用BN,这有助于校准幅度。我们在微调有监督和无监督预训练模型时进行归一化。MoCo使用与ImageNet有监督对应模型相同的超参数。0调度。如果微调的时间安排足够长,从随机初始化训练检测器可以作为强基线,并且可以在COCO上与ImageNet有监督对应模型相匹配[31]。我们的目标是研究可转移性。97350AP 50 AP AP 75 预训练 RelPos,来自[14] Multi-task[14] Jigsaw,来自[26] LocalAgg[66] MoCo MoCo Multi-task[14] MoCo0有监督 IN-1M 74.2 74.2 70.5 74.6 74.4 42.4 44.3 42.70无监督 IN-1M 66.8(-7.4)70.5(-3.7)61.4(-9.1)69.1(-5.5)74.9(+0.5)46.6(+4.2)43.9(-0.4)50.1(+7.4)0无监督 IN-14M - - 69.2(-1.3)- 75.2(+0.8)46.9(+4.5)- 50.2(+7.5)0无监督 YFCC-100M - - 66.6(-3.9)- 74.7(+0.3)45.9(+3.5)- 49.0(+6.3)0无监督 IG-1B - - - - 75.6(+1.2)47.6(+5.2)- 51.7(+9.0)0表4.在PASCAL VOCtrainval2007上微调的目标检测与先前方法的比较。评估在test2007上进行。ImageNet有监督对应模型来自各自的论文,并报告为与相应的无监督预训练对应模型具有相同结构。所有条目都基于C4骨干。[14]中的模型是R101v2[34],其他模型是R50。RelPos(相对位置)[13]的结果是多任务论文[14]中的最佳单任务情况。Jigsaw[45]的结果来自[26]中的基于ResNet的实现。我们的结果是在9k次迭代的微调中,平均了5次试验。括号中是与ImageNet有监督预训练对应模型的差距。绿色表示至少有0.5个点的差距。0特征的稳定性,因此我们的实验是在受控的时间表上进行的,例如COCO的1×(约12个epoch)或2×的时间表[22],而不是[31]中的6×�9×。在像VOC这样的较小数据集上,训练时间更长可能无法赶上[31]。尽管如此,在我们的微调中0调度与ImageNet有监督对应模型相同,并提供随机初始化结果作为参考。0综上所述,我们的微调使用与有监督预训练对应模型相同的设置。这可能使MoCo处于不利地位。即便如此,MoCo仍然具有竞争力。这样做还使得在多个数据集/任务上进行比较成为可能,而无需额外的超参数搜索。04.2.1 PASCAL VOC目标检测0设置。检测器是FasterR-CNN[52],使用R50-dilated-C5或R50-C4[32]作为骨干网络(详见附录),使用BN调整,在[60]中实现。我们对所有层进行端到端的微调。训练时图像尺度为[480,800]像素,推理时为800像素。所有条目使用相同的设置,包括有监督预训练基线。我们评估AP50(即IoU阈值为50%)和COCO风格的AP和AP75这两种评估指标。评估在VOC test2007数据集上进行。0消融实验:骨干网络。表2显示了在trainval07+12(约16.5k张图像)上微调的结果。对于R50-dilated-C5(表2a),在IN-1M上预训练的MoCo与有监督的预训练对应模型相当,而在IG-1B上预训练的MoCo则超过了它。对于R50-C4(表2b),在IN-1M或IG-1B上的MoCo都优于有监督的对应模型:AP 50提高了最多0.9个点,AP提高了3.7个点,AP75提高了4.9个点。有趣的是,传输精度取决于检测器结构。对于现有的基于ResNet的结果,默认使用的C4骨干[14,61, 26,66],无监督预训练的优势更大。预训练与检测器结构之间的关系在过去一直被掩盖,应该是一个需要考虑的因素。0消融实验:对比损失机制。我们指出,这些结果部分是因为我们为对比学习建立了坚实的检测基线。为了准确衡量仅由使用MoCo机制贡献的收益0在对比学习中,我们使用端到端或内存库机制对预训练模型进行微调,这两种机制都是由我们实现的(即图3中的最佳模型),使用与MoCo相同的微调设置。这些竞争对手的表现不错(表3)。它们的AP和AP75与C4骨干相比也更高,而ImageNet有监督对应模型的其他指标较低(参见表2b)。它们在所有指标上都不如MoCo。这表明了MoCo的好处。此外,如何在更大规模的数据上训练这些竞争对手是一个开放的问题,它们可能无法从IG-1B中受益。0与先前结果的比较。按照竞争对手的做法,我们使用C4骨干在trainval2007(约5k张图像)上进行微调。比较结果见表4。对于AP50指标,没有任何先前的方法能够赶上其相应的监督预训练对应模型。MoCo在IN-1M、IN-14M(完整的ImageNet)、YFCC-100M[55]和IG-1B上的预训练都能超越监督基线。在更严格的指标上获得了较大的增益:AP最多增加了5.2个点,AP75最多增加了9.0个点。这些增益大于trainval07+12中的增益(表2b)。04.2.2 COCO目标检测和分割0设置。模型是Mask R-CNN [32],使用FPN[41]或C4骨干,进行了BN调整,实现在[60]中完成。训练期间的图像尺度为[640,800]像素,推理时为800像素。我们对所有层进行端到端的微调。我们在train2017数据集(约118k张图像)上进行微调,并在val2017上进行评估。调度采用默认的1×或2×[22]。0结果。表5显示了在COCO上使用FPN(表5a,b)和C4(表5c,d)骨干的结果。使用1×schedule,所有模型(包括ImageNet监督对应模型)都训练不足,如与2×schedule情况下的差距约为2个点所示。使用2×schedule,MoCo在两种骨干上的所有指标都优于其ImageNet监督对应模型。04.2.3 更多的下游任务0表6显示了更多的下游任务(附录中的实现细节)。总体而言,MoCo表现出竞争力。APbbAPbb50APbb75APmkAPmk50APmk7536.756.740.033.753.835.940.661.344.436.858.139.540.8 (+0.2) 61.6 (+0.3) 44.7 (+0.3) 36.9 (+0.1) 58.4 (+0.3) 39.7 (+0.2)41.1 (+0.5) 61.8 (+0.5) 45.1 (+0.7) 37.4 (+0.6) 59.1 (+1.0) 40.2 (+0.7)APbbAPbb50APbb75APmkAPmk50APmk7535.654.638.231.451.533.540.059.943.134.756.536.940.7 (+0.7) 60.5 (+0.6) 44.1 (+1.0) 35.4 (+0.7) 57.3 (+0.8) 37.6 (+0.7)41.1 (+1.1) 60.7 (+0.8) 44.8 (+1.7) 35.6 (+0.9) 57.4 (+0.9) 38.1 (+1.2)97360预训练AP bb AP bb 50 AP bb 75 AP mk AP mk 50 AP mk 750随机初始化。31.0 49.5 33.2 28.5 46.8 30.40超级。IN-1M 38.9 59.6 42.7 35.4 56.5 38.10MoCo IN-1M 38.5(-0.4)58.9(-0.7)42.0(-0.7)35.1(-0.3)55.9(-0.6)37.7(-0.4)MoCo IG-1B38.9
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功