Abstract

本文提出了宽度-分辨率相互学习的方法(MutualNet),根据动态的资源约束来训练网络,实现运行时自适应的准确率-效率的平衡。该方法利用不同的宽度和输入分辨率,训练了多个子网络,每个网络都互相学习多尺度的特征表示。相对于目前SOTA的自适应网络 US-Net,本文方法在ImageNet上取得了更高的top-1准确率,要比最优的复合尺度的MobileNet和EfficientNet 高1.5%1.5\%。在COCO目标检测、实例分割和迁移学习任务上,该方法也进行了验证。MutualNet的训练策略可以提升单个网络的性能,在效率(GPU搜索时间:1500 vs. 0)和准确率(ImageNet: 77.6%77.6\% vs. 78.6%78.6\%)方面都显著超过了AutoAugmentation。代码位于:https://github.com/taoyang1122/MutualNet

1. Introduction

深度神经网络在多项感知任务上都很成功。但是,深度网络通常需要大量的计算资源,很难部署到移动设备和嵌入式平台上。这就促使人们去研究,如何设计出更高效的卷积模块或裁剪掉不重要的网络连接,来降低神经网络中的冗余。但是,这些网络都忽略了一个事实,计算成本由网络的大小和输入的大小决定。只想着降低网络的大小是没法实现最优的准确率-效率平衡的。EfficientNet 已经认识到,平衡网络深度、宽度、分辨率的重要性。但是它只考虑了网络的大小和输入的大小。作者对不同的配置进行了网格搜索,选择最佳的配置,作者认为网络的大小和输入大小应该结合不同配置信息一起来考虑。

MutualNet: Adaptive ConvNet via Mutual Learning from Network Width and Resolution论文学习

MutualNet: Adaptive ConvNet via Mutual Learning from Network Width and Resolution论文学习

另一个妨碍网络实际部署的问题就是,在不同的应用平台上计算资源是变化的,而传统网络只能运行在特定的资源约束(如FLOPs)下。为了解决这个问题,有人提出了SlimNets,训练单个模型来满足运行时变动的资源预算。他们只降低了网络的宽度,来满足较低的资源预算。结果是,随着计算资源的降低,模型的表现会大幅度下降。这里,作者提供了一个具体例子,证明输入分辨率和网络宽度平衡的重要性,从而实现更优的准确率-效率平衡。为了在MobileNetV1主干网络上满足从13到569 MFLOPs 的动态资源要求,US-Net 在面对输入是224×224224\times 224的图片时,所需的网络宽度在[0.05,1.0]×[0.05, 1.0]\times,而这个要求也可以在{224,192,160,128}\{224,192,160,128\}的范围内调节输入分辨率,而网络宽度在[0.25,1.0]×[0.25,1.0]\times来得到满足。作者将第二个模型叫做US-Net+。如图1所示,推理时我们将不同的分辨率和网络宽度结合,可以实现更优的准确率-效率平衡。

MutualNet: Adaptive ConvNet via Mutual Learning from Network Width and Resolution论文学习

受上述发现启发,作者提出了一个相互学习的方法,将网络宽度和输入分辨率融入到一个统一的学习框架内。如图2所示,该框架的输入是不同输入分辨率的子网络。由于子网络之间共享权重,每个子网络都可以学习其它子网络的知识,从而使它们能够获取网络大小和输入分辨率的多尺度特征表示。表1提供了本文框架和其它方法的比较。总之,本文贡献如下:

  • 强调了对于高效率网络设计,输入分辨率的重要性。之前的工作要么忽略了,要么脱离了网络结构而单独来看待它。相反,作者在一个统一的相互学习的框架中加入了网络宽度和输入分辨率信息,学习网络 MutualNet,它可以在准确率-效率之间实现自适应的平衡。
  • 作者进行了大量的实验来证明MutualNet的有效性。在不同的资源约束下,在不同的网络结构、数据集、任务上,它都显著超越了单独训练的网络和其它US-Net。本文应该是第一个在目标检测和实例分割任务上对任意约束自适应网络做benchmark的。
  • 作者进行了充分的研究,分析相互学习方式。作者进一步证明了该框架可以作为plut-and-play策略,提升单个网络的性能,它超越了流行的性能提升方法,如数据增广, SENet 和知识蒸馏等。
  • 该框架是一个通用的训练机制,与模型无关。它可以用在任何的网络上,而无需调整其结构。这就使得它可以和SOTA的技巧兼容(如NAS和AutoAugmentation)。

