摘要
我们提出了一种简单而有效的自监督目标检测方法。无监督的预训练方法最近被设计用于目标检测,但是它们通常在图像分类方面有缺陷,或者相反。与它们不同,DetCo在下游实例级密集预测任务上传输良好,同时保持有竞争力的图像级分类精度。优点来自于(1)对中间表示的多级监督,(2)全局图像和局部块之间的对比学习。这两种设计有助于在特征金字塔的每一层进行有区别且一致的全局和局部表示,同时改进检测和分类。 在VOC、COCO、Cityscapes和ImageNet上的大量实验表明,DetCo不仅在一系列2D和3D实例级检测任务上优于最近的方法,而且在图像分类上也具有竞争力。比如在ImageNet分类上,DetCo比InsLoc和DenseCL这两个当代专为物体检测而设计的作品,top-1准确率分别好了6.9%和5.0%。而且,在COCO检测上,DetCo比带SwAV和Mask R-CNN C4好6.9 AP。值得注意的是,DetCo在很大程度上提升了稀疏R-CNN,一个最近很强的检测器,从45.0 AP提升到46.5 AP ( 1.5 AP),在COCO上建立了一个新的SOTA。
1、介绍
视觉表示的自监督学习是计算机视觉中的一个重要问题,它有助于许多下游任务,如图像分类、目标检测和语义分割。 它旨在为下游任务提供基于大规模未标记数据的预训练模型。 以往的方法侧重于设计不同的pretext任务。 其中最有前途的方向之一是对比学习,它将一幅图像转换为多个视图,使同一图像的视图之间的距离最小化,并使feature map中不同图像的视图之间的距离最大化。
在过去的两年里,一些基于对比学习和在线聚类的方法,如MoCo v1/v2, BYOL, swv,取得了很大的进展,弥补了图像分类中无监督方法和完全监督方法之间的性能差距。 然而,它们在目标检测中的传输能力并不令人满意。 在我们工作的同时,最近DenseCL, InsLoc和PatchReID也采用了对比学习来设计检测友好的借口任务。 然而,这些方法在目标检测上效果较好,但牺牲了图像分类性能,如图1和表1所示。 因此,设计一种能够协调实例级检测和图像分类的借口任务具有挑战性
我们假设在图像级分类和实例级检测之间没有不可逾越的鸿沟。 直观地说,图像分类从单一的高级特征图中识别出全局实例,而目标检测从多层次特征金字塔中识别出局部实例。 从这个角度来看,我们希望构建的实例表示(1)在特征金字塔的每一层都具有区别性(2)对于全局图像和局部patch(也就是滑动窗口)都是一致的。 然而,现有的无监督方法忽略了这两个方面。 因此,检测和分类不能相互改进。
在这项工作中,我们提出了一个对比学习框架DetCo,它有利于实例级检测任务,同时保持有竞争力的图像分类转移精度。 DetCo包含(1)对骨干网不同阶段特征的多级监督。 (2)全局图像与局部patch的对比学习。 具体来说,多层次监管直接从骨干网络的各个阶段优化特征,保证了对各层次金字塔特征的强烈区分。 这种监督使密集目标探测器通过多尺度预测获得更好的性能。 全局和局部对比学习引导网络在图像级和斑块级上学习一致的表示,既能保持每个局部patch的高度鉴别性,又能促进整个图像的表示,有利于目标检测和图像分类。
DetCo在各种2D和3D实例级检测任务上实现了最先进的传输性能,例如VOC和COCO目标检测,语义分割和密集。 此外,DetCo在ImageNet分类和VOC SVM分类上的性能仍然很有竞争力。 例如,如图1和表1所示,DetCo在分类和密集预测任务上改进了MoCo v2。 DetCo在ImageNet分类上显著优于DenseCL、InsLoc和PatchReID,分别提高6.9%、5.0%和4.8%,在目标检测和语义分割上略好。 请注意,DenseCL, InsLoc和PatchReID是三个并行的作品,它们是为目标检测而设计的,但牺牲了分类。 此外,DetCo增强了Sparse R-CNN,这是一个最近的没有q的端到端对象检测器,在具有ResNet-50骨干的COCO数据集上,从非常高的基线45.0 AP到46.5 AP ( 1.5 AP),建立了一个新的最先进的检测结果。 在3D任务中,DetCo在COCO DensePose的所有指标上都优于ImageNet监督的方法和MoCo v2,特别是在AP50上 1.4。
总的来说,这项工作的主要贡献有三个方面:
- 我们引入了一个简单而有效的自我监督借口任务DetCo,它有利于实例级检测任务。 DetCo可以利用大量未标记数据,并为各种下游任务提供强大的预训练模型。
- 得益于全局图像和局部图像块之间多层次监督和对比学习的设计,与当代自监督同行相比,DetCo在不牺牲图像分类的情况下,成功地提高了目标检测的传输能力。
- 在PASCAL VOC、COCO和Cityscapes上的大量实验表明,当转移到一系列2D和3D实例级检测任务时,DetCo优于先前的最先进的方法,如目标检测、实例分割、人体姿态估计、DensePose和语义分割。
2、相关工作
现有的无监督表示学习方法大致可分为生成式和判别式两类。 生成方法通常依赖于图像的自编码或对抗性学习,直接在像素空间操作。 因此,它们中的大多数在计算上都很昂贵,而图像生成所需的像素级细节对于学习高级表示可能不是必需的。
在鉴别方法中,自我监督对比学习目前取得了最先进的成绩,引起了研究者的广泛关注。 与生成方法不同,对比学习通过将同一图像的不同视图(即正负对)的表示拉近,并将不同图像(即负对)的视图的表示分开,避免了耗时的生成步骤。 Chen等人开发了一个简单的框架,称为SimCLR,用于视觉表征的对比学习。 经过数据增强后,它通过对比图像来学习特征。 之后,He等人和Chen等人提出了MoCo和MoCo v2,使用移动平均网络(动量编码器)来保持从存储库提取的负电荷对的一致表示。 最近,swv将在线聚类引入对比学习,不需要计算两两比较。 BYOL通过迭代地引导网络的输出作为增强表示的目标来避免使用负对。
此外,早期的方法依赖于各种借口任务来学习视觉表征。 相对patch预测、灰度图像着色、图像inpainting、图像jigsaw puzzle、图像超分辨率和几何变换已被证明对表示学习有用。 然而,上述大多数方法都是专门为图像分类而设计的,而忽略了目标检测。 在我们工作的同时,最近DenseCL, InsLoc和PatchReID为目标检测设计借口任务。 然而,它们在图像分类中的传输性能较差。 我们的工作重点是设计一个更好的借口任务,既有利于实例级检测,又保持较强的图像分类表示。
3、方法
在本节中,我们首先简要介绍图2所示的建议的DetCo的整体架构。然后,我们提出了多级监督的设计,使特征在多个阶段保持区别性。接下来,我们引入全局和局部对比学习来增强全局和局部表示。最后,我们提供了DetCo的实现细节。
3.1、DetCo框架
DetCo是一个简单的流程,主要基于强基线MoCo v2设计。它由一个主干网、一系列MLP头和记忆库组成。为简单起见,MLP磁头和存储体的设置与MoCo v2相同。DetCo的整体架构如图2所示。 具体来说,德特科有两个简单有效的设计,不同于MoCo v2。(1)多层次监管,保持多阶段特征的区分性。(2)全局和局部对比学习,以增强全局和局部特征表示。以上两种不同的设计使得DetCo不仅成功地继承了MoCo v2在图像分类上的优势,而且在实例级检测任务上传递了更强的能力。 DetCo的完全损失函数可以定义如下:
其中,text { I } 表示全局图像,P表示局部patch集。 Eqn. 1是一个多阶段对比损失。 在每个阶段,都有三种跨区域和全球的对比损失。 我们将在第3.2节描述多层次监督sum_{i=1}^{4} w_{i} cdot mathcal{L}^{i} ,在第3.3节描述全局和局部对比学习mathcal{L}_{g leftrightarrow g}^{i} mathcal{L}_{l leftrightarrow l}^{i} mathcal{L}_{g leftrightarrow l}^{i} 。
3.2、多层监督
现代物体检测器在不同的水平上预测物体,如RetinaNet和Faster R-CNN FPN。 他们需要每个层次的特征来保持强烈的歧视。 为了满足上述要求,我们对原始MoCo基线做了简单而有效的修改。 具体来说,我们将一张图像输入标准的骨干ResNet-50,它会输出不同阶段的特征,称为Res2、Res3、Res4、Res5。 与只使用Res5的MoCo不同,我们利用所有级别的特征来计算对比损失,确保主干的每个阶段产生鉴别表示。
给定图像mathbf{I} in mathbb{R}^{H times W times 3} ,首先将其转换为图像mathbf{I}_{q} 和mathbf{I}_{k} 的两个视图,并从一组全局视图的变换中随机抽取两个变换,称为mathcal{T}_{g} 。 我们的目标是训练一个编码器和一个具有相同架构的编码器,其中编码器使用动量更新策略[19]更新权值。 编码器包含一个主干和四个全局MLP头,用于从四个层次提取特征。 将mathbf{I}_{q} 赋给主干b_{q}^{theta}(cdot) ,以θ为参数提取特征left{f_{2}, f_{3}, f_{4}, f_{5}right}=b_{q}^{theta}left(mathbf{I}_{q}right) ,其中f_{i} 为第i阶段的特征。 在获得多层次特征后,我们增加了四个全局MLP头left{m l p_{q}^{2}(cdot), m l p_{q}^{3}(cdot), m l p_{q}^{4}(cdot), m l p_{q}^{5}(cdot)right} ,其权重是非共享的。 结果,我们得到了四种全局表示left{q_{2}^{g}, q_{3}^{g}, q_{4}^{g}, q_{5}^{g}right}=operatorname{encoder}_{mathrm{q}}left(mathbf{I}_{mathrm{q}}right) 。 同样,我们可以很容易地得到left{k_{2}^{g}, k_{3}^{g}, k_{4}^{g}, k_{5}^{g}right}=operatorname{encoder}_{mathrm{k}}left(mathbf{I}_{mathrm{k}}right)。
MoCo使用InfoNCE计算对比损失,公式为:
mathcal{L}_{g leftrightarrow g}left(mathbf{I}_{q}, mathbf{I}_{k}right)=-log frac{exp left(q^{g} cdot k_{ }^{g} / tauright)}{sum_{i=0}^{K} exp left(q^{g} cdot k_{i}^{g} / tauright)}
tau是一个温度超参数。 我们将其扩展到多阶段特征的多层次对比损失,公式为:
text { Loss }=sum_{i=1}^{4} w_{i} cdot mathcal{L}_{g leftrightarrow g}^{i}
其中w为减重,I为当前阶段。 受PSPNet中减重设置的启发,我们将浅层的减重设置为小于深层。 此外,我们为每一层建立了一个单独的存储bank text { queue }_{i} 。 在附录中,我们提供了中间对比度损失的伪代码。
3.3、全局和局部对照学习
现代的物体检测器在局部区域(也就是滑动窗口)上重新使用分类器来执行检测。 因此,它要求每个局部区域对实例进行区分。 为了满足上述要求,我们开发了全局和局部对比学习来保持patch集和整幅图像上的实例表示一致。 该策略利用图像级表示来增强实例级表示,反之亦然。 首先,我们使用jigsaw增强将输入图像变换成9个local patches,具体的增强details如3.4节所示。 这些补丁通过编码器,然后我们可以得到9个局部特征表示。 然后,我们将这些特征结合到一个特征表示的MLP头,并建立一个跨全局和局部对比学习。
首先从一个局部变换集中选择两个变换mathcal{T}_{1} ,将其转换为两个局部patch集mathbf{P}_{q} 和mathbf{P}_{k} 。 每个局部patch集中有9个patch left{p_{1}, p_{2}, ldots, p_{9}right} 。 我们将本地补丁集提供给主干,在每个阶段得到9个特征left{p_{1}, p_{2}, ldots, p_{9}right} 。 以一个阶段为例,我们为本地补丁构建一个MLP头,表示为m l p_{text {local }}(cdot) ,它不与3.2节中的m l p_{text {local }}(cdot) 共享权重。然后,将F_{n} 连接并馈给局部patch MLP头以得到最终的表示q^{l} 。同样,我们可以使用相同的方法得到k^{l} 。 对比交叉损失由begin{array}{l} text { global } leftrightarrow text { local } \ end{array} 对比损失和text { local } leftrightarrow text { local }对比损失组成。 text { global } leftrightarrow text { local } 对比损失可以写成:
mathcal{L}_{g leftrightarrow l}left(mathbf{P}_{q}, mathbf{I}_{k}right)=-log frac{exp left(q^{l} cdot k_{ }^{g} / tauright)}{sum_{i=0}^{K} exp left(q^{l} cdot k_{i}^{g} / tauright)}
同样,text { local } leftrightarrow text { ncal } 对比损失可表示为:
mathcal{L}_{l leftrightarrow l}left(mathbf{P}_{q}, mathbf{P}_{k}right)=-log frac{exp left(q^{l} cdot k_{ }^{l} / tauright)}{sum_{i=0}^{K} exp left(q^{l} cdot k_{i}^{l} / tauright)}
通过学习全局图像和局部图像块的表示,改进了图像级和实例级的实例识别。 从而提高了检测和分类的性能。
3.4、实现细节
我们使用OpenSelfSup 1作为代码库。 我们使用256批大小的8特斯拉V100 gpu的每个实验。 我们遵循MoCo v2的最超参数设置。 对于数据增强,全局视图增强几乎与MoCo v2的随机裁剪和调整为224 × 224的随机水平翻转,高斯模糊和与亮度、对比度、饱和度、色相和灰度相关的颜色抖动相同。 rand-enhancement也用于全局视图。 局部补片在PIRL后进行。 首先,用至少60%的图像裁剪一个随机区域,并将其大小调整为255×255,然后是随机翻转、颜色抖动和模糊,与全局增强共享相同的参数。 然后将图像划分为3×3网格并随机打乱; 每个网格是85×85。 在每个patch上随机应用一种作物,得到64 × 64,以避免patch之间的连续性。 最后,我们得到9个随机洗牌的patch。 为了公平比较,我们在所有实验中都使用标准的resnet-50。 除非另有规定,否则我们在ImageNet上预先训练200个epoch,以便进行公平的比较。