机器学习之自监督学习(四)MoCo系列翻译与总结(一)

Momentum Contrast for Unsupervised Visual Representation Learning

Abstract

我们提出了"动量对比"( Momentum Contrast MoCo )来进行无监督的视觉表示学习。从对比学习的角度来看,我们将其视为字典查找,通过构建一个带有队列和移动平均编码器的动态字典。这使得可以动态构建一个大型且一致的字典,有助于进行对比的无监督学习。 MoCo ImageNet 分类的常见线性协议下提供了竞争性的结果。更重要的是, MoCo 学到的表示在下游任务中具有很好的迁移性能。 MoCo PASCAL VOC COCO 和其他数据集的 7 个检测 / 分割任务中可以胜过其监督预训练的对应方法,有时甚至取得较大的优势。这表明在许多视觉任务中,无监督和监督表示学习之间的差距已经被大大缩小。

1. Introduction

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

(最近的关于对比学习的研究主要表现在动态字典的构建方面。,通过 query 去查找同属于正样本的 key ,通过查找过程构建代理任务并构造损失函数)

最近的一些研究 [61, 46, 36, 66, 35, 56, 2] 展示了使用与对比损失 [29] 相关的方法进行无监督的视觉表示学习取得了令人鼓舞的结果。尽管出发点各不相同,但这些方法可以被视为构建动态字典。字典中的 " " (标记)是从数据(例如图像或补丁)中采样的,并由编码器网络表示。无监督学习训练编码器执行字典查找:编码的 " 查询 " 应该与其匹配的键相似,与其他键不相似。学习被表述为最小化对比损失 [29]

A

字典的构造需要满足以下两点:( 1 )构建的字典应该尽可能的足够大,满足抽样样本尽可能的去逼近整体样本。( 2 )在字典的从动态的 min_batch 中抽取特征表示的过程中应该尽可能的去保持字典的一致性 --- 所有负样本特征尽可能的满足都是同一参数的编码器生成的。为满足这个要去。引入动量更新的放大,当学习率 M 足够大就可以满足 :

θ k ← mθk + (1 − m)θq.

从这个角度来看,我们假设构建具有以下特点的字典是可取的: (i) 大型,以及 (ii) 在训练过程中保持一致性。直观地说,一个更大的字典可能更好地对连续的高维视觉空间进行抽样,同时字典中的键应该由相同或相似的编码器表示,以便与查询进行一致的比较。然而,现有使用对比损失的方法在这两个方面可能存在限制(稍后在上下文中讨论)。

B

  1. end to end : 缺点:字典的大小和 min_batch 大小一样,不能提供更多的 key 去供 query 查询而学习不同的特征,而设备的限制会导致使得 min_batch 不能设置太大,所以 end to end 的方法存在局限性。
  2. memory bank ,根据样本生成一个很大的字典,以 ImageNet-1k 为例,为每一个样本的特征生成一个 key, 然后把所有生成的 key 作为一个字典,然后让 query 和随机随机选取的 key 进行对比学习,学习过程之后,更新字典中对应的 key 。这种构建方法使得需要对字典进行一次遍历,使得字典中的所有 key 都可以更新。但是这种字典的构造方法存在一致性问题,第二个 epoch 之后选取的 key 的更新时间是未知的,造成字典的一致性损失问题。

C

提出:

  1. 构建一个大的以序列为基础的字典,将 min_batch 的特征提取和字典的动态更新剥离。
  2. 提出一个缓慢前进的 key 编码器, key 编码器的实现是基于 query 编码器的动量移动平均,这样可以保持字典的一致性。

我们提出了 " 动量对比 " Momentum Contrast MoCo )作为一种使用对比损失进行无监督学习并构建大型一致字典的方法(图 1 )。 ++①++ 我们将字典维护为一个数据样本的队列:当前小批量的编码表示被加入队列,而最先进入的被移出队列( FIFO 。队列使得字典的大小与小批量大小分离,使其可以很大。此外, ++②++ 由于字典的键来自前几个小批量,我们提出了一个缓慢前进的键编码器,实现为查询编码器的基于动量的移动平均,以维持一致性(动态一致性)。

1. Momentum Contrast MoCo )通过使用对比损失将编码的查询 q 与编码的键字典进行匹配来训练视觉表示编码器。字典键 {k0, k1, k2, ...} 是根据一组数据样本即时定义的。字典被构建为一个队列,当前 min_batch 被入队,最先进入的 min_batch 被出队,与 min_batch 大小解耦。键由一个缓慢前进的编码器进行编码,由动量更新与查询编码器一起推动 ( θ k ← mθk + (1 − m)θq.) 。这种方法能够为学习视觉表示提供一个大而一致的字典。

MoCo 是一种用于构建用于对比学习的动态字典的机制,可以与各种预训练任务一起使用。在本文中,我们遵循一个简单的实例辨别任务 [61, 63, 2] :如果查询( query )和键 (key) 是同一图像的编码视图(例如,不同的裁剪),则它们匹配。通过使用这个预训练任务, MoCo ImageNet 数据集 [11] 的常见线性分类协议下展示了具有竞争力的结果。