2. Related Work

轻量级网络。最近人们对设计轻量级网络给予了很多兴趣。MobileNet 将标准的3×33\times 3卷积拆分为3×33\times 3深度卷积和1×11\times 1 pointwise卷积,将计算成本降低了数倍。ShuffleNet 将1×11\times 1卷积分割为分组卷积,进一步提升计算效率。MobileNet V2 为低复杂度网络,提出了倒转残差和线性模块。ShiftNet 引入了 zero-flop shift操作,降低计算成本。[13,32,34] 采用了神经结构搜索方法来搜索高效率模型。但是,它们没有一个考虑到了在现实应用中,运行时不断变化的资源约束。为了满足不同的资源预算,这些方法需要部署多个模型,在它们中切换,扩展性很差。

自适应神经网络。为了满足现实应用中的动态约束,MSDNet 提出了一个多尺度、粗糙的方式来改良DenseNet框架。它有多个分类器,作出预测来满足不同的资源要求。NestedNet 使用一个nested稀疏网络,由多个层级构成,来进行nested学习。S-Net 引入了一个4-width框架,在单个网络中加入了不同的复杂度,为了最小化训练开支,提出了可切换的批归一化操作。[27] 使用知识蒸馏来训练一个多-出口的网络。但是,这些方法都只在有限个数的约束条件下执行。US-Net 可以迅速地调节运行时网络宽度,满足任意的准确率-效率平衡。但是随着计算资源的降低,模型表现就显著降低了。[3] 提出了一个渐进地收缩方法,从一个训练地很好的大模型中微调出一个子模型,但是该训练过程很繁琐且昂贵。

多尺度特征学习。在不同的任务上人们已经研究了多尺度特征的效果。FPN将金字塔特征融合起来,用于目标检测和实例分割。[17] 提出了一个多网格卷积,将信息传入到尺度空间。HRNet 设计了一个多分支结构,在不同分辨率之间交换信息。但是,这些工作都要用到多分支融合结构,该结构通常不适合并行。本文方法没有修改网络结构,学到的多尺度特征不仅来源于图像尺度,也来源于网络尺度。

3. Methodology

3.1 Preliminary

Sandwich Rule。US-Net 训练了一个可以在任意资源限制下执行的网络。解决方案就是,随机选取多个网络宽度来训练,积累其梯度来优化。但是,子网络的表现受到最小宽度(0.25×0.25\times)和最大宽度(1.0×1.0\times)约束。因此在每个iteration中,引入了sandwich rule来选取最小和最大的宽度,以及2个随机的宽度。

Inplace Distillation。知识蒸馏将知识从教师网络迁移到学生网络上。依据sandwich rule,由于在每个iteration中都选取一个最大的网络,很自然地就用这个最大的网络学习ground truth 标签,作为教师来指导子网络学习。这要比用ground truth标签来训练所有的子网络的效果好。

Post-statistics of BN。US-Net 提出,每个子网络都需要其自己的BN统计信息(均值和方差),但是保存所有子网络的统计信息是不充分的。因此在训练完成后,US-Net 会针对特定的子网络收集其BN信息。实验结果显示,要想获得准确的BN数据,2000个样本就足够了。

3.2 Rethinking Efficient Network Design

