再想一想预训练和自训练吧
作者:Barret Zoph,Golnaz Ghiasi,Tsung-Yi Lin 等
Google Research,Brain Team,2020.6.11
摘要:预训练是计算机视觉领域的一种主流范式。例如,对ImageNet的有监督预训练模型常被用于初始化物体检测和分割模型的主干网络。但是何恺明给出了一个令人惊讶的发现[1]:在ImageNet上预训练对COCO上的物体检测的影响是有限的。本文将调研另一种使用额外数据的方法,自训练,并在相同设置下与ImageNet预训练模型对比。我们的研究揭示了自训练的泛化性和灵活性,并给出另外3个观点:1)更强的数据增扩和更多的有标签数据会进一步削弱预训练的价值;2)与之不同的是,在低数据和高数据情况下(low-data and high-data regimes),当使用更强的数据增扩的时候,自训练总是有提升作用的;3)当预训练起作用的时候,在预训练的基础上使用自训练能带来进一步地提升。例如,在COCO物体检测上,预训练在使用1/5的有标签数据时有益,在使用所有有标签数据时有害。而自训练无论数据集规模大小都能带来+1.3到+3.4AP的提升。换言之,当预训练不起作用(用ImageNet来帮助COCO)的时候,相同设置下,自训练能很好地起作用。PASCAL分割数据集是个比COCO小得多的数据集,虽然预训练有很大的改善作用,但是自训练能在预训练的基础上带来进一步地提升。在COCO物体检测上,我们达到54.3AP,比最强模型SpineNet提升+1.5AP。在PASCAL分割上,我们达到90.5mIoU,比先前的先进模型DeepLabv3+提升+1.5%mIoU。
1 介绍
预训练是计算机视觉领域的一种主流范式。由于许多视觉任务都是相关的,因此需要在一个数据集上预训练一个模型,以帮助另一个数据集。现有的普遍做法是在ImageNet分类上预训练一个模型,然后作为物体检测和分割网络的主干[2-5]。这种做法最近受到何恺明的质疑[1],他们给出一个令人吃惊的结果,即在ImageNet上的预训练并不能提高在COCO数据集上的准确度。
与之形成鲜明对比的是自训练[6-8]。假定我们现在是要用ImageNet来帮助COCO物体检测,自训练步骤是,先丢弃掉ImageNet上的标签,在COCO上训练一个检测模型,用这个检测模型对ImageNet数据生成伪标签,将带伪标签的ImageNet数据和人工标签的COCO数据组合起来训练一个新的检测模型。自训练最近的一些成功的工作[9-12]提出了一个问题:自训练在多大程度上比预训练更有效?在预训练失效的时候,自训练在相同的设置下能够起作用,用ImageNet帮助COCO检测吗?
我们的研究(我们的方法是基于受干扰的学生[10])重点就是要回答这些问题。我们定义了一组控制实验,用ImageNet作为额外数据,目的是要提升COCO的准确度。控制变量是使用COCO中有标签的数据的数量,以及数据增扩的强度。实验表明,增大数据增扩的强度,或者增加使用COCO有标签数据的数量,预训练的价值会降低。当我们使用最强程度的数据增扩的时候,预训练带来副作用,使准确度下降1.0AP。这是个连何恺明[1]都没发现的令人吃惊的结果。而自训练和数据增扩有很好的交互作用,使用更强的数据增扩不仅不会损害自训练,而且有助于自训练。在相同强度的数据增扩、使用相同的ImageNet数据时,自训练仍能带来1.3AP的提升。这表明预训练失效的时候,自训练仍然是有效的。这一正一负两个结果给上述问题一个肯定的回答。
一种越来越流行的预训练方法是自监督学习。自监督学习方法是在一个数据集上不用标签的预训练,希望能建立适用于更广泛任务和数据集的通用表示。我们研究了最先进的自监督学习方法预训练的ImageNet模型,并且在COCO上和标准的有监督预训练的ImageNet模型对比。我们发现,使用SimCLR[13]的自监督预训练模型和有监督预训练的ImageNet模型性能相似。两者在COCO上当高数据(high data)/高强度的数据增扩的时候都是带来负作用,而自训练是带来提升作用。我们的研究表示,当有标签数据的数量增加到一定程度时,有监督的预训练和自监督的预训练会失败,而自训练仍能带来提升。
然而,我们的工作并不排斥计算机视觉的预训练。在我们的实验中,对预训练模型微调要比从头训练模型和自训练要快,快1.3倍到8倍,倍数因预训练模型质量、数据增扩强度和数据集规模而异。在收集有标签数据困难的情况下,预训练也是有用的。这种情况下,预训练能工作得很好,但是无论有没有预训练,这种情况下自训练都能带来提升。例如,在PASCAL分割数据集上实验表明,用ImageNet预训练模型能提高准确度,但是用自训练在预训练的基础上提供了额外的+1.3%mIoU的提升。事实上,即使用同一个数据集去预训练/自训练,预训练带来的提升也不会抵消自训练带来的提升,这表明了自训练的普遍性(generality)。
进一步,我们探讨了在COCO和PASCAL数据集上自训练的局限性,从而证明该方法的灵活性。在COCO数据集上自训练,将OpenImages作为额外的无标签数据,将带有SpineNet[15]的RetinaNet[14]作为检测网络,这种组合在COCO测试集上达到54.3AP,比最强SpineNet模型高出+1.5AP。在图像分割,用PASCAL aug set[16]作为无标签的额外数据,用NAS-FPN[17]+EfficientNet-L2[10]作为分割网络。这种组合在PASCAL VOC 2012测试集上达到90.5%mIoU,超过了之前的先进模型89.0%mIoU[18],而[18]使用了300M张额外的有标签数据。这些结果证实了自训练的另一个好处:它对未标签数据来源、网络结构和各种计算机视觉任务都很灵活。
2.相关工作
在整个深度学习的历史中,预训练一直备受关注(见[19]及其参考文献)。21世纪初,深度学习的复苏也始于无监督的预训练[20-24]。NLP中无监督预训练的成功[25-30]重新激起了人们对计算机视觉无监督预训练的兴趣,尤其是对比训练[13,31-35]。在实践中,有监督的预训练在计算机视觉领域是非常成功的。例如,许多研究(例如[36–40])表明,在ImageNet、Instagram和JFT上预训练的卷积网络可以为许多下游任务提供很大的提升。
有监督的ImageNet预训练是用于目标检测和分割的最广泛的初始化方法(例如[2-5])。然而,何恺明却质疑[1],当用在一个非常不同的下游任务上时,例如COCO物体检测,ImageNet预训练模型效果并不好。
与何恺明的工作[1]相比,我们的工作是更进一步,更详细地研究预训练在计算机视觉中不同情况下的作用,包括:更强程度的数据增扩、不同的预训练方法(监督和自监督)以及不同质量的预训练模型(checkpoints)。
本文没有深入研究有针对性的预训练,例如用一个物体检测数据集的预训练去帮助另一个物体检测数据集。原因有二:一是有针对性的预训练成本高昂,且可扩展性差;二是,已有证据表明,在相同任务不同数据集上的预训练仍然不能带来提升。例如[41]证明在OpenImages物体检测数据集上的预训练会损害在COCO物体检测数据集上的表现。更多关于有针对性的预训练的分析见[42]。
我们的工作证明了自训练的可扩展性和普遍性(例如,[6-8])。最近,自训练在深度学习(例如,图像分类[9,10]、机器翻译[11]和语音识别[12,43])方面取得了显著进展。与我们的工作关系最密切的是受干扰的学生[10],其在自训练中使用很强的数据增扩,但是是用到图像分类上。在应用上更接近的是用于检测和分割的半监督学习(例如[44–47]),但他们只是单独研究自训练,没有和ImageNet预训练进行对比,也没有考虑这些训练方法和数据增扩的交互作用。
3 方法
3.1 方法与控制变量
数据增扩: 对检测和分割,我们使用4种不同强度的数据增扩策略。这样我们就可以在分析中改变数据增扩的强度。我们根据标准的裁剪翻转[14]、AutoAugment[48,49]和RandAugment[50]来设计我们的数据增强策略。标准的翻转裁剪包括水平翻转以及尺度抖动,标准的尺度抖动是指将图像缩放为目标图像尺寸的(0.8,1.2)倍,然后再裁剪。AutoAugment和RandAugment最初的设计是基于标准的尺度抖动的,我们加宽了尺度抖动范围至(0.5,2.0),发现会有显著改善。我们在实验中用的四种数据增扩策略是:翻转裁剪、AutoAugment、大范围尺度抖动的AutoAugment、大范围尺度抖动的RandAugment。在下文中这4中策略会被称为:Augment-S1、Augment-S2、Augment-S3、Augment-S4。后3种策略比何恺明在[1]中用的强度更大,他只用了翻转裁剪策略。
预训练: 为了评估预训练的有效性,我们研究了不同质量的ImageNet预训练checkpoint。为了控制模型容量,所有checkpoints的网络结构相同,但是在ImageNet上有不同的准确度(因为训练方式不同)。我们使用EfficientNet-B7网络结构[57]作为预训练的一个强大的基线。对于EfficientNet-B7网络,有两个可得的checkpoints:1)用AutoAugment训练的在ImageNet上84.5% top-1准确度的checkpoints;2)使用300M张无标签数据用受干扰学生训练[10]的在ImageNet上86.9% top-1准确度的checkpoints。在下文中我们将这两个checkpoints表示为ImageNet、ImageNet++,随机初始化表示为RandInit。因此,我们所有的基线都比何恺明用的[1]要强,何恺明在[1]中用的是ResNets,而EfficientNet-B7 checkpoint比ResNet-50 checkpoint要高出大约8个百分点。表1汇总了我们的数据增扩和预训练模型的表示符号。
表1自训练:我们用的自训练是基于受干扰的学生[10],有3个步骤。首先,在有标签数据(例如COCO数据集)上训练一个教师模型。然后,教师模型在无标签数据(例如ImageNet数据集)上生成伪标签。最后,在人工标注数据和伪标签数据上联合训练一个学生模型。学生模型受到的干扰的主要来源是数据增扩以及先前在相关模型中使用的其他噪声方法。
我们对各种超参数和数据增扩的实验表明,用这种标准损失函数进行自训练是不稳定的。为了解决这个问题,我们实现了一种损失归一化技术,会在附录B中介绍。
3.2 其它的实验设置
物体检测: 我们使用COCO数据集[52](118k个图像)进行监督学习。在自训练中,我们使用ImageNet[53](1.2M图像)和OpenImages[54](1.7M图像)作为无标签数据。网络选择EfficientNet-B7为主干,RetinaNet为检测头,使用特征金字塔。和[14]一样,图像尺寸640×640,使用特征金字塔的P3到P7,每个像素9个锚框。批量大小256,权重衰减1e-4。初始学习率0.32,使用余弦学习率衰减策略[56]。对使用不用的是数据增扩强度和数据集规模的实验,我们使每个模型训练到收敛(converges)为止(即继续训练在验证集上的性能不再有提升甚至下降)。例如,当两个模型随机初始化时,使用Augment-S1进行45k次迭代,使用Augment-S4进行120k次迭代。当使用SpineNet时,使用[15]中的网络结构和超参数,由于内存限制,将批量大小从256降为128,并且将学习率减半。除了批量大小和学习率以外的其它超参数遵循SpineNet的开源代码里的设置。所有的SpineNet模型使用SoftNMS[57],sigma参数为0.3。在自训练中,使用0.5的硬阈值来生成伪边框标签。批量大小总的为512,其中COCO数据256,伪标签数据256。其它训练超参数和监督训练一样。
语义分割: 我们使用PASCAL VOC 2012[58]的训练集(1.5k张图片)来有监督训练。自训练中,使用增广版PASCAL数据集[16](9k张图片),COCO(240k张图片,240k是包含有标签和无标签)和ImageNet[53](1.2M张图像)。使用NAS-FPN[17]作为框架, EfficientNet-B7和EfficientNet-L2为主干。我们的NAS-FPN重复使用7次深度可分离卷积。使用特征金字塔的P3到P7,并将所有特征上采样至P2大小,并将它们相加合并起来。对合并后的特征,使用3层3×3卷积,再接上一个1×1卷积用于21类分割。主干为EfficientNet-B7时学习率设为0.08,主干为EfficientNet-L2时学习率设为0.2(笔者想问一句:难道这暗示网络越大,初始学习率应该越大,有这个规律?),批量大小256,权重衰减1e-5。使用余弦学习率衰减策略。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)来计算伪标签分割掩膜。
4. 实验
4.1 数据增扩和有标签数据数量对预训练的影响
本节扩展了何恺明的发现[1],他研究了使用不同数量的COCO有标签数据时预训练的缺陷。和他们的研究类似,我们用ImageNet做有监督的预训练,并改变COCO有标签数据的规模。和他们的研究不同的是,我们还改变另外两个控制变量:数据增扩的强度和预训练模型的质量(详细介绍见3.1节)。如上所述,我们的网络以EfficientNet-B7为主干,以RetinaNet为检测头。以下是我们的主要发现:
当数据增扩的强度很强时,预训练是有害的。 我们分析当数据增扩的强度不同时预训练的影响。如图1左图所示,当我们使用标准的数据增扩(Augment-S1)时,预训练是有益的。但是当我们加大数据增扩的强度时,预训练的价值会消失。更进一步的,当把数据增扩的强度加到更大时,预训练实际上是大大地损害了性能(-1.0AP)。这一结果何恺明[1]没有发现,在他们的实验中,预训练只是有些轻微的损害(-0.4AP)或者是无益无害的。
图1 在右图中所有模型使用Augment-S4。其它增扩策略下的类似结果见附录C使用更多的有标签数据,预训练的价值会消失。 接着,我们分析使用不同规模的有标签数据时预训练的影响。如图1右图所示,在有标签数据规模小(20%,low-data regimes)时,预训练是有益的;在有标签数据规模大时,预训练是有害的或者无益无害的。这一发现与何恺明的发现[1]基本一致。这里一个新发现是,当使用小规模有标签数据时,checkpoint质量和最终性能相关:在使用20%COCO有标签数据时,ImageNet++预训练模型表现最佳。
4.2 数据增扩和有标签数据数量对自训练的影响
本节分析自训练,并与上一节结果对比。为了公平比较,我们继续将COCO物体检测作为任务,ImageNet作为用以自训练的额外数据。和预训练不同,自训练不使用ImageNet的图像标签。网络同样是以EfficientNet-B7为主干,以RetinaNet为检测头。以下是主要发现:
在有标签数据规模大、数据增扩强度很强时,即使预训练会有害,自训练仍是有益的。 和上一节类似,我们首先分析当使用不同强度的数据增扩时检测网络的性能。表2所示是在4种强度的数据增扩下自训练的性能,并与监督学习(Rand Init)和预训练(ImageNet Init)行对比。表中还标上了自训练和预训练相对于基线的性能提升或下降。结果表明,当预训练有害的时候(强的数据增扩:Augment-S2,Augment-S3,Augment-S4),自训练有显著的提升作用。当预训练导致性能下降1.0AP的时候,自训练带来性能超过1.3AP的提升。在ResNet-101上也得到了类似的结果(见附录D)。
表2 所有的模型是用全部的COCO数据训练的无论有标签规模是大是小,自训练都能起作用,是对预训练的补充。 接着我们改变使用的COCO有标签数据的规模,分析自训练的性能。从表3可以看出,无论使用何种预训练或者不使用预训练模型做初始化,无论有标签数据集规模是大是小,自训练都能带来提升作用。最重要的是,当使用全部的COCO有标签数据时,预训练会有害,而自训练却给所有模型带来提升。
表3 无论有标签数据规模大小,无论是否使用预训练及预训练质量如何,自训练都带来提升。所有的模型使用Augment-S4。在只使用20%的COCO数据时,也就是有标签数据规模小时,在Rand Init初始化模型的基线上,自训练带来的提升是最大的:3.4AP。这个提升甚至比ImageNet Init带来的提升要大(+2.6AP)。尽管自训练的提升作用小于 ImageNet++的提升作用,不过要考虑到ImageNet++使用了300M张额外的无标签图像。
即使预训练使用的额外数据和自训练使用的额外数据是同一个数据集时,自训练还是能够在预训练的基础上进一步带来提升。例如,当使用20%的COCO数据时,使用ImageNet预训练会带来2.6AP的提升,而使用ImageNet预训练和ImageNet自训练会带来进一步的2.7AP的提升。在各种规模有标签数据的实验中,都可看到组合使用预训练和自训练带来的额外提升。
4.3 在有标签数据规模大、使用高强度的数据增扩时,当自训练有益的时候,自监督预训练也是有害的。
上上节实验表明,在有标签数据规模大、数据增扩强度高的情况下,ImageNet预训练会降低性能。在这种情况下,我们研究了另一种流行的预训练方法:自监督学习。
自监督学习、无标签预训练的初衷是建立可迁移到更广泛任务和数据集的通用表示。既然在ImageNet上的有监督预训练会损害在COCO上的性能,那么自然地就会考虑不使用标签信息的自监督学习会不会带来潜在的好处。本节会重点关注使用全部的COCO数据,以及最高强度的数据增扩(Augment-S4)的情况。目的是将随机初始化和用最先进的自监督学习算法预训练的模型做比较。因此,我们选择在ImageNet数据上用SimCLR框架[13]预训练的checkpoint。在使用这个checkpoint之前,会用ImageNet的标签对其进行微调。所有的主干都是ResNet50,因为在SimCLR的工作中是用的ResNets。
表4的结果表明,在COCO数据集上,自监督预训练模型会带来和有监督预训练模型同样的损害。两个预训练模型在随机初始化的基线上性能都下降0.7AP。我们再一次看到,当两个预训练模型都有害时,自训练仍有益,提升了0.8AP。尽管自监督预训练和自训练都没有使用额外数据的标签,但是自训练在使用无标签ImageNet数据来帮助COCO时更有效。
表4 使用全部COCO数据,Augment-S44.4 探索自训练和预训练的局限
本节将结合我们关于数据增扩、自训练和预训练的相互作用的认识,以改进最先进技术。以下是我们的主要成果:
COCO物体检测 在本实验中,我们将使用自训练和Augment-S3。先前的实验表明,当使用全部的COCO数据时,ImageNet预训练会损害性能,所以我们就不使用ImageNet预训练。虽然在对照实验中我们用的是EfficientNet和ResNet作为主干,但是在本实验中我们用SpineNet[15],因为它更接近最先进水平。我们使用OpenImages数据集(OID)[54]作为自训练的无标签额外数据,因为我们发现这比使用ImageNet数据效果会更好(有关数据源对自训练的影响的更多信息,请参阅附录E)。请注意,[41]报告了在OID预训练对COCO是无益的。
表5是我们的最大的两个SpineNet模型的结果,并且和先前的最先进单个模型、单个图像尺度的结果进行对比。对于最大的SpineNet网络(SpineNet-190 (1280)),我们将最好的SpineNet模型(52.8AP)提升了1.5AP,达到54.3AP。对于不同的模型,我们都有至少1.5AP的提升。
表5 和COCO物体检测上最强模型对比。自训练用的是OpenImages数据。括号里的是训练阶段图像尺寸。PASCAL VOC语义分割 本实验中我们使用NAS-FPN作为框架,使用EfficientNet-B7[51]和EfficientNet-L2[10]作为主干。因为PASCAL的数据规模很小,预训练在这里仍是很有益的,因此,在本实验中,我们组合使用预训练、自训练和高强度的数据增扩。使用ImageNet++预训练模型来初始化EfficientNet主干。使用Augment-S4数据增扩。使用PASCAL补充集[16]作为自训练使用的额外数据,因为我们发现在自训练中用PASCAL补充集比使用ImageNet更有益。
表6显示,我们的方法在很大程度上改进了现有的技术。在PASCAL VOC 2012测试集中,我们使用单尺度推理实现了90.5%的mIOU,优于采用多尺度推理的旧的最先进的89%mIOU。我们发现在PASCAL数据集上使用高质量的预训练checkpoint是很关键的,不用的话我们只能取得41.5%mIoU。有趣的是,我们比先前的最先进模型提升了1.5%mIoU,即使我们训练的人工标注数据比先前最先进模型要少得多。我们用的人工标注数据有:ImageNet(1.2M张图片)、PASCAL训练集(1.5k张图片)。而先前最先进模型用的人工标注数据除了这些还有:JFT(300M张图片)、COCO(120k张图像)和PASCAL补充集(9k张图片)。伪标签图片的可视化见附录F。
表6 在 PASCAL VOC 2012验证/测试集上和最先进模型对比。 †符号表示在推理时使用多尺度/翻转的测试数据增强。 ‡符号表示对train+val模型微调训练,并且使用[18]的硬类复制。EfficientNet模型(Eff)在验证集上推理的模型是在train set上训练的,在测试集推理的模型是在train+val set上训练的。(笔者插句嘴:41.5%mIoU是作者打错字了还是说大的网络EfficientL2在小规模数据集PASCAL-train上过拟合?另外作者在上文中说自训练中用到PASCAL补充集,而在刚刚没有提到,应该是指,在作者的方法里,使用PASCAL补充集是作为无标签数据,而先前最先进模型用到了PASCAL补充集的标签。)
5 讨论
重新思考预训练和通用特征表示。 计算机视觉最宏伟的目标之一是开发能够解决许多任务的通用特征表示。
我们的实验揭示了,从分类任务和自监督任务中学习到的通用表示是有局限性的,预训练和自训练的性能上的差异证明了这一点。我们对预训练表现较差的直观解释是,预训练并没有感知到感兴趣任务(the task of interest,目标任务,最终任务),导致适应(adaption)的失败。在切换任务时常需要这样的适应,因为,例如,在ImageNet上表现好的特征可能会丢弃COCO所需的位置信息。
我们认为,将自训练的目标与监督学习相结合的联合训练能更好地适应感兴趣任务。我们觉得这可能是自训练普遍有益的原因。
联合训练的益处 自训练范式的一个优点是它联合训练监督和自训练的目标,从而解决两者间的不匹配问题。不过我们也许可以联合训练ImageNet和COCO,看是否能同样解决这个不匹配问题?表7是联合训练的结果,这里将ImageNet分类和COCO检测联合训练,在本实验里还使用了额外的设置就是自训练。结果表明,使用ImageNet会带来2.6AP的提升,但是使用随机初始化和联合训练会带来更大的提升(2.9AP)。这个提升是在ImageNet数据集上训练19个epoch得来的。而大多数用于微调的ImageNet模型需要更长的训练。例如,ImageNet Init(监督预训练模型)需要在ImageNet数据集中训练350个epoch。
表7 所有模型使用ImageNet作为额外数据。所有模型使用20%的COCO数据,使用Augment-S4。此外,使用同一个ImageNet数据源(在表的最后一列),预训练、联合训练和自训练是互相补充的。ImageNet预训练带来2.6AP的提升,预训练+联合训练带来进一步的0.7AP的提升,预训练+联合训练+自训练相比只预训练有3.3AP的提升。
任务匹配的重要性 我们实验中的一个有趣结果是,即使使用人工标注的预训练,表现得也比自训练要差。同样,我们在PASCAL数据集上验证了同样的现象。在PASCAL数据集上,补充集(aug set)常被作为一个附加的数据集,它的标签要比训练集的噪声大得多。我们实验表明,在高强度数据增强(Augment-S4)的情况下,使用训练集+补充集进行训练会降低准确度。而与此同时,在同一个补充集上通过自训练生成伪标签会显著提高准确度。这连个结果表明,有噪声的标签(PASCAL)与不针对目标任务的标签(ImageNet)都比针对目标任务的伪标签要差。
表8值得一提的是,[41]报告了在OpenImages上的预训练会损害在COCO上的性能,尽管OpenImages和COCO都是用的边界框标注。这意味着,如果要预训练有益,我们不仅仅希望预训练任务和最终目标任务是相同的(笔者:这里任务是指,分类、分割、检测等),我们还希望标注也是相同的。另一方面,自训练是非常通用的,在附录E里,自训练可以很成功地使用OpenImages来提升COCO性能。这一结果表明自训练可以很好地匹配感兴趣任务。
局限性。 目前的自训练技术仍存在局限性。特别的,自训练相比对预训练模型微调,需要更多的计算。预训练模型可以使模型训练加快1.3倍到8倍,倍数因预训练模型质量、数据增扩强度和数据集规模而异。当数据集规模很小时,例如PASCAL分割,是需要好的预训练模型的。
自训练的可扩展性、通用性和灵活性。 我们的实验结果突出了自训练的显著优势。首先,在灵活性上,在每一种设置中,自训练都是成功的:数据集规模小、数据集规模大、低强度数据增扩、高强度数据增扩。自训练对不同的网络结构(ResNet、EfficientNet、SpineNet、FPN、NAS-FPN)、数据源(ImageNet、OID、PASCAL、COCO)和任务(物体检测、分割)都是有效的。第二,在普遍性上(笔者:generality,看来前面译成泛化性或通用性都是错的),无论预训练是成功还是失败,自训练总是成功的。第三,在可扩展性方面,即使我们有很多的带标签数据,有很强的模型,自训练仍能带来提升。机器学习方法的一个惨痛教训是,当我们有更多的带标签数据、更多的计算或者更好的监督训练配方(recipes)时,大多数方法会失效(失去价值),但是自训练不会。
附录A:其他相关工作
自训练与伪标签方法[60-63]、一致性训练(consistency training)[64-82]相关。这些工作和我们的工作有很多不同之处。首先,自训练不用于一致性训练,自训练有2个模型,教师模型和学生模型,而一致性训练只有1个模型。其次,先前的工作都是关注图像分类,而我们的工作主要是研究物体检测和分割。最后,先前的工作没有研究在现代数据增扩下自训练和预训练间的交互作用。
附录B:损失归一化分析(Loss Normalization Analysis)
我们发现标准的自训练损失会导致训练得非常不稳定,这是由于总的损失随着的变化而急剧变化。(笔者:换句话说,损失函数对这个超参数太敏感。)因此我们设计了一种损失归一化方法,使变化时自训练过程稳定:
其中,是人工标注数据的损失,是伪标签数据的损失,是人工标注数据在训练过程的滑动平均,是伪标签数据在训练过程的滑动平均。
图2所示是当我们改变数据增扩的强度、训练迭代次数、学习率和时,损失归一化的性能。这些实验是RetinaNet(检测头)+ResNet-101(主干)在COCO数据集上做物体检测。ImageNet是自训练用到的额外数据。可以看到,在各种设置下,损失归一化都表现得更好,而且,更重要的是,当设置为一个比较大的值时,损失归一化能够避免训练的不稳定。
图2 ×表示训练的时候出现NaNs,导致未能完成训练在不同强度的数据增扩、迭代次数和学习率设置中,我们发现,损失归一化比基线要平均高出0.4AP。而且,重要的一点是,在我们使用最高强度的Augment-S4时,损失归一化比基线高出1.3AP。
最近的自训练工作[10,82]通常将他们所有实验中的参数取值为1。在我们的很多实验中,我们发现设置为1是次优的,并且最优值会随着迭代次数和数据增扩强度的变化而变化。表9所示是的最优取值随着迭代次数和数据增扩强度的变化而变化:的最优取值会随着数据增扩强度增大而减小;的最优取值会随着迭代次数的增大而增大。
表9 在每种强度的数据增扩和迭代次数的设置下,alpha的实验设置为:0.25、0.5、1.0、2.0、3.0、4.0C 关于数据增扩、有监督数据集规模和预训练模型质量的进一步研究
我们在前面4.1节的分析基础上进行了扩展,并展示了使用不同规模的COCO标签数据、使用不同强度的数据增扩是如何与预训练模型质量相互作用的。图3所示是这些控制变量的相互作用。我们再次观察到这3点现象:1)高强度的数据增扩会降低预训练的价值;2)当使用更高强度的数据增扩时,预训练反而有害;3)使用更多的有标签数据会降低预训练的价值。在所有的设置中,我们还发现,更好质量的预训练模型 ImageNet++ checkpoint,总是要比ImageNet checkpoint表现得更好。有趣的是,在所有4种强度的数据增扩里的3种,当预训练有损害的时候,预训练模型的质量越好,损害程度就越小。
图3我们研究了预训练checkpoint质量和数据增扩强度对很小规模数据集,也就是PASCAL VOC 2012的影响。表10的结果表明,对于只有1.5k张图像的PASCAL训练集,预训练质量是非常重要的,并且会显著提升性能。我们观察到,随着数据增扩的强度的增加,checkpoint质量带来的性能提升会下降。此外,ImageNet checkpoint的性能再一次与PASCAL VOC上的性能相关。
表10D 在COCO数据集上ResNet101的自训练表现
本文中在COCO上的实验是以RetinaNet为框架、以EfficientNet-B7和SpineNet为主干的。自训练也能很好地用于其它的主干,比如ResNet-101[83]。结果如表11所示。再一次,自训练在所有强度的数据增扩设置上都带来很大的提升。
表11 监督模型使用的是ResNet101,图像尺寸640×640,训练规程按照[14]。ImageNet是自训练的额外数据源。E 自训练中无标签数据源的影响
最近实验提出的一个重要问题是,改变额外数据源会如何影响到自训练性能。在我们的分析中,我们用的是ImageNet,这是个图像分类数据集,包含的主要是iconic图像(iconic,图符、肖像等含义,此处应该是指一张图像中会有个“主角”物体占在图像的主要位置)。其图像内容和COCO、PASCAL和Open Images非常不同,后三者包含更多的是non-iconic图像。Iconic图像通常只有一个以concial视角的物体,而non-iconic图像会通过自然视角捕获场景中的多个物体[52]。表12研究了将额外数据从ImageNet改为 Open Images[54]会如何影响自训练的性能。可以看到,在不同强度的数据增扩强度下,在COCO物体检测中,将自训练的额外数据从ImageNet改为 Open Images最多可以带来0.6AP的提升。有趣的是,在[41]中,在Open Images上预训练不能帮助COCO检测,但我们确实看到用Open Images自训练能带来比ImageNet更多的提升。
表12 所有模型使用EfficientNet-B7 主干,随机初始化。我们还研究了更改额外数据集源对PASCAL VOC 2012的影响。在表13中,我们观察到将额外数据源从ImageNet更改为COCO可以提高在所有强度的数据增扩设置下的性能。表现最佳的自训练额外数据源是PASCAL的补充集,其是PASCAL任务的域内任务。PASCAL的补充集只有9k张图像,但是比具有240k张图像的COCO数据集带来更多的提升。
表13 所有模型使用EfficientNet-B7主干,使用 ImageNet++预训练初始化。F 自训练中伪标签的展示
PASCAL VOC数据集: 原始的PASCAL VOC 2012数据集的训练集包含1464张带标签的数据。[16]提供了额外的标注图像,使得训练集+补充集(train+aug)总共有10582张图像。很多先前的工作是用train+aug来训练。然而,我们发现,使用补充集进行高强度的数据增扩实际上会损害性能(见表8)。图4是一些在补充集上选择的图片,我们发现补充集的标注质量要比训练集低。例如,有些图像的标注没有涵盖图像中所有物体,或者分割掩膜不够精细。图4的第3列是我们的教师模型生成的伪标签,从中可以看出,伪标签的分割掩膜更精确。实验证明,使用带有伪标签的补充集比使用人工标注的补充集能带来更多的提升(见表8)。
图4 在PASCAL补充集上选择的一些伪标签比人工标签[16]更好的图片ImageNet数据集: 图5所示是教师模型在ImageNet中随机选择的14张图像上生成的分割伪标签。有趣的是,ImageNet上的有些类别不被包含在PASCAL VOC 2012的20类别中,也被预测为PASCAL VOC 2012的20类别之一。例如,锯和蜥蜴被预测为鸟。尽管伪标签有很多噪声,但它们仍然提高了学生模型的准确性(表13)。
图5 在ImageNet上随机选择的一些图片的分割伪标签