无监督学习的一个主要目的是预训练能够通过微调迁移到下游任务的表示(即特征)。我们展示了在与检测或分割相关的 7 个下游任务中, MoCo 无监督预训练可以超越其 ImageNet 监督对应物,在某些情况下超出相当大的幅度。在这些实验中,我们探索了在 ImageNet 或一个包含十亿张 Instagram 图像的数据集上进行的 MoCo 预训练,这表明 MoCo 可以在更真实世界、以十亿级别的图像为规模的、相对不经过筛选的情况下很好地工作。这些结果显示, MoCo 在许多计算机视觉任务中已经大大缩小了无监督和监督表示学习之间的差距,并可以在一些应用中作为 ImageNet 监督预训练的替代选择。

无监督 / 自监督学习方法通常涉及两个方面:预训练任务和损失函数(代理任务的选择以及损失函数的构建)。术语 " 代理任务 " 意味着正在解决的任务不是真正感兴趣的任务,代理任务仅仅是为了学习良好的数据表示而解决的。损失函数通常可以独立于预训练任务进行研究。 MoCo 关注于损失函数方面。接下来,我们将讨论与这两个方面相关的研究。

损失函数。 定义损失函数的一种常见方式是衡量模型的预测( prodict )与 (groud trouth) 固定目标之间的差异,例如通过 L1 L2 损失来重构输入像素(例如,自编码器),或者通过交叉熵或基于边际的损失将输入分类为预定义的类别(例如,八个位置 [13] 、颜色区间 [64] )。下面将描述其他一些可能的替代方法。

对比损失 [29] 度量了表示空间中样本对的相似性。与将输入与固定目标匹配不同,在对比损失的形式化中,目标可以在训练过程中实时变化,并可以根据网络计算的数据表示来定义 [29] 。对比学习是最近几项无监督学习工作的核心 [61, 46, 36, 66, 35, 56, 2] ,我们将在后文中详细阐述(第 3.1 节)。

