在计算机视觉领域,预训练对下游分类和目标检测等任务效果都有很大的提升。近期,谷歌大脑团队(Google Brain)通过实验证实,自我训练对分类和目标检测等下游任务,效果有很大提升。本文是AI前线第111篇论文导读,我们将对这项研究工作进行详细解读。
预训练是计算机视觉领域的一种主流范式。由于许多视觉任务都是相关的,因此需要在一个数据集上预先训练一个模型,以帮助另一个数据集。现在普遍的做法是在ImageNet分类上预先训练目标检测和分割模型的骨干。这种做法最近受到了何恺明等人的质疑(Rethinking ImageNet Pre-training)。他们给出了一个令人惊讶的结果,即这样的ImageNet预训练并没有提高COCO数据集的准确性。
与预训练形成鲜明对比的是自我训练。假设我们想使用ImageNet来帮助COCO目标检测,在自我训练下,我们将首先丢弃ImageNet上的标签,然后在COCO上训练一个目标检测模型,并用它在ImageNet上生成伪标签。再将伪标记的ImageNet和标记的COCO数据结合起来训练一个新的模型。最近自我训练的成功提出了一个问题:自我训练在多大程度上比预先训练更有效。在预训练失败的情况下,使用ImageNet改进COCO,自我训练能否在准确的设置下有效?
我们的工作是研究自我训练(我们的方法基于噪音的学生训练),并回答上述问题。我们定义了一组控制实验,其中我们使用ImageNet作为附加数据,目的是改善COCO。我们改变COCO中标记数据的数量和作为控制因素的数据增强的强度。我们的实验表明,当我们增加数据扩充的强度或增加标记数据的数量时,预训练的价值就会降低。事实上,随着我们最强大的数据增强,预训练显著地降低了-1.0AP的准确度,这是一个令人惊讶的结果。
我们的实验表明,自我训练与数据扩充有很好的相互作用:更强的数据扩充不仅不会损害自我训练,而且有助于自我训练。在相同的数据扩充下,使用相同的ImageNet数据集,自训练可以获得正的+1.3AP改进。这是另一个显著的结果,因为它表明自我训练在预先训练失败的情况下是有效的。这两个结果为上述问题提供了一个肯定的答案。
一种越来越流行的预训练方法是自监督学习。自监督学习方法在不使用标签的情况下对数据集进行预训练,以期构建更通用的表示形式,用于更广泛的任务和数据集。我们研究了使用最先进的自监督学习技术对ImageNet模型进行预训练,并与基于COCO的标准监督ImageNet预训练进行了比较。我们发现,使用SimCLR的自监督预训练模型具有与有监督ImageNet预训练相似的性能。当自我训练有帮助时,这两种方法都会在高数据/强增强环境下损害COCO的性能。我们的结果表明,监督和自我监督的预训练方法都不能随着标记数据集大小的增长而扩展,而自训练仍然是有用的。
然而,我们的工作并不排斥计算机视觉的预训练。在我们的实验中,微调预训练的模型比从头开始训练和自我训练要快。加速比从1.3倍到8倍不等,这取决于预先训练的模型质量、数据扩充的强度和数据集大小。在难以收集足够的标记数据的应用程序中,预训练也可以受益。在这种情况下,预训练效果很好;但自我训练也有利于有或无预训练的模型。例如,我们对PASCAL分割数据集的实验表明ImageNet预训练提高了准确性,但是自训练在预训练的基础上提供了额外的+1.3%的mIOU提升。事实上,即使使用相同的数据集,预训练的好处也不会抵消自我训练的收益,这表明了自我训练的普遍性。
进一步,我们探讨了在COCO和PASCAL数据集上自我训练的局限性,从而证明了该方法的灵活性。我们对COCO数据集进行自训练,以开放图像数据集作为未标记数据源,RetinaNet和Spinnet作为目标检测器。这种组合在COCO测试集上达到54.3AP,比最强的Spinnet模型好+1.5AP。在分割方面,我们使用PASCAL-aug集作为未标记数据的来源,使用NAS-FPN和EfficientNet-L2作为分割模型。这种组合在PASCAL VOC 2012测试集上达到90.5AP,超过了89.0AP的最新精度,后者还使用了额外的300M标记图像。这些结果证实了自我训练的另一个好处:它对未标记的数据源、模型体系结构和计算机视觉任务非常灵活。
在整个深度学习的历史中,预训练一直备受关注。21世纪初,深度学习的复苏也始于无监督的预训练。NLP中无监督预训练的成功重新激起了人们对计算机视觉无监督预训练的兴趣,尤其是对比训练。在实践中,有监督的预训练在计算机视觉领域是非常成功的。例如,许多研究表明,在ImageNet、Instagram和JFT上预先训练的ConvNets可以为许多下游任务提供强大的改进。
有监督的ImageNet预训练是用于目标检测和分割的最广泛的初始化方法。然而,如果我们考虑一个非常不同的任务,比如COCO目标检测,ImageNet的预训练效果并不好。
与何恺明等人相比,我们的工作更进一步,更详细地研究了预训练在计算机视觉中的作用,包括更强的数据扩充,不同的预训练方法(监督和自监督),以及不同的预训练检查点质量。
本文没有深入研究有针对性的预训练,例如使用一个目标检测数据集来改进另一个目标检测数据集,原因有二。首先,有针对性的预训练费用高昂,而且不可扩展。第二,有证据表明,在与目标任务相同的数据集上进行预训练仍然无法产生改进。例如,Shao等人发现开放图像对象检测数据集上的预训练实际上会损害COCO的性能。更多有针对性的预训练分析见[42]。
我们的工作证明了自我训练的可扩展性和普遍性。最近,自我训练在深度学习(如图像分类[9,10]、机器翻译[11]和语音识别[12,43])方面取得了显著进展。与我们的工作关系最密切的是Xie等人的工作。他们在自我训练中也使用了强大的数据扩充,但用于图像分类。更接近应用的是用于检测和分割的半监督学习,他们只研究孤立的自我训练,或者没有与ImageNet预训练进行比较。他们也不考虑这些训练方法和数据扩充之间的相互作用。
数据增强:我们使用了四种不同的增强策略来增强检测和分割。这允许在我们的分析中改变数据增强的强度。我们根据文献、AutoAugment和RanAugment中的标准翻转和scale jittering来设计我们的增强策略。标准翻转和裁剪策略包括水平翻转和缩放抖动。随机抖动操作将图像大小调整为目标图像大小的(0.8,1.2),然后对其进行裁剪。AutoAugment和RandAugment最初是用标准的抖动设计的。我们在AutoAugment和RandAugment中增加了尺度抖动(0.5,2.0),发现性能得到了显著改善。我们得出了四个数据我们用于实验的增强策略:FlipCrop、AutoAugment、具有更高比例抖动的AutoAugment、使用更高比例抖动的RandAugment。在全文中,我们将它们分别称为:Augment-S1、Augment-S2、Augment-S3和Augment-S4。最后三种增强策略比何恺明等人提出的策略更为强大。他使用基于FlipCrop的策略。
预训练:为了评估预训练的有效性,我们研究了不同质量的ImageNet预训练检查点。为了控制模型容量,所有检查点使用相同的模型体系结构,但在ImageNet上具有不同的精确度(因为它们的训练方式不同)。我们使用EfficientNet-B7架构[51]作为预培训的强大基线。对于EfficientNet-B7架构,有两个可用的检查点:1)使用AutoAugment训练的EfficientNet-B7检查点,在ImageNet上达到84.5%的top-1准确率;2)使用噪声学生方法训练的EfficientNet-B7检查点,利用额外的300M未标记图像,达到86.9%的top-1精度。我们将这两个检查点分别表示为ImageNet和ImageNet++。随机初始化的训练用Rand Init表示。因此,我们所有的基线都比何恺明等人都强。他只将ResNet用于他们的实验(EfficientNetB7检查点比ResNet-50检查点具有大约8%的准确性)。表1总结了数据增强和预先训练的检查点的符号。
自我训练:我们的自我训练实现基于噪音的学生训练,有三个步骤。首先,教师模型是根据标记的数据(例如COCO数据集)进行训练的。然后教师模型在未标记的数据(例如ImageNet数据集)上生成伪标签。最后,学生模型训练是联合优化人类打的标签与伪标签上的损失。学生的主要噪声源是通过数据增强和先前在相关模型中使用的其他噪声方法。我们对各种超参数和数据增强的实验表明,用这种标准损失函数进行自我训练是不稳定的。为了解决这个问题,我们实现了一种标准化损失的技术。
目标检测:我们使用COCO数据集(118k个images)进行监督学习。在自我训练中,我们将ImageNet(1.2M images)和OpenImages(1.7M images)作为未标记的数据集进行实验。在实验中,我们在EfficientNet-B7骨干网络上采用RetinaNet检测器和特征金字塔网络。我们使用图像大小为640×640,从P3到P7的金字塔级别,每像素9个锚,如[14]所述。训练批大小为256,带权重衰减为1e-4。该模型的学习率为0.32 和余弦学习率衰减策略。对于所有使用不同增强强度和数据集大小的实验,我们允许每个模型进行训练,直到它收敛为止(当训练时间较长时,停止有助于甚至损害在一个有效数据集上的性能)。例如,当两个模型随机初始化时,使用Augment-S1进行45k次迭代,使用Augment-S4进行120k次迭代。对于使用SpineNet的结果,我们使用文[15]中报告的模型结构和超参数。当我们使用SpineNet时,由于内存限制,我们将批处理大小从256个减少到128个,并将学习率提高一半。除批处理大小和学习速率外,超参数遵循SpineNet开源存储库中的默认实现。所有SpineNet模型也使用sigma为0.3的Soft-NMS。在自我训练中,我们使用硬分数阈值0.5来生成伪框标签。我们使用总共512个批处理大小,COCO的256个,伪数据集的256个。其他训练超参数与监督训练相同。
语义分割:我们使用PASCAL VOC 2012分割数据集的训练集(1.5k images)进行监督学习。在自我训练中,我们使用增强PASCAL数据集(9k images)、COCO(240k images,结合标记和未标记的数据集)和ImageNet(1.2M图像)进行实验。在EfficientNet-B7和EfficientNet-L2主干模型,我们采用NAS-FPN模型架构。我们的NAS-FPN模型,使用重复7次的深度卷积网络。我们使用P3到P7的金字塔级别,并将所有的特征级别上采样到P2,然后通过求和运算将它们合并。我们在合并后的特征后应用3层3×3卷积,然后附加1×1卷积进行21类预测。对于批量大小为256、权重衰减为1e-5的EfficientNet-B7和EfficientNet-L2,学习率设置为0.08。该模型采用余弦学习率衰减策略进行训练。EfficientNet-B7 经过40k次迭代训练,EfficientNet-L2经过20k次迭代训练。对于自我训练,我们对EfficientNet-B7使用512的批处理大小,对于EfficientNet-L2使用256的批处理大小。批处理的一半由监督数据和另一半伪数据组成。其他超参数遵循监督训练中的参数。此外,我们使用硬评分阈值0.5来生成分割掩码,分数较小的像素被设置为忽略标签。最后,我们应用多尺度推理增强算法(0.5,0.75,1,1.25,1.5,1.75)来计算伪标记的分割掩码。
这一节扩展了何恺明等人的发现。他研究了COCO数据集的预训练的弱点,因为他们改变了标记数据集的大小。与他们的研究类似,我们使用ImageNet进行监督前训练,并改变COCO标记的数据集大小。与他们的研究不同,我们还改变了其他因素:数据增强能力和预先训练的模型质量(更多细节见第3.1节)。如前所述,我们使用以EfficientNet-B7架构为主干的RetinaNet对象检测器。以下是我们的主要发现:
我们分析了当我们改变增强力量时,训练前的影响。在图1-Left中,当我们使用标准数据扩充(Augment-S1)时,预训练会有所帮助。但是,随着数据增强强度的增加,预训练的价值就降低了。
此外,在强扩充机制下,我们观察到,预训练实际上会对成绩造成很大的伤害(-1.0AP)。何恺明等人没有观察到这一结果。因为预训练只会轻微地影响他们的表现(-0.4AP)或者在实验中是中性的。
接下来,我们分析了改变标记数据集大小时预训练的影响。图1-右图显示,预训练在低数据区(20%)是有帮助的,在高数据区是中性或有害的。这一结果与何恺明等人的观察结果基本一致。这里的一个新发现是,检查点质量确实与低数据状态下的最终性能相关(ImageNet++ 在20%COCO上的性能最好)。
在这一部分,我们分析了自我训练,并与上述结果进行了对比。为了保持一致性,我们将继续使用COCO对象检测作为感兴趣的任务,ImageNet作为自训练数据源。与预训练不同,自我训练只将ImageNet视为未标记的数据。再次,我们使用RetinaNet 目标检测器作为EfficientNet-B7网络的主干,以与先前的实验兼容。
以下是我们的主要发现:
与上一节类似,我们首先分析了当我们改变数据增强强度时目标检测器的性能。表2显示了四种数据扩充方法的自训练性能,并将它们与监督学习(Rand Init)和预训练(ImageNet Init)进行了比较。在这里,我们还展示了自我训练和预训练到基线的收益/损失。结果证实,在预训练受损的情况下(强数据扩充:Augment-S2,Augment-S3,Augment-S4),自我训练有显著的帮助。当预训练的损害为-1.0AP时,它在基线之上提供了超过+1.3AP的提升。在ResNet-101上也得到了类似的结果。
接下来,我们分析自我训练在改变COCO标记的数据集大小时的性能。从表3中可以看出,不管预训练方法如何,自训练对数据集大小(从小到大)的对象检测器都有好处。最重要的是,在100%标记集大小的高数据状态下,自我训练显著改善了所有模型,而预训练却很受损。
在20%的低数据范围内,自训练在Rand Init的基础上获得了最大的+3.4AP增益。这个增益大于ImageNet Init(+2.6AP)获得的增益。虽然自训练增益小于ImageNet++Init的增益,但ImageNet++Init使用了额外的300M未标记图像。
即使在使用相同的数据源时,自我训练与预训练相比也是相当重要的。例如,在数据量为20%的情况下,使用ImageNet预训练过的检查点可以提高+2.6AP。使用ImageNet进行预训练和自我训练可获得额外的+2.7AP增益。在所有的数据集大小中,可以观察到结合预训练和自训练的额外的收益。
先前的实验表明,ImageNet预训练会损害准确性,尤其是在高数据、增强能力最强的情况下。在这种情况下,我们研究了另一种流行的预训练方法:自我监督学习。
自我监督学习的主要目标是建立可转移到更广泛的任务和数据集的通用表示。由于有监督的ImageNet预训练会损害COCO的性能,所以不使用标签信息的潜在的自我监督学习技术可能会有所帮助。在本节中,我们重点讨论高数据(100%COCO数据集)和最强增强(Augment-S4)设置中的COCO。我们的目标是将随机初始化与使用最先进的自监督算法预先训练的模型进行比较。为此,我们选择一个在ImageNet上使用SimCLR框架预训练的检查点。我们在对ImageNet标签进行微调之前使用检查点。所有主干模型都使用ResNet-50,在工作中,SimCLR只使用ResNet。
表4中的结果表明,自我监督的预训练检查点对性能的影响与在COCO数据集上的监督预训练一样大。两个预训练的模型比使用随机初始化的模型性能降低了-0.7AP。我们再次看到自我训练提高了0.8AP性能,当两个预训练的模型都损害了性能。尽管自我监督学习和自我训练都忽略了这些标签,但是自我训练似乎在使用未标记的ImageNet数据来帮助COCO时更为有效。
在本节中,我们将结合我们关于数据扩充、自我训练和预训练的相互作用的知识,以改进最先进的技术。以下是我们的主要成果:
在本实验中,我们使用自训练和Augment-S3作为增强方法。之前对完整COCO的实验表明ImageNet预训练会损害性能,所以我们不使用它。虽然对照实验使用了EfficientNet和ResNet主干,但是我们在这个实验中使用了SpineNet,因为它更接近最先进的技术。对于自我训练,我们使用开放图像数据集(OID)作为自我训练的未标记数据,我们发现它比ImageNet更好(有关数据源对自我训练的影响的更多信息,请参阅附录E)。请注意,通过[41]中的预训练发现OID对COCO没有帮助。
表5显示了我们在两个最大的SpineNet模型上的结果,并将它们与之前在此数据集上的最佳单一模型、single-crop性能进行了比较。对于最大的SpineNet模型,我们将最好的52.8AP SpineNet模型改进+1.5AP,以达到54.3AP。在所有模型变体中,我们至少获得+1.5AP增益。
在这个实验中,我们使用NAS-FPN架构,EfficientNet-B7和EfficientNet-L2作为主干架构。由于PASCAL的数据集很小,所以在这里,预训练仍然很重要。因此,本实验采用预训练、自我训练和强数据扩充相结合的方法。对于预训练,我们使用ImageNet++来训练EfficientNet主干。对于增强,我们使用Augment-S4。我们使用PASCAL的aug集作为自训练的附加数据源,我们发现它比ImageNet更有效。
表6显示,我们的方法在很大程度上改进了现有的技术。我们在PASCAL VOC 2012测试集上使用单尺度推理实现了90.5%的mIOU,超过了旧的最先进水平89%mIOU利用多尺度推理。对于PASCAL,我们发现有一个良好的检查点的预训练是至关重要的,没有它,我们可以达到41.5%的mIOU。有趣的是,我们的模型比以前的技术进步了1.5% mIOU甚至在训练中使用更少的人类标签。我们的方法使用ImageNet(1.2M images)和PASCAL序列分割(1.5k images)中的标记数据。相比之下,以前最先进的模型使用了额外的标记数据:JFT(300M images)、COCO(120k images)和PASCAL-aug(9k images)。关于伪标记图像的可视化。
计算机视觉最宏伟的目标之一是开发能够解决许多任务的通用特征表示。我们的实验显示了在分类任务和自监督任务中学习普遍表征的局限性,这表现在自训练和预训练的表现差异上。我们对预训练表现不佳的直觉是,预训练没有意识到感兴趣的任务,可能无法适应。在切换任务时通常需要这样的适应,因为,例如ImageNet的良好特征可能会丢弃COCO所需的位置信息。我们认为,与监督学习相结合的自我训练目标更能适应感兴趣的任务。我们怀疑这会导致自我训练更普遍地有益。
自我训练范式的一个优点是它联合训练监督目标和自我训练目标,从而解决两者之间的不匹配问题。但也许我们可以联合训练ImageNet和COCO来解决这个不匹配的问题?表7显示了联合训练的结果,其中ImageNet分类与COCO目标检测联合训练(我们在本实验中使用精确的设置作为自训练)。我们的结果表明,ImageNet预训练可以提高+2.6AP,但是使用随机初始化和联合训练可以获得更大的+2.9AP增益。这种改进是通过在ImageNet数据集上训练19个epoch来实现的。大多数用于微调的ImageNet模型需要更长时间的训练。例如,ImageNet Init(监督预训练模型)需要在ImageNet数据集中训练350个epochs。
此外,使用相同的ImageNet数据源(表的最后一列),预训练、联合训练和自我训练都是相加的。ImageNet预训练获得+2.6AP改善,预训练+联合训练获得+0.7AP改善,进行预训练+联合训练+自我训练获得+3.3AP改善。
在我们的实验中,一个有趣的结果是ImageNet的预训练,即使有附加的人类标签,其表现也比自我训练差。同样,我们在PASCAL数据集上验证了同样的现象。在PASCAL数据集上,aug集通常用作附加数据集,其标签比训练集噪声大得多。我们的实验表明,在强数据增强(Augment-S4)的情况下,使用train+aug进行训练实际上会损害准确性。同时,在同一个aug数据集上通过自训练生成的伪标签显著提高了准确性。这两个结果都表明噪声(PASCAL)或非靶向(ImageNet)标记比靶向伪标记更差。
值得一提的是,Shao等人。[41]报告开放图像的预训练损害了COCO的性能,尽管它们都用边界框进行了注释。这意味着我们不仅希望任务是相同的,而且注释也是相同的,这对于预训练是非常有益的。另一方面,自我训练是非常普遍的,可以成功地使用开放图像来提高COCO的表现,这一结果表明自我训练可以很好地与感兴趣的任务保持一致。
目前的自我训练技术仍然存在局限性。特别是,自我训练需要更多的计算,而不是对预训练的模型进行微调。由于预训练,加速从1.3倍到8倍不等,这取决于预训练的模型质量、数据扩充的强度和数据集的大小。对于低数据应用,如PASCAL分割,也需要良好的预训练模型。
我们的实验结果突出了自我训练的重要优势。首先,就灵活性而言,自我训练在我们尝试过的每种设置中都很有效:低数据区、高数据区、弱数据区和强数据区。对于不同的体系结构(ResNet、EfficientNet、SpineNet、FPN、NAS-FPN)、数据源(ImageNet、OID、PASCAL、COCO)和任务(对象检测、分割)来说,自我训练也是有效的。第二,就一般性而言,自我训练即使在训练失败时也能很好地发挥作用,但当训练成功时也是如此。在可伸缩性方面,自我训练被证明表现良好,因为我们有更多的标记数据和更好的模型。机器学习的一个惨痛教训是,当我们有更多的标记数据、更多的计算或更好的监督训练配方时,大多数方法都会失败,但这似乎并不适用于自我训练。
论文原文链接:
领取专属 10元无门槛券
私享最新 技术干货