摘要:到目前为止,大多数现有的自监督学习方法都是针对图像分类而设计和优化的。由于图像级预测和像素级预测之间的差异,这些预训练的模型对于密集预测任务可能是次优的。为了填补这一空白,我们设计了一种有效的、稠密的自监督学习方法,通过考虑局部特征之间的对应关系,直接在像素(或局部特征)水平上进行学习。本文提出了一种密集对比学习算法,该算法通过在像素级优化输入图像两视图间的成对的对比损失(ie 相似或不相似)来实现自监督学习。
与基线方法MoCo-v2相比,我们的方法引入了微不足道的计算开销(只慢了<1%),但在转移到下游密集预测任务(包括目标检测、语义分割和实例分割)时表现出了一贯的优越性能;并且大大超过了最先进的方法。具体来说,在强大的MoCo-v2基线上,我们的方法在PASCAL VOC对象检测上实现了2.0%的AP,在COCO对象检测上实现了1.1%的AP,在COCO实例分割上实现了0.9%的AP,在PASCAL VOC语义分割上实现了3.0%的mIoU,在Cityscapes语义分割上实现了1.8%的mIoU
https://git.io/AdelaiDet
https://hub.fastgit.org/aim-uofa/AdelaiDet
https://hub.fastgit.org/WXinlong/DenseCL
https://hub.fastgit.org/CoinCheung/denseCL
1. 引言
在许多计算机视觉任务中,预训练已经成为一种成熟的范例。在典型的预训练范式中,模型首先在大规模数据集上进行预训练,然后在训练数据较少的目标任务上进行微调。具体地说,有监督的ImageNet预训练已经占据主导地位多年,在那里模型被预训练以解决图像分类问题,并转移到下游任务。然而,图像分类预训练和目标密集预测任务之间存在差距,如目标检测[8,24]和语义分割[4]。前者侧重于为输入图像分配一个类别,而后者则需要对整个图像进行密集分类或回归。例如,语义分割的目的是为每个像素分配一个类别,而目标检测的目的是为所有感兴趣的对象实例预测类别和边界框。一个简单的解决方案是直接对密集预测任务进行预训练。然而,与图像级标注相比,这些任务的标注非常耗时,难以大规模采集数据来预训练通用特征表示。
无监督视觉预训练是近年来研究的热点,其目的是从大量未标记图像中学习正确的视觉表征。一些方法[16,1,2,13]显示了在下游任务中的有效性,与有监督的ImageNet预训练相比,这些方法获得了相当或更好的结果。然而,图像分类预训练和目标密集预测任务之间的差距仍然存在。首先,目前几乎所有的自监督学习方法都将学习描述为利用全局特征的图像级预测。它们都可以被认为是将每幅图像分类为自己的版本,即实例辨别[38]。此外,现有的方法通常是在图像分类基准上进行评估和优化。然而,更好的图像分类并不能保证更准确的目标检测,如[17]所示。因此,为密集预测任务定制的自监督学习仍然是个有待解决的问题。对于无监督的预训练,不再需要密集标注。一个明确的方法是直接将预训练作为密集预测任务,从而消除预训练和目标密集预测任务之间的差距。
受有监督的稠密预测任务(如语义分割)的启发,本文提出了稠密对比学习的自监督视觉预训练方法。DenseCL认为自监督学习任务是一种密集的成对对比学习,而不是全局图像分类。首先,我们引入一个密集投影头(dense projection head),它以骨干网的特征作为输入,生成密集的特征向量(dense feature vectors)。我们的方法自然地保留了空间信息并构造了一种密集的输出格式,与现有的全局投影头相比,全局投影头对主干特征进行全局合并,并为每幅图像输出一个单一的全局特征向量。其次,通过提取视图间的对应关系,定义每个局部特征向量的正样本。为了构造一个无监督的目标函数,我们进一步设计了一个稠密的对比损失,将传统的信息损失[28]扩展到稠密范式。通过上述方法,我们使用完全卷积网络(FCN)[25]密集地执行对比学习,类似于目标密集预测任务。
因此,我们的主要贡献总结如下。
• 我们提出了一种新的对比学习范式,即密集对比学习,它在像素(或局部特征)水平上进行密集的成对对比学习。
• 通过提出的密集对比学习,我们设计了一种简单有效的针对密集预测任务的自监督学习方法DenseCL,填补了自监督预训练和密集预测任务之间的空白。
• DenseCL在将预训练模型转移到下游密集预测任务(包括目标检测(+2:0%AP)、实例分割(+0:9%AP)和语义分割(+3:0%mIoU))时,显著优于最先进的MoCo-v2[2],并远远超过有监督的ImageNet预训练。
2 相关工作
自监督的预训练。 一般来说,自监督学习的成功[38,16,39,44,15,13]可以归因于两个重要方面,即对比学习和借口任务。在许多方法中,用于训练视觉表征的目标函数要么是基于重建的损失函数[6,29,11],要么是测量多个视图同时出现的对比损失[36]。对比学习是大多数最先进方法的关键[38,16,1,39],在这种方法中,正例的一对通常由同一图像(或其他视觉模式)的两个增强视图组成,而负例的一对则由不同的图像组成。
为了学习好的表征,人们探索了各种各样的借口任务。这些例子包括彩色化[43]、上下文自动编码器[6]、修复[29]、空间拼图[27]和辨别方向[10]。这些方法在计算机视觉中取得的成功非常有限。突破性的方法是SimCLR[1],它遵循一个实例辨别借口任务,类似于[38],其中每个实例的特征都与训练集中所有其他实例的特征拉远距离(are pulled away)。"不变性"(Invariances)由低级的图像变换来编码,例如裁剪、缩放和颜色抖动。对比学习和借口任务经常被结合起来形成一个表征学习框架。DenseCL渴望采用自监督的预训练模式,并且我们自然地使该框架对密集的预测任务(如语义分割和目标检测)友好。
密集预测预训练任务。 预训练在许多密集的预测任务上取得了令人惊讶的结果,包括目标检测[32,30]和语义分割[25]。这些模型通常是从为图像级识别任务而设计的ImageNet预训练模型中进行微调的。以前的一些研究已经表明,在网络体系结构的背景下,ImageNet预训练和密集预测任务之间存在差距[23,21,35,34]。YOLO9000[31]建议对目标检测器进行分类和检测数据的联合训练。He等人[17]证明,即使我们在非常大的分类数据集(例如Instagram[26],比ImageNet大3000倍)上进行预训练,目标检测的传输改进也相对较小。最近的工作[22,45]表明,与ImageNet预训练模型相比,利用目标检测数据和注释的预训练模型(例如MS-COCO[24])可以在目标检测和语义分割方面取得相当的性能。在DenseCL之前,人们对密集预测任务的有监督预训练进行了探索,但对于密集预测任务的无监督预训练模式的设计却鲜有研究。
视觉对应。 视觉对应问题是从来自同一场景的两幅图像中计算像素对[40],这对于许多应用至关重要,包括光流[7]、从运动到结构[33]、SLAM[19],三维重建[9]等。视觉对应可以表示为匹配的图像块或点之间的特征相似性学习问题。最近,人们提出了各种基于卷积神经网络的方法来度量图像中的块之间的相似性,包括有监督的方法[3,20]和无监督的方法[42,14]。以前的工作通常利用显式监督来学习特定应用上的对应关系。DenseCL学习可在多个密集预测任务上都能用的通用表示。
3. 方法
3.1. 背景
对于自监督表征学习,突破性的方法是MoCo-v1/v2[16,2]和SimCLR[1],它们都采用对比无监督学习从未标记数据中学习良好的表征。我们通过抽象出一个共同的范式,简要介绍了最先进的自监督学习框架。
Pipeline 给定一个未标记的数据集,然后执行实例判别[38]借口任务,将训练集中每个图像的特征从其他图像的特征中分离出来。对于每幅图像,通过随机数据扩充生成随机的“视图”。每个视图都被输入到编码器中,用于提取特征,该特征能够编码和表示整个视图。编码器有两个核心部件,即主干网和投影头。投影头连接到主干网。主干是预训后要转移的模型,而投影头在预训结束后会被扔掉。对于一对视图,它们可以由同一个编码器编码[1],也可以由一个编码器及其动量更新的编码器[16]。编码器通过优化成对对比损失(相似性或不相似性)来训练,如下所述。整个pipeline如图2a所示。
损失函数。 遵循MoCo的原则[16],对比学习可以看作是一项查字典的任务。对于每个编码查询,有一组编码键,其中一个正键与查询匹配。编码过的查询(query)和键(keys)是从不同的视图生成的。对于编码的查询,它的正键编码的是同一图像的不同视图,而负键编码的是不同图像的视图。对比损失InfoNCE[28]被用来将拉近,同时将推离其他负键:
其中表示温度超参数,和[38]一样。
3.2. DenseCL管道
我们提出了一种新的自监督学习框架,称为DenseCL。DenseCL将现有的框架扩展并概括为一个密集的范例。与3.1中重新讨论的现有范例相比,核心区别在于编码器和损失函数。给定一个输入视图,由主干网络(例如ResNet[18]或任何其他卷积神经网络)提取密集的特征映射,并输入给投影头。投影头由两个并行的子头组成,分别是全局投影头和密集投影头。全局投影头可以被实例化为任何现有的投影头,例如[16,1,2]中的投影头,它将密集特征映射作为输入,并为每个视图生成全局特征向量。例如,文献[2]中的投影头由一个全局池层和一个MLP组成,MLP包含两个全连接的层,它们之间有一个ReLU层。相反,密集投影头采用相同的输入,但输出密集的特征向量。
具体地说,全局池层被移除,MLP被相等的1×1卷积层替换[25FCN](identical 1×1 convolution layers)。实际上,密集投影头与全局投影头具有相同数量的参数。通过在全局特征和局部特征两个层次上优化联合成对对比(dis)相似性损失,对主干和两个平行投影头进行端到端训练。
3.3. 密集对比学习
我们通过将原始的对比损失函数扩展到一个稠密的范式来进行稠密的对比学习。我们为每个编码过的查询定义一组编码过的键。然而,这里每个查询不再代表整个视图,而是对视图的局部部分进行编码。具体地说,它对应于由密集投影头生成的特征向量之一,其中和表示生成的密集特征图的空间大小。请注意,和可以不同,但我们使用以进行更简单的说明。每个负键是来自不同图像的视图的池化过的特征向量(the pooled feature vector of a view from a different image)。正键是根据视图间的对应关系来分配的,其是来自同一图像的另一个视图的个特征向量中的一个。现在,让我们假设我们可以很容易地找到正键。讨论推迟到下一节。密集对比损失定义为:
其中表示个编码过的查询中第个。
总的来说,我们的DenseCL的总损失可以表述为:
其中充当平衡这两个项的权重。设置为0.5,这在第4.3节中的实验进行验证。
3.4. 视图间的密集对应
我们提取了同一幅输入图像的两个视图之间的密集对应关系。对于每个视图,主干网提取特征图,密集投影头从中生成Sh×Sw×E的密集特征向量。请注意,和可以不同,但我们使用进行更简单的说明。对应关系建立在两个视图的密集特征向量之间,即和。我们使用主干特征图和来匹配和。
首先通过自适应平均池化对和进行下采样,使其具有的空间形状,然后用其计算余弦相似矩阵。匹配规则是将一个视图中的每个特征向量与另一个视图中最相似的特征向量进行匹配。具体地,对于的所有个特征向量,通过沿最后维度对相似矩阵应用argmax操作来获得与的对应。匹配过程可表述为:
其中是主干特征图的第个特征向量,是的第个特征向量。表示余弦相似度,计算为先对和做归一化,然后再点积,也就是。得到的表示从到的个匹配中的第个,其含义是的第个特征向量匹配的第个。整个匹配过程可以通过矩阵运算高效地实现,从而引入的延迟开销可以忽略不计。
对于的最简单情况,匹配退化为全局对比学习中的匹配,因为两个全局特征向量之间自然存在单一的对应关系,这是第3.1节介绍的情况。
在第3.3节介绍的密集对比学习过程中,根据提取的密集对应关系,可以很容易地找到每个查询的正键。
4 实验
我们采用MoCo-v2[2]作为我们的基线方法,因为它显示了最新的结果,并且在下游目标检测任务上比其他方法有很大的优势,如表1所示。它表明,它应该作为一个非常有力的基线,我们可以在此基础上证明我们的方法的有效性。
技术细节。 我们遵循[2]的大多数设置。采用ResNet[18]作为主干网。后接的全局投影头和密集投影头都有固定的尺寸输出。前者为每个输入输出一个128通道特征向量,后者输出密集的128通道特征向量。每个归一化过的特征向量表示一个查询或键。对于全局对比学习和密集对比学习,字典大小(dictionary size)都设置为65536。动量设为0.999。在训练过程中使用Shuffling BN[16]。式(1)和式(2)中的温度设为0.2。数据增强管道包括224×224像素随机缩放裁剪、随机颜色抖动、随机灰度转换、高斯模糊和随机水平翻转。
4.1. 实验设置
数据集。 预训练实验在两个大规模数据集上进行:MS-COCO[24]和ImageNet[5]。预训练时只使用训练集,分别为118k和128万张图像。COCO和ImageNet代表两种图像数据。前者更自然,更真实,包含户外的不同场景。在目标检测、实例分割等目标级和像素级识别任务中,它是一种应用广泛且具有挑战性的数据集。而后者是精心策划,精心构建的图像级识别。一个清晰和定量的比较是感兴趣对象的数量。例如,COCO总共有123k个图像和896k个标记对象,平均每幅图像有7.3个对象,这远远超过ImageNet DET数据集的每幅图像有1.1个对象。
预训练设置。 对于ImageNet预训练,我们严格遵循MoCo-v2[2],并使用相同的训练参数。对于COCO预训练(包括基线和我们的),我们使用0.3的初始学习率,而不是原来的0.03,因为前者在COCO预培训时在MoCo-v2基线中表现更好。我们采用SGD作为优化器,将其权重衰减设置为0.0001,动量设置为0.9。每个预训练模型在8个GPU上进行优化,采用余弦学习率衰减机制,mini-batch size为256。我们为COCO训练了800个epoch,总共368k次迭代。对于ImageNet,我们训练了200个epoch,总共100万次迭代。
评估协议。 我们通过对目标密集预测任务的端到端微调来评估预训练的模型。针对不同的目标任务,采用具有挑战性和流行性的数据集对主流算法进行微调,即VOC对象检测、COCO对象检测、COCO实例分割、VOC语义分割和Cityscapes语义分割。在评估目标检测时,我们遵循通用协议,即,在VOC trainval07+12集上用×2 schedule[37]来微调Faster R-CNN检测器(C4主干),在VOCtest2007上测试。此外,我们在COCO train2017split(118k图像)上用标准 ×1 schedule来微调Mask R-CNN检测器(FPN主干),在COCO 5k val 2017上评估目标检测和实例分割。对于语义分割,FCN模型[25]在VOC TrainAug2012集(10582个图像)上微调20k次迭代,并在VAL2012集上评估。在Cityscapes数据集上,我们用train fine set(2975幅图像)训练FCN模型进行40k次迭代,并在valset上进行测试,对语义分割进行了评估。
4.2. 主要结果
PASCAL VOC目标检测。 在表1中,我们报告了PASCAL VOC的目标检测结果,并将其与其他最先进的方法进行了比较。在接受COCO预训练时,我们的DenseCL比MoCo-v2基线性能高2%。当在ImageNet上进行预训练时,MoCo-v2基线已经超过了其他最先进的自监督学习方法。DenseCL仍能使AP进一步提高1.7%,有力地证明了我们方法的有效性。这三个指标的收益都是一致的。需要注意的是,与AP50相比,我们在更严格的AP75上实现了更大的改进,这表明DenseCL在很大程度上有助于提高定位精度。与有监督的ImageNet预训练相比,我们获得了显著的4.5%的AP增益。
COCO目标检测与分割。 COCO上的目标检测和实例分割结果如表2所示。在目标检测方面,DenseCL在COCO和ImageNet上分别比MoCo-v2提高了1.1%和0.5%的AP。在实例分割上,提升分别为0.9%AP和0.3%AP。请注意,在COCO上预训练,再在COCO上微调并不是个典型的设置。但是还是可以带来提升。
PASCAL-VOC语义分割。 我们展示了语义分割的最大改进。如表3a所示,对FCN在COCO上预训练,在VOC上微调时,有3%的mIoU的提升。在COCO上用DenseCL上预训练达到与在ImageNet上用MoCo-v2预训练相同的67.5%mIoU。注意,与200 epoch ImageNet预训练相比,800 epoch COCO预训练仅使用1/10图像和1/3迭代。在ImageNet上进行预训练时,DenseCL始终带来1.9%的mIoU提升。值得注意的是,在ImageNet上预训练时,MoCo-v2预训练与监督学习预训练相比没有迁移的优势(67.5%对67.7%的mIoU)。但DenseCL在很大程度上优于监督学习的预训练,即1.7%的mIoU。
城市景观语义分割。 城市景观是一个基准,与上述VOC和COCO有很大不同。它聚焦于城市街景。尽管如此,我们还是为DenseCL提供了同样的性能提升。即使是COCO预训练的DenseCL也能比有监督的ImageNet预训练模型提高1.9%mIoU。
4.3. 消融研究
我们进行了广泛的消融实验,以说明每个成分对DenseCL的贡献。我们通过在4.1节所述的在COCO上预训练,在VOC2017上微调目标检测器来报告消融研究。结果是5个独立试验的平均值。我们和[12,41]一样,还提供了VOC2007 SVM分类的结果,该分类使用从冻结主干提取的特征在VOC train 2007集上训练线性SVM,并在test2007集上评估。
损失函数的加权系数 公式(3)中的超参数作为平衡两个对比损失项的权重,即全局项和稠密项。我们在表4中报告了不同的结果。这表明,当我们增加时,检测性能会有所提高。对于基线方法,即=0,结果为54.7%AP。当=0:3时,AP为56.2%,这将基线提高1.5%AP。将从0.3增加到0.5将带来另一个0.5%的AP增益。虽然进一步将其提高到0.7,但在检测性能上仍有了一些小的改进(0.1%AP),但分类结果从82.9%下降到81.0%。考虑到权衡,我们在其他实验中使用=0.5作为默认设置。应注意,当=0.9时,与MoCo-v2基线相比,分类性能迅速下降(-4.8%mAP),而检测性能提高0.8%AP。根据我们的意图,DenseCL是专门为密集预测任务设计的。
匹配策略。 在表5中,我们比较了三种不同的匹配策略,用于提取视图之间的对应关系。1) “random”:两个视图中的密集特征向量被随机地匹配;2)“max-sim”:使用密集投影头生成的密集特征向量和来提取密集对应关系;3)“max sim ”:根据主特征和提取密集对应关系,如公式4所示。与MoCo-v2相比,随机匹配策略也能实现1.3%的AP改进,同时分类性能下降0.9%。这可能是因为密集的输出格式本身有帮助,另外也因为部分随机匹配有点正确。通过密集投影头的输出(即和)进行匹配,没有明显的改善。根据主干特征和,提取密集对应关系,得到了最佳结果。
网格大小。 在默认设置中,采用的ResNet 主干网络输出具有步幅32的特征。对于224×224的裁剪图像,主干特征的空间大小为7×7。我们将密集特征向量的空间大小默认设为7×7,即=7。但是,可以灵活调整,而可以通过自适应池化来池化到指定大小。表6是使用不同数量网格大小的结果。对于=1,它与MoCo-v2基线除了两点区别以外是相同的:1) 密集投影头的参数与全局投影头参数是相互独立的。2) 密集的对比学习维持着一本独立的词典。结果与MoCo-v2基线值相似。这表明,额外的参数和字典并没有带来改进。随着网格大小(这里的网格大小我觉得是说小网格的数量)的增大,性能也会提高。我们使用网格大小为7作为默认设置,因为当网格的性能增长超过7时性能将变得稳定。
训练时长Training schedule 我们在表7中展示了不同训练schedule的使用结果。随着训练时间的延长,从200个epoch到1600个epoch,性能持续提高。在COCO上用DenseCL预训练1600epoch甚至超过了在ImageNet上用MoCo-v2预训练200epoch。与200epoch的ImageNet相比,1600epoch的COCO预训练只使用了1/10的图像和7/10次迭代。在图3中,随着培训练时间的延长,我们进一步提供了与基线的直观比较。结果表明,DenseCL的性能始终优于MoCo-v2,至少比MoCo-v2高出2%的AP。
预训练速度 表8,我们比较Densel和MoCo-v2在训练速度方面的差异。当分别在COCO和ImageNet上进行预训练时,Densel每一个epoch仅慢1s和6s。开销小于1%。它有力地证明了我们方法是很快的。
4.4. 关于DenseCL的讨论
为了进一步研究Densel的工作原理,在本节中,我们将Densel中学习到的密集对应进行可视化。同时还讨论了预训练过程中的鸡与蛋问题。
密集对应的可视化。 我们从两个方面对密集的对应关系进行了可视化:比较从不同的预训练方法(MoCo-v2和DenseCL)中提取的最终对应关系,以及比较不同的训练状态(从随机初始化到良好训练的DenseCL)。给定同一幅图像的两个视图,我们使用预训练好的主干提取特征和。对于中的每个特征向量,我们在中找到对应的具有最高余弦相似度的特征向量。如果从到也是这样的匹配,这个匹配就被保留(The match is kept if the same match holds from F2 to F1)。每个匹配被分配一个平均相似度。在图4中,我们可视化了高相似度匹配(即,相似度大于等于0.9)。如图所示,DenseCL提取了比其基线更多的高相似度匹配。从同一幅图像的两个视图中提取的局部特征应该是相似的,这与我们的意图是一致的。
图5显示了对应关系是如何随着训练时间而变化的。随机初始化模型提取随机噪声匹配。随着训练时间的增加,匹配变得更加精确。
鸡和蛋的问题。 在我们的初步实验中,我们发现如果将lambda设置为1.0,即去掉全局对比学习,只使用密集对比学习,则训练损失不会收敛。这可能是因为在训练开始时,随机初始化的模型无法在视图之间生成正确的对应关系。因此,如果提取不正确的对应关系,就无法学习到好的特征,如果特征不够好,就无法获得正确的对应关系,这是一个鸡和蛋的问题。如图5所示,大多数匹配在随机初始化时是不正确的。核心解决方案是在培训开始时提供指导,以打破僵局。我们介绍三种不同的解决方案来解决这个问题。1) 使用预训练的模型的权重初始化模型;2)在开始时设置预热期,在此期间将设置为0;3)在整个训练期间都设置。三种方案都很好地解决了这个问题。第二个方案报告在表4中,在第一个10k迭代之后,从0更改为1.0。为了简单起见,我们采用最后一个作为默认设置。
5 结论
在这项工作中,我们开发了一个简单有效的自监督学习框架DenseCL,它是为密集预测任务而设计和优化的。提出了一种新的对比学习范式,在像素(或局部特征)水平上进行密集的成对的对比学习。我们的方法在很大程度上弥补了自监督预训练和密集预测任务之间的差距,并且在各种任务和数据集上都有显著的改进,包括PASCAL VOC对象检测、COCO对象检测、COCO实例分割、PASCAL VOC语义分割和Cityscapes语义分割。我们期望所提出的有效和高效的自监督预训练技术能够应用于更大规模的数据中,以充分发挥其潜力,同时也希望DenseCL预训练模型能够在计算机视觉中的许多密集预测任务中完全取代监督预训练模型。