对抗损失 (GAN) [24] 用于度量概率分布之间的差异,是无监督数据生成的一种广泛成功的技术。关于表示学习的对抗方法已在 [15, 16] 中进行了探讨。此外,存在一些关系(参见 [24] )将生成对抗网络与噪声对比估计( NCE [28] 联系在一起。这些方法在无监督学习和表示学习领域具有重要的应用。

/*----------------------------------------------------------------***---------------------------------------------------------*/

噪声对比估计( Noise Contrastive Estimation NCE )是一种用于训练概率模型的估计方法,常用于自监督学习中的对比学习任务。 NCE 的核心思想是通过对比模型生成的样本与噪声分布中的样本来估计模型参数。

下面是 NCE 的详细解释:

1. ** 目标函数: ** NCE 中,我们的目标是最大化正确样本的概率,并最小化噪声样本的概率。这可以通过最大似然估计来表达。给定一个样本集合,我们希望模型分布能够更好地区分这些样本与噪声分布。

2. ** 正样本和噪声样本: ** 在对比学习任务中,正样本通常是来自真实数据分布的样本,而噪声样本则是从噪声分布中采样得到的。噪声分布可以是任何我们希望模型能够区分的分布,通常是对真实数据的某种变换或扰动。

3. ** 估计方法: ** NCE 引入了一个二元分类任务。对于给定的样本对(正样本和噪声样本),我们训练一个二分类器来判断哪一个是正样本。该分类器的参数即是我们要学习的模型参数。损失函数包括两部分:最大化正样本的概率和最小化噪声样本的概率。

4. ** 对比分布: ** NCE 的核心在于引入一个对比分布,它是一个噪声分布。通过最小化与噪声分布之间的交叉熵,我们迫使模型能够区分真实样本和噪声样本。

5. ** 应用于对比学习: ** 在对比学习任务中, NCE 可以用于训练一个表示学习模型。模型通过最大化正样本的概率,即正确样本与其对应的转换版本的概率,同时最小化噪声样本的概率,即噪声样本与其对应的转换版本的概率。

总体而言, NCE 为对比学习提供了一个理论基础和实际的优化目标,使得模型能够通过自我生成的对比样本进行有效的训练。

/*----------------------------------------------------------------***---------------------------------------------------------*/

代理任务。提出了各种各样的代理任务。例如,恢复带有一些损坏的输入,如去噪自动编码器 [58] 、上下文自动编码器 [48] 或跨通道自动编码器(着色) [64, 65] 。有些代理任务任务通过对单个( " 范例 " )图像的转换生成伪标签,例如图像变换 [17] 、补丁排序 [13, 45] 、视频中的目标跟踪 [59] 或分割对象 [47] ,或者对特征进行聚类 [3, 4]

对比学习与代理任务。各种代理任务可以基于某种形式的对比损失函数。实例辨别方法 [61] 与基于范例的任务 [17] NCE [28] 相关。对比预测编码( CPC [46] 中的预文本任务是上下文自动编码的一种形式 [48] ,在对比多视图编码( CMC [56] 中,它与着色 [64] 相关。

3. Method

3.1. Contrastive Learning as Dictionary Look-up

对比学习 [29] 及其最近的发展可以被看作是针对字典查找任务训练编码器的过程(通过 query 去查找对应的),如下所描述。

从样本中选取部分样本进行查询,使字典足够大满足抽样样本尽可能的去逼近整体样本。

考虑一个编码查询 q 和一组编码样本 {k0, k1, k2, ...} ,它们是字典的键。假设字典中存在一个单一的键(表示为 k+ ),它与查询 q 匹配。 对比损失 [29] 是一个函数,当查询 q 与其正向键 k+ 相似且与所有其他键(对于查询 q 被视为负向键)不相似时,其值较低 使用点积来衡量相似性,本文考虑了一种对比损失函数,称为 InfoNCE[46]

其中,τ 是一个温度超参数,根据 [61] 中的设定。 求和是在一个正样本和 K 个负样本之间进行的。 直观地说,这个损失函数是一个基于 (K+1) 分类的 softmax 分类器的对数损失 ,试图将查询 q 分类为 k+ 。对比损失函数也可以基于其他形式,比如基于边际的损失和 NCE 损失的变种。

对比损失充当了 用于训练表示查询和键的编码器网络的无监督目标函数 [29] 。一般来说,查询的表示为 q = fq(xq) 其中 fq 是一个编码器网络, xq 是一个查询样本(同样, k = fk(xk) )。它们的具体实例取决于特定的代理任务。输入 xq xk 可以是图像 [29, 61, 63] 、图像块 [46] ,或包含一组图像块的上下文 [46] 。编码器网络 fq fk 可以是相同的 [29, 59, 63] ,部分共享的 [46, 36, 2] ,或者不同的 [56] 。这些选择根据具体应用的需求而定。

3.2. Momentum Contrast

从上述角度来看,对比学习是一种在高维连续输入(如图像)上构建离散字典的方法。这个字典是动态的,因为键是随机抽样的,而键编码器在训练过程中会发生变化。我们的假设是,通过覆盖丰富的负样本集的大型字典,可以学到好的特征,同时尽量保持字典键的编码器在其演变过程中尽可能一致。基于这一动机,我们接下来将介绍所谓的 " 动量对比 " Momentum Contrast )。

Dictionary as a queue (字典作为队列) . 我们方法的核心是将字典维护为一个数据样本的队列。这使我们能够重复使用来自直接前几个小批次的编码键。引入队列的概念将字典大小与小批次大小分离。我们的字典大小可以比典型的小批次大小大得多,可以作为一个超参数进行灵活和独立的设置。

字典中的样本会逐渐被替换。当前的小批次被加入到字典中,而队列中最先进入的小批次被移除。字典始终表示了所有数据的抽样子集,同时维护这个字典的额外计算是可以管理的。此外,移除最先进入的小批次可能是有益的,因为它的编码键是最过时的,因此与最新的编码键一致性最差。

动量更新; 使用队列可以使字典变得很大, 但也使得通过反向传播来更新键编码器成为不可行的(梯度应该传播到队列中的所有样本) 。一个朴素的解决方案是从查询编码器 fq 复制键编码器 fk ,忽略了这个梯度。但这个解决方案在实验中效果不佳(第 4.1 节)。我们假设这种失败是由于快速变化的编码器降低了键表示的一致性。为了解决这个问题,我们提出了一个动量更新的方法。

形式上,将 fk 的参数表示为 θ k ,将 fq 的参数表示为 θ q ,我们通过以下方式更新 θ k

θ k ← mθk + (1 − m)θq

这里, m [0, 1) 是一个动量系数。只有参数 θq 通过反向传播来更新。方程 (2) 中的动量更新使 θk 的演化比 θq 更加平滑。因此,尽管队列中的键是由不同的编码器(在不同的小批次中)编码的,这些编码器之间的差异可以变得很小。在实验中,相对较大的动量值(例如, m = 0.999 ,我们的默认值)比较小的值(例如, m = 0.9 )效果要好得多 ,这表明一个慢慢演化的键编码器是利用队列的关键。

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

2. 三种对比损失机制的概念比较(实验比较见图 3 和表 3 )。这里我们展示了一对查询和键。这三种机制在如何维护键以及如何更新键编码器方面有所不同。 (a): 通过反向传播端到端更新用于计算查询和键表示的编码器(这两个编码器可以不同)。 (b): 键表示是从 memory bank 中抽样的 [61] (c): MoCo 通过一个带有动量更新的编码器实时编码新的键,并维护一个键的队列(在本图中未示意)。

通过反向传播的端到端更新是一种自然的机制(例如 [29, 46, 36, 63, 2, 35] ,图 2a )。它使用当前 min_batch 中的样本作为字典,因此键是一致编码的(使用相同的编码器参数集)。但字典大小与小批次大小耦合在一起,受限于 GPU 内存大小。它还受到大型小批量优化的挑战 [25] 一些最近的方法 [46, 36, 2] 基于由局部位置驱动的代理任务,其中字典大小可以通过多个位置来扩大。但这些代理任务可能需要特殊的网络设计,例如将输入进行分块处理 [46] 或自定义感受野大小 [2] ,这可能会使这些网络用于下游任务的转移变得更加复杂。

另一个机制是由 [61] 提出的 memory bank 方法(图 2b )。 memory bank 包括数据集中所有样本的表示。每个小批次的字典是从 memory bank 中随机抽样的,没有反向传播,因此它可以支持大型字典大小。然而, memory bank 中样本的表示是在上次看到它们时更新的,因此抽样的键基本上涉及到整个过去时代中各种不同步骤的编码器,因此不太一致。在 [61] 中采用了 memory bank 的动量更新。它的动量更新是在相同样本的表示上,而不是在编码器上。这种动量更新与我们的方法无关,因为 MoCo 不跟踪每个样本。此外,我们的方法更节省内存,并可以在规模达数十亿的数据上进行训练,而 memory bank 可能不太适用。

4 节在实验上对这三种机制进行了比较。

3.3. Pretext Task

对比学习可以用来驱动各种不同的预训练任务。由于本文的重点不在设计新的代理任务,我们使用了一个简单的任务,主要是基于 [61] 中的 instance 辨别任务,与最近的一些工作 [63, 2] 相关。根据 [61] 的方法,我们将查询和键视为正样本对,如果它们来自同一幅图像,否则视为负样本对。 根据 [63, 2] ,我们会采用随机数据增强下同一图像的两个随机 " 视图 " 来构成一个正样本对。查询和键分别由它们的编码器 fq fk 进行编码。编码器可以是任何卷积神经网络 [39]

算法 1 提供了 MoCo 在这个预训练任务中的伪代码。对于当前的小批次,我们对查询和它们相应的键进行编码,形成正样本对。负样本来自队列。

技术细节 :我们采用 ResNet [33] 作为编码器,其最后一个全连接层(在全局平均池化之后)具有固定维度的输出( 128 [61] )。该输出向量通过其 L2- 范数进行标准化 [61] 。这是查询或键的表示。方程 (1) 中的温度 τ 设置为 0.07 [61] 。数据增强设置遵循 [61] :从随机调整大小的图像中取出一个 224×224 像素的裁剪,然后进行随机颜色抖动、随机水平翻转和随机灰度转换, 这些都在 PyTorch torchvision 包中提供。

批量归一化 (Batch Normalization, BN) 是我们的编码器 fq fk 中的标准组件,就像标准的 ResNet [33] 一样。在实验中,我们发现使用 BN 会阻止模型学到良好的表示,类似于 [35] 中的报告(该研究避免使用 BN )。模型似乎在代理任务上 " 作弊 " 并轻松找到了一个低损失的解决方案。 这可能是因为样本之间的批内通信(由 BN 引起)泄漏了信息

使用所有 batch 的均值的平均值和所有 batch 方差的无偏估计。

我们通过打乱 BN 来解决这个问题。我们使用多个 GPU 进行训练,对于每个 GPU ,我们独立地对样本执行 BN (这是常见的做法)。对于键编码器 fk ,我们在将其分发到 GPU 之前对当前小批次中的样本顺序进行了打乱(并在编码后恢复原样);查询编码器 fq 的小批次样本顺序不发生改变。这确保了用于计算查询和其正向键的批次统计来自于两个不同的子集。这有效地解决了 " 作弊 " 问题,并允许训练从 BN 中受益。

在我们的方法和端到端消融对照组中都使用了随机顺序的批量归一化( Figure 2a )。与此问题无关的是内存库对照组( Figure 2b ),因为其中的正键来自过去不同的小批量。

4. Experiments

我们研究了在以下数据集上进行的无监督训练:

1. ImageNet-1M IN-1M :这是 ImageNet [11] 训练集,包含约 128 万张图像,分为 1000 个类别(通常被称为 ImageNet-1K ;我们根据图像数量来计算,因为无监督学习不利用类别信息)。这个数据集在类别分布上很平衡,其图像通常包含对象的标志性视图。

2. Instagram-1B IG-1B :按照 [44] 的方法,这是来自 Instagram 的大约 10 亿( 940M )张公共图像。这些图像来自大约 1500 个与 ImageNet 类别相关的 hashtag [44] 。与 IN-1M 相比,这个数据集相对不太精选,并且具有长尾、不平衡的现实世界数据分布。这个数据集包含标志性对象和场景级别的图像。

训练。 我们使用 SGD 作为优化器。 SGD 的权重衰减为 0.0001 ,动量为 0.9 。对于 IN-1M ,在 8 GPU 上,我们使用 256 的小批量大小( Algorithm 1 中的 N ),初始学习率为 0.03 。我们训练了 200 epoch ,学习率在第 120 160 epoch 时乘以 0.1 [61] ,用时约 53 小时 训练 ResNet-50 对于 IG-1B ,在 64 GPU 上,我们使用 1024 的小批量大小,学习率为 0.12 ,每 62.5k 迭代( 6400 万图像)指数衰减 0.9× 。我们进行了 125 万次迭代( IG-1B 的约 1.4 个时代),用时约 6 天训练 ResNet-50

4.1. Linear Classification Protocol

首先,我们通过在冻结特征 (linear probing) 上进行线性分类来验证我们的方法,按照常见的协议进行。在本小节中,我们在 IN-1M 上进行无监督预训练。然后,我们冻结特征并训练一个监督线性分类器(一个全连接层后跟 softmax 层)。我们在 ResNet 的全局平均池化特征上训练这个分类器,进行 100 个周期的训练。我们报告了 ImageNet 验证集上的 1-crop top-1 分类准确率。

有监督训练的学习率小于 1 ,但是无监督学习的学习率为 30 ,表明:有监督训练的特征分布和无监督训练的特征分布是存在很大的差距的。

对于这个分类器,我们进行了网格搜索,找到了最佳的初始学习率为 30 权重衰减为 0 (类似于 [56] 中报告的)。这些超参数在本小节中提供的所有消融实验中表现一致良好。这些超参数值意味着特征分布(例如幅度)可以与 ImageNet 监督训练的特征分布有相当大的差异,这个问题我们将在第 4.2 节中重新讨论。

消融实验: 对比损失机制。我们比较了图 2 中所示的三种机制。为了专注于对比损失机制的影响,我们在本小节中采用了与 instance discrimination 相同的代理任务来实现它们。我们还使用了与对比损失函数 Eqn.(1) 相同的 InfoNCE 形式。因此,这个比较仅涉及这三种机制。

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

3. ImageNet 线性分类协议下比较三种对比损失机制。我们采用相同的代理任务(第 3.3 节)只是改变对比损失机制(图 2 )。在 memory bank MoCo 中,负样本的数量为 K ,而在端到端中为 K-1 (减去一个是因为正样本键在同一小批次中)。网络采用 ResNet-50

端到端 的机制在 K 较小时 表现与 MoCo 相似。然而,由于 end to end 的要求,字典的大小受到 min_batch 大小的限制。在这里,高端机器( 8 Volta 32GB GPU )可以负担得起的最大的 min_batch 1024 。更本质的是,大规模 min_batch 训练是一个尚未解决的问题 [25] :我们发现在这里必须使用线性学习率缩放规则 [25] ,否则准确性会下降(对于 batch_size 1024 ,下降约 2% )。但使用更大的 min_batch 进行优化更加困难 [25] ,而且即使内存充足,趋势是否可以推广到更大的 K 仍然是有问题的。

Memory bank[61] 机制可以支持更大的字典大小。但它比 MoCo 2.6% 。这与我们的假设一致: Memory bank 中的键来自过去一个 epoch 中非常不同的编码器,它们不一致。 需要注意的是, 58.0% Memory bank 结果反映了我们对 [61] 的改进实现。

消融实验:动量。 下表显示了在预训练中使用不同 MoCo 动量值(方程 (2) 中的 m )的 ResNet-50 准确性(这里 K = 4096 ):

m 0.99 0.9999 之间时,它表现相当不错,显示出慢速前进(即相对较大的动量)的关键编码器是有益的。当 m 太小(例如 0.9 )时,准确性显著下降;在没有动量的极端情况下( m 0 ),训练损失会波动并且无法收敛。这些结果支持了我们建立一致字典的动机。 与以前的结果进行比较。以前的无监督学习方法在模型大小上可能有很大差异。

M = 0.999 ,表现相当不错

M =0.9 ,准确定显著下降

M =0 ,训练损失会波动并且无法收敛

为了进行公平和全面的比较 ,我们报告了准确性与参数数量之间的权衡。除了 ResNet-50 R50 [33] ,我们还报告了其宽度是 的变种,参考 [38] 。我们设置 K = 65536 m = 0.999 。表 1 是比较结果。具有 R50 MoCo 表现竞争力十足,实现了 60.6% 的准确性,优于所有相似模型大小( 24M )的竞争对手。 MoCo 受益于更大的模型,在 R50w4× 上实现了 68.6% 的准确性。值得注意的是,我们使用标准的 ResNet-50 实现了竞争对手的结果,无需特定的架构设计,例如,这些方法可能包括对输入进行切块 [46, 35] 、精心定制的感受野 [2] 或者将两个网络组合 [56] 。通过使用一个不针对预训练任务定制的架构,可以更容易将特征转移到各种视觉任务并进行比较,这将在下一小节中研究。

1. ImageNet 上的线性分类协议下进行的比较。图表化了表格。所有结果都是基于在 ImageNet-1M 训练集上进行的无监督预训练,然后进行冻结特征的监督线性分类训练,并在验证集上进行评估。参数计数是特征提取器的参数数量。如果有可用的改进的重新实现,我们会进行比较(在数字之后引用)。

本文的重点是对一种通用对比学习机制的研究;我们没有探讨可能进一步提高准确性的其他因素(如特定的代理任务)。例如," MoCo v2" [8] 是本文初稿的扩展版本,通过对数据增强和输出投影头部进行微小修改,实现了 R50 的准确性提升,从 60.6% 提高到 71.1% 。我们相信这个额外的结果展示了 MoCo 框架的通用性和稳健性。

4.2. Transferring Features

MoCo ImageNet 上做监督预训练,然后再在 PASCAL VOC [18] COCO [42] 等各种任务上进行微调。

无监督学习的一个主要目标是学习可转移的特征。在下游任务的微调中, ImageNet 监督预训练最有影响力(例如, [21, 20, 43, 52] )。接下来,我们将比较 MoCo ImageNet 监督预训练,以及它们在包括 PASCAL VOC [18] COCO [42] 等各种任务中的转移性能。作为前提条件,我们将讨论涉及的两个重要问题: Normalization Schedules

Normalization( 归一化 ) 。如第 4.1 节所述,与 ImageNet 监督预训练相比,无监督预训练产生的特征可能具有不同的分布。但是,下游任务的系统通常会选择针对监督预训练的超参数(例如,学习率)。为了缓解这个问题,我们在微调过程中采用特征归一化:我们使用在微调期间经过训练的 BN (并在 GPU 之间同步 [49] ),而不是通过仿射层 [33] 来冻结它。我们还在新初始化的层中使用 BN (例如, FPN [41] ),这有助于校准幅度。

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

Schedules. 如果微调时间表足够长,从随机初始化开始训练检测器可以成为强大的基线,并可以在 COCO 上与 ImageNet 监督模型相匹配 [31] 。我们的目标是调查特征的可转移性,因此我们的实验采用了受控时间表,例如 COCO (约 12 个周期)或 时间表 [22] ,与 [31] 中的 时间表相反。在像 VOC 这样的小型数据集上,训练时间更长可能无法追赶 [31] 。尽管如此,在我们的微调中, MoCo 使用与 ImageNet 监督模型相同的时间表,随机初始化的结果提供为参考。

总之,我们的微调使用与监督预训练模型相同的设置。这可能会使 MoCo 处于不利地位。尽管如此, MoCo 依然具有竞争力。这样做也使得我们能够在多个数据集 / 任务上进行比较,而无需进行额外的超参数搜索。

4.2.1 PASCAL VOC Object Detection

设置。 检测器是 Faster R-CNN [52] ,使用 R50-dilated-C5 R50-C4 [32] 的骨干网络(详细信息请参见附录), BN 调整,由 [60] 实现。我们对所有层进行端对端微调。在训练期间,图像尺度为 [480, 800] 像素,推断时为 800 像素。相同的设置用于所有实验,包括监督预训练基线。我们评估了 VOC 默认的 AP50 度量(即 IoU 阈值为 50% ),以及更严格的 COCO 风格 AP AP75 度量。评估是在 VOC test2007 数据集上进行的。

消融实验:骨干网络。 2 显示了在 trainval07+12 数据集(约 16.5k 张图片)上微调的结果。对于 R50-dilatedC5 (表 2a ),在 IN-1M 上预训练的 MoCo 与监督预训练的对照组相媲美,而在 IG-1B 上预训练的 MoCo 则超越了它 。对于 R50-C4 (表 2b ),使用 IN-1M IG-1B 预训练的 MoCo 优于监督对照组: AP50 提高了 0.9 AP 提高了 3.7 AP75 提高了 4.9

2 。在 PASCAL VOC trainval07+12 上微调的目标检测结果。评估是在 test2007 上进行的,包括 AP50 (默认的 VOC 指标)、 AP COCO 风格)和 AP75 ,平均值是在 5 次试验中计算的。所有模型都微调了 24,000 次迭代(约 23 个周期)。括号中是与 ImageNet 监督预训练对照组的差距。在绿色中至少 +0.5 分的差距。

迁移的准确性取决于检测器所使用的网络

有趣的是,迁移的准确性取决于检测器的结构。 对于 C4 骨干网络,默认用于现有基于 ResNet 的结果 [14, 61, 26, 66] ,无监督预训练的优势更大。过去,预训练与检测器结构之间的关系一直是模糊的,应该是需要考虑的因素之一。

对比损失机制的消融实验。 我们指出,这些结果部分是因为我们为对比学习建立了坚实的检测基线。为了明确使用 MoCo 机制在对比学习中所带来的收益,我们使用我们自己实施的端到端或 memory bank 机制(即图 3 中最好的机制)来微调经过预训练的模型,使用与 MoCo 相同的微调设置。

图三。 ImageNet 线性分类协议下三种对比损失机制的比较。我们采用相同的代理任务(第。 3.3 )并且仅改变对比损失机制(图 2 )。内存库和 MoCo 中的负片数为 K ,端到端为 K−1 (偏移量为 1 ,因为正片密钥在同一小批处理中)。网络是 ResNet-50

这些竞争对手表现还不错(表 3 )。它们在 C4 骨干的 AP AP75 也高于 ImageNet 监督对照组,参见表 2b ,但其他指标较低。它们在所有指标上都不如 MoCo 。这显示了 MoCo 的好处。此外,如何在更大规模的数据上训练这些竞争对手是一个尚未解答的问题,它们可能无法从 IG-1B 中受益。

由于 end to end 的结构设计带来了硬件的限制以及 memory bank 的固定字典大小的限制都成为这两个模型在大的数据上扩展的阻碍。

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

与以前的结果相比。 在竞争对手之后,我们使用 C4 骨干在 trainval2007 (约 5,000 张图像)上进行微调。比较见表 4

4 。与 PASCAL VOC trainval2007 上微调的先前对象检测方法的比较。评估正在测试 2007 ImageNet 监督的对应物来自各自的论文,并且被报告为与各自的无监督预训练对应物具有相同的结构。所有条目都基于 C4 主干。 [14] 中的模型是 R101 v2[34] ,其他的是 R50 RelPos (相对位置) [13] 结果是多任务论文 [14] 中最好的单任务案例。 Jigsaw[45] 的结果来自 [26] 中基于 ResNet 的实现。我们的结果是 9k 次迭代微调,平均超过 5 次试验。括号中是与 ImageNet 监督的预培训对应部分的差距。绿色表示至少 +0.5 分的差距。

对于 AP50 指标,以前的方法都无法赶上与自己相对应的监督预训练对照组。 MoCo 在任何 IN-1M IN-14M (完整的 ImageNet )、 YFCC-100M [55] IG-1B 上预训练的模型都可以胜过监督基线。在更严格的指标中看到了较大的增益: AP 高达 +5.2 AP75 高达 +9.0 。这些增益比 trainval07+12 (表 2b )中的增益更大。

4.2.2 COCO Object Detection and Segmentation

(Setup) 配置。 模型是使用 FPN [41] C4 骨干实现的 Mask R-CNN [32] ,采用调整的 BN ,由 [60] 实施。在训练期间,图像尺度为 [640, 800] 像素,推断时为 800 。我们对所有层进行端到端的微调。我们在 train2017 数据集上进行微调(约 118,000 张图像),并在 val2017 上进行评估。日程安排采用 [22] 中的默认

(Results) 结果。 5 显示了在 COCO 数据集上使用 FPN (表 5a b )和 C4 (表 5c d )骨干的结果。在 日程表中,所有模型(包括 ImageNet 监督对照组)都受到了严重的训练不足,这表明与 日程表情况相比,存在着约 2 个百分点的差距。在 日程表中, MoCo 在两种骨干上的所有指标都优于其 ImageNet 监督对照组。

5 。在 COCO 上微调的对象检测和实例分割:在 val2017 上评估的边界框 AP APbb )和掩码 AP APmk )。括号中是与 ImageNet 监督的预培训对应部分的差距。绿色表示至少 +0.5 分的差距。