标准卷积的计算成本是C1×C2×K×K×H×WC_1 \times C_2 \times K\times K\times H\times W,其中C1,C2C_1, C_2是输入和输出的通道数,KK是卷积核大小,H,WH,W分别是输出特征图的大小。之前的工作大多都关注在降低C1×C2C_1\times C_2。最常用的分组卷积将标准卷积拆分为小组,将计算量降低为C1×(C2/g)×K×K×H×WC_1 \times (C_2/g) \times K\times K\times H\times W,其中gg是分组的个数。gg越大,计算量就越低,但是内存进入成本(MAC)就越高,使得网络在实际应用中不够高效。

在本文方法中,作者将注意力放到了降低H×WH\times W上,降低输入分辨率。首先,如图1所示,平衡网络宽度和分辨率可以取得更好的准确率-效率平衡。其次,降采样输入分辨率并不会损害模型表现。它有时甚至可以提升表现。[6] 指出,较低分辨率的图像可能产生更优的检测准确率,因为没有很多冗余的细节。第三,不同分辨率包含着不同的信息。较低分辨率的图像可能包含更多全局结构,而较高分辨率可能包含更多细粒度的规则。从不同尺度的图像和特征中学习多尺度表示,被证明是有效的。但是这些方法都要用到多分支结构,这对并行并不友好。受这些观察启发,作者提出了一个相互学习的框架,同时考虑网络大小和输入分辨率,实现网络准确率-效率的平衡。

3.3 Mutual Learning Framework

**Sandwich Rule and Mutual Learning.**如3.2节讨论的,不同分辨率包含不同的信息。作者想利用该特性,学到鲁棒的特征表示和更优的宽度-分辨率平衡。US-Net里的sandwich rule 可以看作为相互学习的一个机制,协作学习一组网络。由于子网络之间共享权重,协同优化,它们的知识可以互相迁移。较大的网络能够利用较小网络的特征。同样,较小网络也可以受益于较大网络的特征。因此,作者给各子网络输入不同的分辨率输入。通过共享知识,每个子网络都可以获取多尺度表示。

Model Training. 作者在图2中提供了一个例子,来介绍该框架。作者训练了一个网络,其宽度范围从0.25×0.25\times1.0×1.0\times。作者首先按照sandwich rule选择了2个子网络,即最小的(0.25×)(0.25\times),最大的(1.0×)(1.0\times),和2个随机宽度比值的α1,α2(0.25,1)\alpha_1, \alpha_2 \in (0.25,1)。然后,与传统的用224×224224\times 224作为输入的ImageNet训练不同,作者将输入图像缩放到{224,196,160,128}\{224,196,160,128\},将它们输入进不同的子网络中。作者将子网络的权重表示为W0:wW_{0:w},其中w(0,1]w\in(0,1]是子网络的宽度,0:w0:w意思是子网络会采用原网络每一层权重的w×100%w\times 100\%IR=rI_{R=r}代表一个r×rr\times r输入图片。然后N(W0:w,IR=r)N(W_{0:w}, I_{R=r})表示子网络的输出,宽度是ww,分辨率是r×rr\times r。对于最大的子网络(即图2中的原网络),作者总是用最高的分辨率输入和ground truth标签来训练它。原网络的损失是:

lossfull=CrossEntropy(N(W0:1,IR=224),y)loss_{full} = CrossEntropy(N(W_{0:1}, I_{R=224}), y)

对于其它的子网络,作者随机从{224,196,160,128}\{224,196,160,128\}中选择一个输入分辨率,用原网络的输出来训练它。第ii个子网络的损失是:

losssubi=KLDiv(N(W0:wi,IR=ri),N(W0:1,IR=224))loss_{sub_i} = KLDiv(N(W_{0:w_i}, I_{R=r_i}), N(W_{0:1}, I_{R=224}))

其中KLDiv是 Kullback-Leibler散度。原网络和子网络的总的损失是:

loss=lossfull+i=13losssubiloss = loss_{full} + \sum_{i=1}^3 loss_{sub_i}

