RegNet论文地址:https://arxiv.org/pdf/2003.13678.pdf
RegNet 比 RestNet 这种网络在小计算量情况下表现好
RegNet 比 EfficientNet 这种网络在大计算时情况下表现好
总结:经过空间简化后得到网络结构,能够hold住各种计算量
在这项工作中,作者提出了一个新的网络设计范例。目标是帮助提高对网络设计的理解,并发现适合不同平台(settings)的通用设计原则。文章并不是专注于设计单个网络实例,而是设计“网络设计空间”来将网络整体进行参数化。整个过程类似于经典的网络手工设计,但是提升到了设计空间的层次。利用这种方法,得到了一个由简单的、规则的网络组成的低维设计空间,称之为RegNet。RegNet参数化的核心思想非常简单:好的网络的宽度和深度可以用量化的线性函数来解释。分析了RegNet的设计空间,得出了与当前网络设计实践不匹配的有趣发现。RegNet设计空间提供了简单而快速的网络,这些网络可以很好地在各种各样的平台下工作。在可比较的训练设置和 flop 情况下,RegNet模型的性能优于流行的EfficientNet模型,同时在gpu上的速度比其快5倍。
深卷积神经网络是视觉识别的引擎。在过去的几年中,这些好的架构在许多视觉识别任务中取得了很大的进步。例如LeNet[15]、AlexNet[13]、VGG[26]和ResNet[8]。这些工作既提高了神经网络的有效性,也加深了我们对网络设计的理解。特别是,上述工作序列分别证明了卷积、网络和数据大小、深度和残差的重要性。这些工作的结果不仅是特定的网络实例,而且是可以推广并应用于许多环境的设计原则。
虽然手动网络设计带来了巨大的进步,但手动寻找优化良好的网络可能是一项挑战,特别是随着设计选择的增多。解决这一限制的一种流行方法是神经架构搜索(NAS)。给定一个网络的固定搜索空间,NAS 会自动在搜索空间内找到一个好的模型。近年来,NAS受到了广泛的关注,并取得了很好的效果[34,18,29]。
尽管NAS是有效的,但这种模式还是有局限性的。搜索的结果是根据特定环境(例如,硬件平台)调整的单个网络实例。这在某些情况下是足够的;然而,它不能使我们发现网络设计原则,加深我们的理解,并允许我们扩展到新的环境。特别地,在本文中,我们的目标是找到易于理解、构建和概括的简单模型。
在本文中,作者提出了一个新的网络设计范例,结合了人工设计和NAS的优点。并非专注于设计单个网络实例,而是设计参数化网络总体的设计空间。类似于手动设计,其目标是可解释性,并发现描述网络的一般设计原则,这些原则简单、工作良好,并能够在不同设置环境中进行泛化。与在NAS中一样,文章的目标是利用半自动化程序来帮助实现这些目标。
作者采用的一般策略是逐步设计一个比原始版本更简化的版本,同时保持或提高其质量(图1)。整个过程类似于人工设计,但是又提升到了一个网络整体设计的水平,并通过网络设计空间的分布估计来指导[21]。
这个范式重点是探索网络结构(例如,宽度、深度、组等),包括重要的标准结构 VGG[26]、ResNet[8] 和 ResNeXt[31]。从一个相对不受约束的设计空间开始,称之为AnyNet(例如,宽度和深度在各个阶段自由变化),并应用我们的 human-in-the-loop(人机回旋)方法,得到一个由简单的“规则”网络组成的低维设计空间,我们称之为RegNet。RegNet设计空间的核心很简单:宽度和深度由量化的线性函数决定。与AnyNet相比,RegNet设计空间具有模型更简单、更易于解释、优秀模型更集中的特点。
Manual network design. AlexNet[13]的引入使网络设计进入了一个蓬勃发展的研究领域。在接下来的几年中,提出了改进的网络设计;示例包括VGG[26]、Inception[27,28]、ResNet[8]、ResNeXt[31]、DenseNet[11]和MobileNet[9,25]。这些网络背后的设计过程主要是手工的,集中在发现新的设计选择,以提高精确度,例如,使用更深的模型或残差。同样,我们的目标是发现新的设计原则。实际上,我们的方法类似于手动设计,但在设计空间级别执行。
Automated network design. 近年来,网络设计过程已经从人工探索转向了更自动化的网络设计,并且通过NAS 得到了普及。NAS已被证明是一种有效的工具,可用于查找好的模型,例如[35、23、17、20、18、29]。NAS的大部分工作集中在搜索算法上,即在一个固定的、手工设计的搜索空间(我们称之为设计空间)内有效地找到最佳的网络实例。相反,我们关注的是设计新颖设计空间的范例。两者是互补的:更好的设计空间可以提高NAS搜索算法的效率,也可以通过丰富设计空间而导致更好的模型的存在。
Network scaling. 手动和半自动网络设计通常都侧重于为特定区域寻找性能最佳的网络实例(例如,与ResNet-50相当的 flops)。由于此过程的结果是单个网络实例,因此不清楚如何使该实例适应不同的平台(例如,更少的flops)。一种常见的做法是应用网络缩放规则,例如改变网络深度[8]、宽度[32]、分辨率[9]或三者一起应用[29]。相反,我们的目标是发现跨平台的通用设计原则,并允许在任何目标平台、目标域中有效地调整最佳网络。
Comparing networks. 考虑到大量可能的网络设计空间,必须使用可靠的比较度量来指导我们的设计过程。最近,[21]的作者提出了一种比较和分析从设计空间中简化得到的网络总体的方法。这个distribution-level 视角完全符合我们寻找一般设计原则的目标。因此,我们采用这种方法,并证明它可以作为一个有用的工具,为设计空间的设计过程。
Parameterization. 我们的最终量化线性参数化与之前的工作相同,例如如何设置宽度[26,7,32,11,9]。然而,有两个关键的区别。首先,我们提供了一个实证研究来证明我们所做的设计选择是正确的。第二,我们深入了解以前不了解的结构设计选择(例如,如何设置每个阶段的块数)。
我们的目标是为视觉识别设计更好的网络。我们研究模型的总体的特征,而不是在特定环境下设计或搜索单个最佳模型。我们的目标是发现适用于和改进整个模型总体的一般设计原则。这种设计原则可以提供对网络设计的观察,并且更可能推广到新的场景中(不像针对特定场景调整的单个模型)。
我们依赖于Radosavovic等人引入的网络设计空间概念[21]。设计空间是一个巨大的,包含很多模型的空间。[21]的核心观点是,可以从一个设计空间对模型进行抽样,产生一个模型分布,然后使用经典统计的工具来分析设计空间。我们注意到这与 NAS 搜索不同,架构搜索的目标是从空间中找到单个最佳模型。
在这项工作中,我们建议设计一个初始的、无约束的设计空间的逐步简化版本。我们把这个过程称为设计空间设计。设计空间设计类似于顺序的人工网络设计,但提升到了总体层次。具体来说,在我们设计过程的每个步骤中,输入是一个初始设计空间,输出是一个优化设计空间,每个设计步骤的目的是发现设计原则,从而产生更简单或性能更好的模型。
我们从设计空间的工具的开始概述。为了评估和比较设计空间,我们使用Radosavovic等人提出的工具[21],他提议通过从设计空间采样一组模型并描述由此产生的模型误差分布来量化设计空间的质量。这种方法背后的关键是,与使用搜索(手动或自动)和比较两个设计空间中的最佳模型相比,比较分布更加可靠且信息更丰富。
Fig.2 用n=500个抽样模型计算的AnyNetX设计空间的统计。左:误差经验分布函数(EDF)是我们可视化设计空间质量的基本工具。在图例中,[39.0|49.0] 分别是最小误差和平均误差(对应于曲线下的区域)。中间:网络深度d(块数)与误差的分布。右:第四阶段(w4)的块宽度分布与误差。蓝色阴影区域包含95%置信度的最佳模型(通过经验引导获得),黑色垂直线是最有可能的最佳值。
经验分布函数:
F ( x ) = 小 于 x 个 样 本 个 数 n F(x)=\frac{小于x个样本个数}{n} F(x)=n小于x个样本个数
为了得到模型的分布,我们从设计空间采样了n个模型并训练。为了提高效率,我们主要在低计算、低 epoch 的训练模式下进行。特别是,在本节中,我们使用 4 million flop(400MF)模式,并对每个采样的模型在ImageNet数据集 [3]上训练10个epoch。我们注意到,虽然我们训练了许多模型,但每次训练都很快:在400MF下给100个模型训练10个 epoch,与在4GF下把单个ResNet-50[8]模型训练100个epoch的时间相当。
按照惯例,我们用flops来表示 multiply-adds。此外,我们使用MF和GF分别表示 1 0 6 10^6 106和 1 0 9 10^9 109个flops。
flops:浮点计算量,衡量算法/模型的复杂度
与文献[21]一样,我们分析设计空间质量的主要工具是误差经验分布函数(EDF)。n个模型的误差EDF和误差ei由以下公式给出:
F ( e ) F(e) F(e) 是error 小于 e e e 的模型百分比。
总结如下:
接下来介绍我们初始的设计空间:AnyNet设计空间。我们的重点是探索神经网络的结构,假设标准的、固定的网络块(例如,剩余瓶颈块)。
在本文术语中:
网络的结构:
网络的结构决定了计算、参数和内存在整个网络计算图中的分布,是决定其准确性和效率的关键。
在我们的 AnyNet 设计空间中,网络的基本设计是简单的。
给定一个输入图像,一个网络由一个简单的 stem、执行大部分计算的网络主体和一个预测输出类的最终网络主体组成,如图3a所示。我们将 stem 和 head 保持固定并尽可能简单,而将重点放在确定网络计算和精度。
总的来说,对于每个 stage i i i,自由度包括 block 的数量 b i b_i bi、block width w i w_i wi,和其他的 block 参数。虽然总体结构简单,但是AnyNet设计空间中可能的网络总数是巨大的。
我们的大多数实验使用标准的残差瓶颈块和组卷积[31],如图4所示。我们将其称为X块,并将其上构建的 AnyNet 设计空间称为 AnyNetX(我们在第3.4节中探索其他块)。虽然X块是相当初级的,但我们表明,当网络结构优化时,它可以出奇地有效。
AnyNetX设计空间有16个自由度,因为每个网络由4个 stage 组成,每个 stage i有4个参数:块数di、块宽度wi、瓶颈比率 bi 和组宽度 gi。我们修正了输入分辨率r=224,除非另有说明。为了得到有效的模型,我们使用 log-uniform 采样,di≤16,wi≤1024(被8整除后得到128),bi∈{1,2,4},gi∈{1,2,32}(稍后测试这些范围)。我们重复采样,直到在我们的目标复杂度范围(360MF到400MF)中获得n=500个模型,并对每个模型进行10个阶段的训练。图2显示了AnyNetX的5个基本统计数据。
AnyNetX设计空间中有 ( 16 ⋅ 128 ⋅ 3 ⋅ 6 ) 4 ≈ 1 0 18 (16·128·3·6)4≈10^{18} (16⋅128⋅3⋅6)4≈1018种可能的模型配置。与其从这些∼1018配置中寻找单一的最佳模型,不如探索是否有通用的设计原则可以帮助我们理解和完善这个设计空间。为此,我们应用我们的设计空间的方法。在这一方法的每一步中,我们的目标是:
A:
为了清楚起见,我们将最初的无约束AnyNetX设计空间称为AnyNetXA。
B:
我们首先使得AnyNetXA设计空间的所有 stage i 共享瓶颈比率 bi=b,并将得到的设计空间称为 AnyNetXB。和以前一样,我们在相同的设置下对来自 AnyNetXB 的500个模型进行采样和训练。图5(左)所示的 AnyNetXA 和AnyNetXB的 EDF 在平均和最佳情况下几乎相同。这表明耦合bi时精度没有损失。除了更简单之外,AnyNetXB更易于分析,如图5(右)所示。
C:
我们的第二个改进步骤紧跟第一步。从AnyNetXB开始,我们还为所有阶段使用共享组宽度 gi=g 来获得AnyNetXC。和以前一样,EDF几乎没有变化,见图5(中间)。总的来说,AnyNetXC 比 AnyNetXA 少了6个自由度,并将设计空间大小减少了近四个数量级。有趣的是,我们发现 g>1 是最好的(未显示);我们在第4节中对此进行了更详细的分析。
D:
接下来,我们检查图6中来自AnyNetXC的好网络和坏网络的典型网络结构。一种模式出现了:好的网络有越来越多的宽度。我们测试了wi+1≥wi的设计原理,并将具有此约束的设计空间称为AnyNetXD。在图7(左)中,我们看到这大大改善了EDF。我们将很快回到检查控制宽度的其他选项。
在对许多模型(未显示)进行进一步检查后,我们观察到另一个有趣的趋势。除了stage 宽度会随着i的增加而增加,stage 深度di也会随着 i 的增加而增加也会得到好的模型(最后一个stage不需要)。尽管如此,我们测试了一个设计空间变量AnyNetXE,其di+1≥diin如图7(右)所示,并看到它也改善了结果。最后,我们注意到在 wi 和 gi 分别可以给设计空间减少 4 个约束!,并从AnyNetXA中累积减少 O ( 1 0 7 ) O(10^7) O(107)。
为了进一步了解模型结构,我们在一个图中展示了AnyNetXE中最好的20个模型,见图8(左上角)。对于每个模型,我们绘制每个块j到网络深度d的每个块宽度wjof(我们分别使用i和j索引阶段和块)。关于我们的模型可视化的参考,请参见图6。
虽然个别模型(灰色曲线)存在显著差异,但总体上呈现一种模式。特别是,在同一图中(0≤j≤20时),我们绘制了曲线 wj=48·(j+1)(实心黑色曲线,请注意y轴是对数的)。值得注意的是,这种微不足道的线性拟合似乎解释了顶级模型中网络宽度增长的总体趋势。但是,请注意,这种线性拟合为每个块指定不同的宽度 wj,而每个模型的 width 随block变化是分段常数函数,也就是这种线性拟合和每个模型的变化情况不一样,所以作者探究了能否用同样的线性函数来描述单个模型的变化。
为了查看类似的模式是否适用于单个模型,我们需要一种策略将一条直线量化为一个分段常数函数。根据我们对AnyNetXD 和 AnyNetXE 的观察,我们提出了以下方法。首先,我们引入块宽度的线性参数化:
此参数化有三个参数:深度d、初始宽度w0>0和斜率wa>0,并为每个块j
这是一条线性函数,为了把函数分层,引入了附加参数 w m > 0 w_m>0 wm>0 来控制分层:
首先,从 公式(2)中给定 u j u_j uj,给每个 block j 计算一个 s j s_j sj,如下:
之后,为了分层 u j u_j uj,把 s j s_j sj 进行了简化,通过下面的公式量化每个 block 的 widths w j w_j wj:
我们可以通过简单地计算具有恒定宽度的块的数目,将每个 block 的 width w j w_j wj 转换为每个 stage i 的宽度:
w i = w 0 ⋅ w m i w_i=w_0·w_m^i wi=w0⋅wmi
块的数目
d i = ∑ j 1 [ s j = i ] d_i=\sum_j1[s_j=i] di=j∑1[sj=i]
当只考虑四级网络时,我们忽略了导致不同级数的参数组合。
我们通过拟合来自AnyNetX的模型来测试这个参数化。特别是,在给定模型的情况下,我们通过将d设置为网络深度,并在w0、wa和wm上执行网格搜索来计算拟合度,以最小化每个块宽度的预测到观测的平均对数比(用efit表示)。来自AnyNetXE的两个顶级网络的结果如图8所示(右上角)。量化线性拟合(虚线曲线)是这些最佳模型(实体曲线)的良好拟合。
接下来,我们在图8(底部)中绘制AnyNetXC到AnyNetXE中每个网络的拟合误差efit 和 error的分布情况。首先,我们注意到每个设计空间中最好的模型都具有良好的线性拟合。实际上,经验引导给出了一个很窄的efit 接近0的范围,它可能包含每个设计空间中最好的模型。其次,我们注意到,平均而言,从AnyNetXC到AnyNetXE,拟合误差越来越小。
为了进一步验证线性参数化,我们设计了一个只包含具有这种线性结构的模型的设计空间。特别地,我们通过6个参数来指定网络结构:d、w0、wa、wm(以及b、g)。给定这些,我们通过Eqn (2-4)生成块宽度和深度。
(我们将生成的设计空间称为RegNet,因为它只包含简单的常规模型。我们像以前一样对d<64、w0、wa<256、1.5≤wm≤3和b和g进行采样(范围根据 AnyNetXE 的 efit 设置)。
RegNetX的错误EDF如图9(左)所示。在保持最佳模型的同时,RegNetX中的模型具有比AnyNetX更好的平均误差。在图9(中间)中,我们测试了两个进一步的简化。首先,使用wm=2(级间宽度加倍)稍微提高了EDF,但我们注意到使用wm≥2性能更好(稍后显示)。其次,我们测试设置w0=wa,进一步将线性参数化简化为uj=wa·(j+1)。有趣的是,这样的表现更好。然而,为了保持模型的多样性,我们不施加任何限制。最后,在图9(右图)中,我们显示了RegNetX的随机搜索效率要高得多;仅搜索32个随机模型可能会产生好的模型。
表1显示了设计空间大小的总结(对于RegNet,我们通过量化其连续参数来估计大小)。在RegNetX的设计中,我们将原AnyNetX设计空间的维数从16降到6,空间参数量降低接近10个数量级。但是,我们注意到,RegNet仍然包含很好的模型多样性,可以针对各种设置进行调整。
接下来,我们将进一步分析RegNetX设计空间,并回顾常见的深度网络设计选择。我们的分析得出了与流行做法不符的令人惊讶的见解,这使我们能够通过简单的模型获得良好的结果。由于RegNetX设计空间有大量好的模型,因此对于以下结果,我们切换到抽样较少的模型(100个),但以0.1的学习率对其进行更长时间(25个epoch)的训练(见附录)。我们这样做是为了观察网络行为中更细粒度的趋势。
RegNet trends:
我们在图11中显示了不同 flop regimes 的RegNetX参数的变化趋势。值得注意的是,最佳模型的深度在各个计算量级(左上角)都是稳定的,最佳深度为20个block(60层)。这与在更高的 flops 下使用更深层模型的常见做法形成对比。我们还观察到,最佳模型使用的瓶颈比率 b b b 为1.0(上中),这有效地消除了瓶颈(在实践中常用)。接下来,我们观察到,好模型的 width 的乘数 w m w_m wm 为2.5(右上角),与流行的跨 stage 宽度倍增的方法类似,但不完全相同。其余参数(g,wa,w0)随着复杂度的增加而增加(底部)。
Complexity analysis:
除了计算量和最优参数之外,我们还分析网络 activations,我们将其定义为所有conv层的输出张量的大小(我们在图12左上角列出了常见conv运算符的复杂性度量)。虽然不是一种常见的网络复杂性度量,但 activate 会严重影响硬件加速器(例如,GPU、TPU)上的运行时,请参见图12(顶部)。在图12(底部)中,我们观察到对于总体中最好的模型,激活随触发器平方根的增加而增加,参数线性增加,运行时最好使用线性和平方根项建模,因为它依赖于 flops 和 activations。
RegNetX constrained:
利用这些发现,我们改进了RegNetX设计空间。首先,根据图11(顶部),我们设置b=1,d≤40,wm≥2。其次,我们限制参数和激活,如图12(底部)所示。这产生了快速,低参数,低内存模型而不影响准确性。在图13中,我们使用这些约束测试RegNetX,并观察到约束版本在所有的flop机制中都是优越的。我们在第5章中使用此版本,并进一步将深度限制为12≤d≤28(另见附录d)。
Alternate design choices: 现代移动网络通常采用[25]中提出的倒瓶颈(b<1)和depthwise conv[1](g=1)。在图14(左)中,我们观察到倒转瓶颈稍微降低了EDF,并且相对于b=1和g≥1,depthwise conv表现更差(进一步分析见附录)。接下来,受[29]发现缩放输入图像分辨率有帮助的激励,我们在图14(中间)中测试了不同的分辨率。与文献[29]相反,我们发现对于RegNetX,即使在较高的 flops 下,224×224的固定分辨率也是最好的。
SE:
最后,我们使用流行的 Squeeze-and-Excitation(SE)op[10]评估RegNetX(我们将X+SE缩写为Y,并将得到的设计空间称为RegNetY)。在图14(右)中,我们看到RegNetY获得了不错的收益。
最近在网络设计方面的大部分工作都集中在移动领域(∼600MF)。在表2中,我们将600MF的REGNET模型与现有的移动网络进行了比较。我们观察到,考虑到通过手动设计[9、25、19]和NAS[35、23、17、18]找到更好的移动网络的大量工作,REGNETS在这个机制中出奇地有效。
我们的REGNET模型使用基本的100 epoch,除了权值衰减之外没有正则化,而大多数移动网络使用具有各种增强的更长的epoch,例如深度监视[16]、截断[4]、DropPath[14]、自动增强[2]等等。因此,我们希望我们在短期的训练计划中取得的优异成绩可以作为未来工作的一个简单基准。
我们将比较的重点放在EFFICIENTNET[29]上,它代表了最新的技术水平,并给出了使用NAS和一个模型缩放规则在复杂机制中的组合所取得的令人印象深刻的成果。
为了进行直接比较,并分离仅由于网络体系结构的改进而获得的收益,我们选择复制精确的效率网模型,但使用我们的标准训练设置,具有100个历元的时间表,除了权重衰减之外没有正则化(更长的时间表和更强的正则化的影响如表7所示)。我们只优化lr和wd,见附录中的图22。这是与REGNET相同的设置,并支持公平比较。
结果如图18和表4所示。在低计算量时,EFFICIENTNET优于REGNETY。在中计算量中,REGNETY的性能优于EFFICIENTNET,在高计算量中,REGNETX和REGNETY的性能都更好。我们还观察到,对于EFFICIENTNET,activation 与 flops成线性比例(由于分辨率和深度的缩放),而与REGNETs的flops平方根的激活比例相比。这会导致GPU训练和推理时间变慢,从而提高效率。REGNETX-8000比EFFICIENTNET-B5快5倍,且误差较小