4.2.3 More Downstream Tasks

6 显示了更多的下游任务(实现细节请参阅附录)。总体而言, MoCo ImageNet 监督预训练方面表现出色:

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

COCO 密集姿势估计 [1] :在这个高度依赖定位的任务中, MoCo 大大优于监督预训练,例如 APdp 75 提高了 3.7 个百分点。

Table 6. MoCo 与在各种任务上进行微调的 ImageNet 监督预训练的比较。对于每个任务,所有条目使用相同的架构和计划(详见附录)。括号中是与 ImageNet 监督预训练对应的差距。绿色表示至少为 +0.5 分的差距。 :此条目是使用 BN 冻结的结果,这有助于提高性能;请参阅正文。

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

Cityscapes 实例分割 [10] :使用 IG-1B MoCo APmk 方面与其监督预训练对应物相媲美,并且在 APmk 50 方面更高。

语义分割:在 Cityscapes [10] 上, MoCo 的性能超过其监督预训练对应物高达 0.9 个百分点。但是在 VOC 语义分割任务中, MoCo 的性能至少差 0.8 个百分点,这是我们观察到的一个负面案例。

总结。总体而言,在 7 个检测或分割任务中, MoCo 可以胜过其 ImageNet 监督预训练对应物。此外, MoCo Cityscapes 实例分割任务上表现不俗,在 VOC 语义分割任务上落后;在附录中,我们展示了 iNaturalist [57] 上的另一个可比较的案例。总的来说, MoCo 在多个视觉任务中已经大大缩小了无监督和监督表示学习之间的差距。

