标题&作者团队
paper: https://arxiv.org/abs/2105.01883
code: https://github.com/DingXiaoH/RepMLP(核心code已开源)
本文是清华大学&旷视科技在结构重参数领域继ACNet、RepVGG、DBB之后又一突破:RepMLP,它将重参数卷积与全连接层进行了巧妙地衔接,同时利用了全连接层的全局建模、位置感知特性与卷积的局部结构提取能力。在ImageNet分类、人脸识别以及语义分割等任务(无论是否具有平移不变性)上均能涨点。此外,相比标准卷积,RepMLP的一个优势:在大幅增加参数的同时不会造成推理速度的显著降低。比如,从RepMLP-Res50-g8/16到RepMLP-Res50-g4/8,参数量提升47%,但FLOPs仅提升3.6%,推理速度仅下降2.2%。
Abstract
本文提出一种多层感知器风格的神经网络构建模块RepMLP用于图像识别,它有一系列的全连接层构成。相比卷积层,全连接层更为高效,可以进行更好的长期依赖与位置模式建模,但在局部结构提取方面较差,因此通常不太适合于图像识别。
本文提出一种结构重参数技术,它为全连接层添加了局部先验信息以使其可以进行强有力的图像识别。具体来说:在训练阶段,我们在RepMLP内部构建了卷积层,而在推理阶段,我们将这些卷积层合并到全连接层内。
在CIFAR数据集上,简简单单的MLP模型即可取得与CNN非常接近的性能。通过将RepMLP插入到现有CNN中,我们在ImageNet数据集上提升ResNets模型精度达1.8%,在人脸识别任务上提升2.9%,在Cityscapes提升2.3%mIoU精度且具有更低的FLOPs。
该发现说明:全连接层的全局表达、位置感知能力与卷积的局部结构提取能力的组合能够以更快的速度在平移不变任务(比如语义分割)、图像对齐 位置模式相关任务(比如人脸识别)上的性能。
本文主要贡献包含以下几点:
- 提出利用全连接层的全局建模、位置感知能力,并为其插上局部先验的翅膀,使其适用于图像识别任务;
- 提出一种简单的、平台不可知的、可微分算法用于将并行卷积、BN合并到全连接层中,使其具有局部先验且不造成任何推理耗时增加;
- 提出一种高效模块RepMLP,并在多个视觉任务上证实了其有效性。
RepMLP
训练阶段的RepMLP(见下图)由三部分构成:Global Perceptron、Partition Perceptron、Local Perceptron。接下来,我们将针对所提RepMLP进行详细介绍,同时表明如何如何将训练阶段的RepMLP转换为推理阶段的全连接层。
Formulation
我们假设特征图表示为
,我们采用F和W表示卷积与全连接层的核参数。为简单起见,本文采用了pytroch风格的数据排布与伪代码风格,比如
卷积处理的数据流表示如下:
其中
表示输出特征,O表示输出通道数,p表示pad的像素数量,
表示卷积核(暂时假设groups=1)。为简单起见,我们还假设
。
对于全连接层,假设P和Q为输入与输出维度,
分别表示输入与输出,
表示全连接层核,计算公式如下:
接下来我们聚焦于全连接层,假设FC不会改变输入输出分辨率,即
。我们采用RS(reshape)表示仅仅改变张量形变而不会改变内存数据顺序的操作,它是一种cost-free
操作。输入首先会被平整为N个长度为
的向量,即
,然后乘以核
得到输出
,最后再RS为
。为更好的阅读,在歧义的情况下我们忽略RS而简写为:
这种形式的全连接层无法充分利用图像的局部信息(因其忽视了位置信息)。
Components of RepMLP
我们并未采用上述形式的全连接层,因为它不仅缺乏局部先验,而且会导致巨量参数:
。以通用配置为例,
,此时FC的参数量高达10G,这是完全不可接受的。为降低参数量,我们提出了Global Perceptron
与Partition Peceptron
分别进行分区间与分区内依赖性建模。
Global Perceptron
它将进行特征拆分且不同分区特征进行参数共享。比如,
将被拆分为
,我们将每个
视作一个分区。假设
表示期望分区的高和宽,输入
首先reshape为
,然后对坐标轴顺序进行调整
,最后再reshape为
。通过这种方式,参数量可以从
下降到
。
然而,拆分将会打破相同通道不同分区之间的相关性。也就是说,每个分区将会进行独立建模,而忽视了位置上的相关性。为对每个分区添加相关性,Global Perceptron
采用了以下几个操作:
- 对每个分区采用均值池化得到一个像素;
- 将上述所得送入到BN、两层MLP;
- 将上述所得进行reshape并与分区特征相加。
完成Global Perceptron
操作后,将所得特征送入到后续的Partition Perceptron
与Local Perceptron
。
Partition Perceptron
它包含FC与BN层,并以分区特征作为输入。前述输出
将通过reshape、re-arrange、reshape等操作变为
。我们进一步采用组卷及降低FC3的参数量,定义如下:
类似的,组形式的FC核
,此时参数量可以减少g倍。尽管这种形式的FC不被某些框架(如Pytorch)支持,但我们可以采用
卷积代替实现。它的实现包含三个步骤:
- 将
reshape为空域尺寸为
的特征;
- 采用groups=g的
卷积;
- 将上述所得特征reshape为
。
整个过程定义如下:
Local Perceptron
它将分区特征经由几个卷积进行处理。前面的图示Fig1给出了
的示意图。理论上,仅有的约束为:核尺寸
(因为采用比分辨率更大的核没有意义),但是我们参考ConvNet的常规操作仅采用了奇数核。为简单起见,我们采用
这种方框形式,其他
同样有效。所有卷积分支的输出与Partition perceptron
的输出相加作为最终的输出。
A Simple, Platform-agnostic, Differentiable Algorithm for Merging Conv into FC
在将RePMLP转换为三个FC之前,我们首先看一下如何将卷积合并到FC。假设FC核
,卷积核
,我们期望构建
满足:
我们注意到:对任意与
同形状的核
,MMUL的加法特征满足:
因此,只要可以构建与
同形状的
,我们就可以将F合并到
并满足:
很明显,
一定存在(因为卷积可视作稀疏版FC)。考虑到不同平台对于卷积的加速策略、内存排布等方式的不同,A平台的矩阵构建可能并不适合于B平台。我们提出了一种简单的、平台无关解决方案。
正如前面所说,对于任意输入
,卷积核F,存在一个FC核
满足:
采用矩阵乘形式,此时有:
我们对齐插入恒等矩阵
,并采用如下定律:
注意:
是由F构建得到,
表示对特征
进行卷积。通过显示RS,此时有:
通过比较上述公式,我们可以得到:
该公式精确的展示了如何通过F,p构建
。简而言之,卷积核的等效FC核可以通过对恒等矩阵进行卷积并添加合适reshape得到。
Converting RepMLP into Three FC Layers
为采用上述理论,我们首先需要通过等价融合方式消除BN层。假设
表示卷积核,
表示BN中的参数。那么两者的融合方式如下:
1D形式BN于FC3的融合采用类似形式可得:
。通过上述一系列的表换,我们就可以得到一个FC核于一个偏置向量,即为推理时的FC的参数。
Experiments
Pure MLP and Ablation Studies
我们首先在CIFAR10上验证RepMLP的有效性,测试的网络结构见下图。
在训练阶段,我们采用了标准数据增广(padding、RandomCrop、RandomFlip),batch=128,cosine学习率衰减机制,训练了100epoch。结果见下表。
从上表可以看到:
- 纯MLP模型能够以52.8M FLPs达到91.11%的精度,不过该结果弱于Wide ConvNet;
- 转换前的计算量优于包含卷积与BN,其计算量非常大,这说明了结构重参数的重要性;
- 移除
Local Perceptron
,模型精度下降8.5%,说明了局部先验的重要性; - 移除
Gloabl Perceptron
,模型精度下降1.5%,说明了全局建模的重要性; - 替换FC3为卷积,尽管其感受野更大,但仍造成精度下降3.5.%,说明了FC要比卷积更有力;
- 采用RepMLP替换F实验的卷积,优于没有全局感知,精度仍出现了下降。
RepMLP-ResNet for ImageNet Classification
我们采用ResNet作为基线模型并用于评估RepMLP作为传统ConvNet构建模型的性能。模块定义见上图。
上面两个表给出了不同阶段替换时的性能对比,从中可以看到:
- 当仅仅对c4进行替换时,r=8时RepMLP-Res50具有比ResNet50更少的参数量,更快的推理速度(快10%);
- Table2的前两行说明:当前深度学习框架对于组形式
卷积支持程度并不够好,参数量提升59%,但推理速度仅下降了0.7%;更进一步的组形式
优化有可能使得RepMLP更高效。
- 采用RepMLP模块替换ResNet中的模块会导致轻微的速度下降,但精度出现了显著提升。比如,仅仅采用RepMLP替换c4即可带来0.94%精度提升,参数量仅增加5M;c3 c4的替换可以取得最佳的均衡。
上表对比了更高输入分辨率下的性能对比。从中可以看到:
- 相比同参数量的传统ConvNet,RepMLP-Res50的计算量更低、推理速度更快。比如,相比
输入的ResNet101,RepMLP-Res50仅需50%FLOPs,更少的参数量,推理速度快50%,即可取得同等精度;当输入分辨率为
时,RepMLP-Res50在精度、速度以及FLOPs方面的优势更大。
- 提升RepMLP的参数量会导致非常轻微的速度下下降。比如,从RepMLP-Res50-g8/16到RepMLP-Res50-g4/8,参数量提升47%,但FLOPs仅提升3.6%,推理速度仅下降2.2%。这对于大型服务器的高吞吐量推理极为有用。
- 相比Nonlocal与GC,RepMLP-Res50的推理速度几乎相同,但精度高1%;
- 相比于GPU端低效的EfficientNet,RepMLP-Res50在速度于精度方面表现更优。
除了前述模块改进外,作者还提供了一种高速版本,其结果见上图右,性能见下表。
从上表可以看到:轻量版RepMLP取得了与原始ResNet50相当的进度,但FLOPs降低30%,推理速度快55%。
Face Recognition
不同于卷积,FC不具备平移不变性性,这使得RepMLP非常适合于具有位置先验的图像(比如人脸)。因此,我们采用RepMLP在人脸识别任务上进行了有效性验证,结果见下表。
从上表可以看到:
- 相比MobileFaceNet,FaceResNet具有更高的精度,但推理速度更慢;
- 相比MobileFaceNet,RepMLP-FaceRes取得了4.91%的精度提升,同时推理速度快8%(尽管具有更高的FLOPs)。
Semantic Segmentation
语义分割是一种极具代表性的平移不变任务,我们在Cityscapes数据上验证RepMLP-Res50的有效性。结果见下表。
从中可以看到:
- 相比Res-50,PSPNet RepMLP-Res50-g4/8取得了2.31%的mIoU指标提升;
- 尽管RepMLP方案具有更多的参数量,但其FLOPs更低,推理速度更快。