用最高分辨率来训练原网络的原因是,最高分辨率包含着更多的细节信息。同样,原网络也具有最强的学习能力,获取图像数据的判别信息。

Mutual learning from width and resolution. 这一部分,作者解释了为何该框架能够从不同的宽度和分辨率中相互学习。为了展示简单些,作者只考虑了2个网络宽度,0.4×,0.8×0.4\times, 0.8\times,2个分辨率128,192128, 192。如图3所示,0.4×0.4\times的子网络选择输入分辨率为128,而0.8×0.8\times的子网络选择输入分辨率为192。然后,作者将0.4×0.4\times的子网络定义为lW0:0.4,IR=128W0:0.4\frac{\partial l_{W_{0:0.4}, I_{R=128}}}{\partial W_{0:0.4}},将0.8×0.8\times的子网络定义为lW0:0.8,IR=192W0:0.8\frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.8}}。由于0.8×0.8\times的子网络与0.4×0.4\times的子网络共享权重,我们可以将它的梯度拆分为:

lW0:0.8,IR=192W0:0.8=lW0:0.8,IR=192W0:0.4lW0:0.8,IR=192W0.4:0.8\frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.8}} = \frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.4}} \oplus \frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0.4:0.8}}

其中\oplus是向量concat操作。因为这2个子网络的梯度在训练时会积累起来,总的梯度计算如下:

LW=lW0:0.4,IR=128W0:0.4+lW0:0.8,IR=192W0:0.8=lW0:0.4,IR=128W0:0.4+(lW0:0.8,IR=192W0:0.4lW0:0.8,IR=192W0.4:0.8)=lW0:0.4,IR=128+lW0:0.8,IR=192W0:0.4lW0:0.8,IR=192W0.4:0.8\frac{\partial L}{\partial W} = \frac{\partial l_{W_{0:0.4}, I_{R=128}}}{\partial W_{0:0.4}} + \frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.8}} = \frac{\partial l_{W_{0:0.4}, I_{R=128}}}{\partial W_{0:0.4}} + (\frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.4}} \oplus \frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0.4:0.8}}) = \frac{\partial l_{W_{0:0.4}, I_{R=128}} + \partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.4}} \oplus \frac{\partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0.4:0.8}}

因此,0.4×0.4\times的子网络的梯度就是lW0:0.4,IR=128+lW0:0.8,IR=192W0:0.4\frac{\partial l_{W_{0:0.4}, I_{R=128}} + \partial l_{W_{0:0.8}, I_{R=192}}}{\partial W_{0:0.4}},由2部分组成。第一部分来自于它自己(0:0.4×)(0:0.4\times),分辨率是128。第二部分来自于0.8×0.8\times子网络(即0:0.4×0:0.4\times部分),分辨率是192。因此,子网络能够从不同的输入分辨率和网络尺度中获取多尺度特征表示。因为网络宽度的随机选取,该框架的每个子网络都可以学习多尺度特征表示。

模型推理。训练好的模型可以在不同的宽度-分辨率配置上执行。目的是在给定资源下找到最佳的配置。一个简单的实现方式就是query table。特别地,作者用step-size 0.05×0.05\times 来从0.25×0.25\times1.0×1.0\times中选取网络的宽度,从{224,192,160,128}\{224,192,160,128\}中选择分辨率。作者在验证集上测试了所有的宽度-分辨率配置,根据约束条件(FLOPs或延迟)选择最佳的一个。因为无需重复训练,整个流程只要训练一次。

4. Experiments

Pls read paper for more details.

相关文章:

  • 2022-12-23
  • 2021-07-27
  • 2022-12-23
  • 2021-08-29
  • 2022-01-20
  • 2021-09-04
  • 2021-05-30
  • 2021-10-06
猜你喜欢
  • 2021-10-13
  • 2022-12-23
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
  • 2021-04-21
  • 2021-07-29
相关资源
相似解决方案