值得注意的是,在所有这些任务中,使用 IG-1B 预训练的 MoCo 始终优于使用 IN-1M 预训练的 MoCo 。这表明 MoCo 在这个大规模、相对未经筛选的数据集上表现出色。这代表了朝着真实世界无监督学习的一种情景。

5. Discussion and Conclusion

我们的方法在各种计算机视觉任务和数据集上都取得了积极的无监督学习结果。还有一些值得讨论的问题。 MoCo IN-1M IG-1B 的改进一直都很显著,但相对较小,这表明更大规模的数据可能没有被充分利用。我们希望一个先进的前提任务可以改进这一点。除了简单的实例识别任务 [61] MoCo 还可以用于像语言 [12] 和视觉 [46] 中的遮挡自动编码等前提任务。我们希望 MoCo 对涉及对比学习的其他前提任务也能有所帮助。

A. Appendix

A.1. Implementation: Object detection backbones

R50-dilated-C5 R50-C4 的主干网络与 Detectron2 [60] 中可用的网络非常相似: (i) R50-dilatedC5 :主干网络包括带有膨胀因子 2 和步幅 1 ResNet conv5 阶段,然后是一个 3×3 的卷积(带有 BN ),将维度减小到 512 。框预测头包括两个隐藏的全连接层。 (ii) R50-C4 :主干网络以 conv4 阶段结束,框预测头由 conv5 阶段(包括全局池化)后面跟一个 BN 层组成。

A.2. Implementation: COCO keypoint detection

我们将掩码 R-CNN (关键点版本)与 R50-FPN 一起使用,在 [60] 中实现,在 COCO train2017 上进行微调,并在 val2017 上进行评估。时间表是 2 ×

A.3. Implementation: COCO dense pose estimation

我们将密集 R-CNN[1] R50-FPN 一起使用,在 [60] 中实施,在 COCO train2017 上进行微调,并在 val2017 上进行评估。时间表是 "s1 ×"

A.4. Implementation: LVIS instance segmentation

我们使用带有 R50-FPN Mask R-CNN 模型,在 LVIS [27] 数据集的 train v0.5 上进行了微调,并在 val v0.5 上进行了评估。我们遵循 [27] 中的基线方法( arXiv v3 附录 B )。 LVIS 是一个新的数据集,对其上的模型设计还有待探索。以下表格包括相关的消融实验结果(所有结果是经过 5 次试验的平均值):

一个监督预训练的基准,进行端到端调整,但批量归一化( BN )保持冻结状态,达到了 24.4 APmk 。但在这个基准中调整 BN 会导致更差的结果和过拟合,这与 COCO/VOC 数据集上调整 BN 提供更好或相当的准确性的情况不同。 MoCo IN-1M 上的 APmk 24.1 ,而在 IG-1B 上为 24.9 ,它们在相同可调整 BN 设置下都优于监督预训练的对应模型。在最佳的个别设置下, MoCo 仍然能够胜过监督预训练情况(如在第 4.2 节的表 6 中报告的, 24.9 vs. 24.4 )。

A.5. Implementation: Semantic segmentation

我们使用基于 FCN 结构的语义分割方法 [43] 。骨干网络由 R50 (可能指 ResNet-50 )的卷积层组成, conv5 块中的 3×3 卷积具有 2 的膨胀率和 1 的步幅。接着是两个额外的 256 通道的 3×3 卷积层,包括批归一化( BN )和修正线性单元( ReLU )激活函数,然后使用 1×1 卷积进行像素级分类。总步幅为 16 (根据 FCN-16s[43] 的设计)。在这两个额外的 3×3 卷积层中,膨胀率设置为 6 ,这遵循了 [6] 中大视野设计的原则。

训练过程包括随机缩放(在 [0.5, 2.0] 的比率范围内)、裁剪和水平翻转。在 VOC 数据集上,裁剪尺寸为 513 ,而在 Cityscapes 数据集上为 769 。推理时,模型处理原始图像尺寸。训练使用小批量大小为 16 和权重衰减为 0.0001 VOC 数据集上的学习率设置为 0.003 ,而 Cityscapes 数据集上为 0.01 (在训练的第 70 90 百分位点处乘以 0.1 )。在 VOC 数据集上,我们在经过 [30] 数据扩增的 train aug2012 数据集(包括 10582 张图像)上进行 30,000 次迭代的训练,然后在 val2012 数据集上进行评估。在 Cityscapes 数据集上,我们在 train fine 数据集(包括 2975 张图像)上进行 90,000 次迭代的训练,然后在 val 数据集上进行评估。结果是对 5 次试验的平均值。

A.6. iNaturalist fine-grained classification

除了主文中的检测 / 分割实验外,我们还在 iNaturalist 2018 数据集 [57] 上进行了对细粒度分类的研究。我们将预训练模型进行端到端的微调,使用训练集(约 437,000 张图像, 8142 个类别)进行微调,然后在验证集上进行评估。微调过程遵循 PyTorch ResNet 的典型实现,进行了 100 个时代的训练。微调的学习率为 0.025 (与从头开始的 0.1 相比),在训练的第 70 90 百分位点处减小 10 。以下是 R50 的结果:

MoCo 的性能比从随机初始化训练好了大约 4% ,并且与它的 ImageNet 监督训练的性能非常接近。这再次表明 MoCo 的无监督预训练是竞争力强的。

A.7. Fine-tuning in ImageNet

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

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

A.8. COCO longer fine-tuning

在表 5 中,我们报告了在 COCO 上采用 (约 12 个时期)和 的调度的结果。这些调度是从最初的 Mask R-CNN 论文 [32] 中继承的,考虑到后来该领域的进展,它们可能不是最佳选择。在表 A.1 中,我们补充了 调度(约 72 个时期)的结果 [31] ,并将其与 调度的结果进行比较。我们观察到: (i) ImageNet 监督预训练的微调仍然有所改进( 41.9 APbb ); (ii) 从头开始训练大部分赶上( 41.4 APbb ); (iii) MoCo 对应部分进一步改进(例如,提高到 42.8 APbb ),并且具有更大的差距(例如,与 相比, +0.9 APbb ,与 相比, +0.5 APbb )。表 A.1 和表 5 表明,当微调时间更长时, MoCo 预训练的特征可以比 ImageNet 监督特征具有更大的优势。

5 。在 COCO 上微调的对象检测和实例分割:在 val2017 上评估的边界框 AP APbb )和掩码 AP APmk )。括号中是与 ImageNet 监督的预培训对应部分的差距。绿色表示至少 +0.5 分的差距。

A.1 。在 COCO 上微调的对象检测和实例分割: 2 倍对 6 倍时间表。括号中是与 ImageNet 监督的预培训对应部分的差距。绿色表示至少 +0.5 分的差距。

A.9. Ablation on Shuffling BN

A.1 提供了使用或不使用 Shuffling BN MoCo 的训练曲线: 去除 Shuffling BN 会明显过拟合于预训练任务 :预训练任务的训练准确率(虚线曲线)迅速增加到 >99.9% kNN-based 验证分类准确率(实线曲线)很快下降。这在 MoCo 和端到端变体中都观察到;内存银行变体隐含地对 q k 使用不同的统计数据,因此避免了这个问题。这些实验表明,没有 Shuffling BN ,子批次统计数据可以作为一个 " 签名 " 来告诉正样本键位于哪个子批次。 Shuffling BN 可以消除这个签名并避免这种欺骗。

A.1. Shuffling BN 消融实验。虚线:预训练任务的训练曲线,以 (K+1)-way 字典查找的准确率绘制。实线: ImageNet 分类准确率的 kNN 监视器 [61] 的验证曲线(不是线性分类器)。该图显示了训练的前 80 epoch :没有 Shuffling BN 进行更长时间的训练会导致更多的过拟合。

相关推荐
y_dd36 分钟前
【machine learning-12-多元线性回归】
算法·机器学习·线性回归
小魏冬琅1 小时前
K-means 算法的介绍与应用
算法·机器学习·kmeans
aWty_1 小时前
机器学习--K-Means
人工智能·机器学习·kmeans
wx7408513262 小时前
小琳AI课堂:机器学习
人工智能·机器学习
鸽芷咕2 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
qq_15321452643 小时前
【2023工业异常检测文献】SimpleNet
图像处理·人工智能·深度学习·神经网络·机器学习·计算机视觉·视觉检测
徳一4 小时前
【线性回归模型】
决策树·机器学习·线性回归
潮汐退涨月冷风霜6 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
LQS20206 小时前
机器学习与深度学习之间的区别
机器学习
B站计算机毕业设计超人6 小时前
计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
爬虫·python·深度学习·算法·机器学习·自然语言处理·数据可视化