论文名称:RepMLP: Re-parameterizing Convolutions into Fully-connected Layers for Image Recognition 论文下载:https://arxiv.org/abs/2105.01883 论文年份:2022 24(2022/05/21) 论文代码: https://github.com/DingXiaoH/RepMLP
Abstract
We propose RepMLP , a multi-layer-perceptron-style neural network building block for image recognition, which is composed of a series of fully-connected (FC) layers. Compared to convolutional layers, FC layers are more efficient, better at modeling the long-range dependencies and positional patterns, but worse at capturing the local structures, hence usually less favored for image recognition. We propose a structural re-parameterization technique that adds local prior into an FC to make it powerful for image recognition. Specifically, we construct convolutional layers inside a RepMLP during training and merge them into the FC for inference. On CIFAR, a simple pure-MLP model shows performance very close to CNN. By inserting RepMLP in traditional CNN, we improve ResNets by 1.8% accuracy on ImageNet, 2.9% for face recognition, and 2.3% mIoU on Cityscapes with lower FLOPs. Our intriguing findings highlight that combining the global representational capacity and positional perception of FC with the local prior of convolution can improve the performance of neural network with faster speed on both the tasks with translation invariance (e.g., semantic segmentation) and those with aligned images and positional patterns (e.g., face recognition).
我们提出了 RepMLP,这是一种。我们提出了一种将局部先验添加到结构重新参数化技术中的技术 FC 在图像识别方面具有很强的功能。具体来说,。在 CIFAR 上,简单纯净 MLP 模型显示非常接近 CNN 的性能。通过在传统 CNN 中插入 RepMLP,我们将 ResNet 在 ImageNet 精度提高了 1.8%的人脸识别提高了 2.9%,在较低 FLOPs 的 Cityscapes 上提高了 2.3% mIoU。有趣的发现强调,。
1. Introduction
。
最重要的是,我们也希望。。例如,ViT [11] 是没有卷积的纯 Transformer 该模型将图像输入到序列中 Transformer 中。。
本文重新审视了全连接(FC)层,是传统的 ConvNet 提供全局容量和位置感知。在某些情况下,我们直接使用它 FC 替换特征图之间的转换 conv。通过展平特征图,通过 FC 我们可以享受位置感知(因为它的参数与位置有关)和整体容量(因为每个输出点都与每个输入点有关)。实际速度和理论 FLOP 这种操作是有效的,如表 4 所示,。
图 1:RepMLP 草图。这里 N、C、H、W 批量大小、输入通道数、高度和宽度,h、w、g、p、O 分别是所需的分区高度和宽度、组数、填充和输出通道数。输入特征图被分成一组分区,全局感知器将分区之间的相关性添加到每个分区上。然后 Local Perceptron 用几个 conv 层层捕获局部模式,Partition Perceptron 建模远程依赖关系。该草图假设 N = C = 1,H = W , H w = W w = 为了获得更好的可读性,一个通道分为四个分区。我们假设 h, w > 7,因此 Local Perceptron 内核大小为 1、3、5、7 的 conv 分支。参数张参数张量 FC 和 conv 层层显示。。
但是,。在本文中,我们建议。具体来说,我们。基于此,我们提出了一个。如图 1 所示,。请注意,我们。
。如我们的实验所示(表) 4、5、6),RepMLP 在各种视觉任务中都优于传统任务 ConvNet,包括 1)一般分类(ImageNet [8]),2)具有位置先验的任务(人脸识别)和3)具有翻译不变性的任务(语义分割)。
我们的贡献总结如下。
- 建议使用FC 全局能力和位置感知,并配备局部先验进行图像识别。
- 。
- 我们提出了 RepMLP,在多视觉任务中,高效构建块并显示其有效性。
2. elated Work
2.1. Designs for Global Capacity
。
。
与这些作品相比,。如表 4 所示,RepMLP对ResNet-50的性能比Non-local模块和GC块的提升更多。
2.2. Structural Re-parameterization
。
。
RepVGG [10] 是一种类似 VGG 的架构,因为它的主体仅使用 3 × 3 卷积和 ReLU 进行推理。这种推理时间架构是从具有identity和 1×1 分支的训练时间架构转换而来的。
。此外,RepMLP 内部的训练时卷积可以通过 ACB、RepVGG 块或其他形式的卷积来增强,以进一步改进。
3. RepMLP
训练时 RepMLP 由三个部分组成,称为全局感知器、分区感知器和局部感知器(图 1)。在本节中,我们将介绍我们的公式,描述每个组件,并展示如何将训练时 RepMLP 转换为三个 FC 层进行推理,其中关键是一种简单、平台无关和可微分的方法,用于将 conv 合并到 FC .
3.1. Formulation
在本文中,特征图由张量 M ∈ R N × C × H × W M ∈ \mathbb{R}^{N×C×H×W} M∈RN×C×H×W 表示,其中 N N N 是批量大小, C C C 是通道数, H H H 和 W W W 分别是高度和宽度。我们分别使用 F 和 W 作为 conv 和 FC 的内核。为了简单和易于重新实现,我们使用与 PyTorch [22] 相同的数据格式,并以伪代码样式制定转换。例如,通过 K × K conv 的数据流可表述为 。从现在开始,为了简单起见,我们假设 H’ = H,W’ = W(即步幅为 1 且 p = K/2)。
我们现在关注一个以 M(in) 作为输入并输出 M(out) 的 FC。我们假设 FC 不改变分辨率,即 H’ = H, W’ = W 。。。
为了更好的可读性,如果没有歧义,我们省略 RS, 。
3.2. Components of RepMLP
。使用常用设置,例如,H = W = 28,C = O = 128 在 ImageNet 上,这个单一的 FC 会有 10G 的参数,这显然是不可接受的。。
。例如,。我们。设 (我们假设 H,W 分别可被 h,w 整除,否则我们可以简单地填充输入),。例如,它只需要 PyTorch 中的一个函数调用(permute)。然后 (N, H/h , W/w , C, h, w) 张量被重新整形(这又是无成本的)为 ( NHW/hw , C, h, w)(在图 1 中表示为分区图)。这样,所需的参数数量从 C O H 2 W 2 COH^2W^2 COH2W2 减少到 C O h 2 w 2 COh^2w^2 COh2w2。
。换句话说,模型将单独查看分区,完全不知道它们是并排放置的。
-
1)使用平均池化来获得每个分区的像素
-
2)通过 BN 和两层 MLP 将其输入
-
3)重塑并将其添加到分区图上
。请注意,如果 H = h,W = w,我们直接将输入特征图馈送到 Partition Perceptron 和 Local Perceptron 而不进行拆分,因此不会有 Global Perceptron。
。输出 (N HW hw , O, h, w) 以与之前相反的顺序被重新整形、重新排列和重新整形为 (N, O, H, W)。我们进一步减少了受 groupwise conv [5, 31] 启发的 FC3 的参数。以 g 作为组数,我们将 groupwise conv 表示为 类似地,groupwise FC 的核是 W ∈ R Q × P / g W ∈ \mathbb{R}^{Q× P/g} W∈RQ×P/g ,它有 g× 更少的参数。尽管像 PyTorch 这样的一些计算框架并不直接支持 groupwise FC,但它也可以通过 groupwise 1 × 1 conv 来实现。该实现由三个步骤组成:
- 1)将 V(in) 重塑为空间大小为 1×1 的“特征图”;
- 2)对g组进行 1×1 conv;
- 3)将输出“特征图”重塑为 V(out)
我们将分组矩阵乘法(gMMUL)表示为 局部感知器通过几个卷积层提供分区图。受 [9, 10] 的启发,BN 跟随在每个 conv 之后。图 1 显示了 h, w > 7 和 K = 1, 3, 5, 7 的示例。理论上,对内核大小 K 的唯一约束是 K ≤ h, w(因为使用更大的内核没有意义比分辨率),但我们只使用奇数内核大小作为 ConvNet 中的常见做法。我们使用 K × K 只是为了简化表示法,并且非方形卷积(例如 1 × 3 或 3 × 5)也可以。 conv 的 padding 应配置为保持分辨率(例如,p = 0, 1, 2, 3 分别对应 K = 1, 3, 5, 7),组数 g 应与 Partition 相同感知器。所有 conv 分支和 Partition Perceptron 的输出相加作为最终输出。
3.3. A Simple, Platform-agnostic, Differentiable Algorithm for Merging Conv into FC
在将一个 RepMLP 转换为三个 FC 层之前,我们首先展示如何将一个 conv 合并到 FC 中。使用 FC 内核 W(1)(Ohw, Chw)、conv 内核 F(O, C, K, K) (K ≤ h, w) 和填充 p,我们希望构造 W0 使得 我们注意到,对于任何与 W(1) 形状相同的核 W(2),MMUL 的可加性确保 所以我们可以将 F 合并到 W(1) 中,只要我们设法构造与 W(1) 相同形状的 W(F,p) 满足 显然,W(F,p) 必须存在,因为 conv 可以被视为在空间位置之间共享参数的稀疏 FC,这正是其平移不变性的来源,但用给定的 F 和页。由于现代计算平台使用不同的卷积算法(例如,im2col-[2]、Winograd-[17]、FFT-[20]、MEC-[4] 和基于滑动窗口)以及数据的内存分配和填充的实现可能不同,在特定平台上构建矩阵的方法可能不适用于另一个平台。在本文中,我们提出了一个简单且与平台无关的解决方案。
如上所述,对于任何输入 M(in) 和卷积核 F,填充 p,存在一个 FC 核 W(F,p),使得 使用之前使用的公式(等式 2),我们有 我们插入一个单位矩阵 I (Chw, Chw) 并使用结合律 我们注意到因为 W(F,p) 是用 F 构造的,所以 I · W(F,p)T 是在从 I 重塑的特征图 M(I) 上与 F 的卷积。使用显式 RS,我们有 比较公式 10 与 13, 14,我们有 。更好的是,转换是高效且可微的,因此可以在训练期间推导出 FC 内核并将其用于目标函数(例如,用于基于惩罚的剪枝 [13, 21])。分组情况的表达式和代码以类似的方式推导出来,并在补充材料中提供。
3.4. Converting RepMLP into Three FC Layers
要使用上述理论, 然后很容易验证等价性: 。
的 1D BN 和 FC3 以类似的方式融合为 ^W ∈ ROhw × Chw/g , ^b ∈ ROhw。然后我们。
。补充材料中提供了公式和代码。
3.5. RepMLP-ResNet
。在本文中,。
为了在 ResNet 中使用 RepMLP,我们遵循 ResNet-50 的瓶颈 [14] 设计原则,通过 1×1 conv 将通道减少 4 倍。此外,我们在 RepMLP 之前进一步执行 r× 通道缩减,之后通过 3 × 3 conv 执行 r× 通道扩展。整个块被称为 RepMLP 瓶颈(图 4)。对于特定阶段,我们将所有 stride-1 瓶颈替换为 RepMLP 瓶颈,并保留原始 stride-2(即第一个)瓶颈。 RepMLP Bottleneck 的设计与 GLFP Module [30] 相关,它使用具有 1×1、3×3 卷积和 FC 的瓶颈结构进行人脸识别,但差异很大。
-
1)。相比之下,RepMLP 对输入特征图进行分区,并使用 Global Perceptron 添加全局信息。
-
2)GLFP 使用与 1×1-FC-3×3 分支平行的 3×3 conv 分支来捕获局部模式。与可以合并到 FC 进行推理的 RepMLP 的 Local Perceptron 不同,GLFP 的 conv 分支对于训练和推理都是必不可少的。
-
3)拓扑结构的一些差异(例如,加法与串联)。
需要再次说明的是,本文的核心贡献不是将 RepMLP 插入 ResNet 的解决方案,而是将 conv 重新参数化到 FC 的方法以及 RepMLP 的三个组件。
4. Experiments
4.1. Pure MLP and Ablation Studies
我们首先通过在 CIFAR-10 上测试纯 MLP 模型来验证 RepMLP 的有效性。更准确地说,由于 FC 等价于 1 × 1 conv,因此“纯 MLP”意味着不使用大于 1 × 1 的 conv 内核。我们将 RepMLP 和常规 FC (1 × 1 conv) 交错以构建三个阶段和通过最大池化进行下采样,如图 3 所示,并通过将 RepMLP 替换为 3 × 3 conv 来构建一个 ConvNet 对应物进行比较。对于可比较的 FLOP,三个阶段的通道对于纯 MLP 为 16,32,64,对于 ConvNet 为 32,64,128,所以后者被命名为Wide ConvNet。我们采用标准的数据增强[14]:填充到 40 × 40、随机裁剪和左右翻转。这些模型以 128 的批大小和 100 个 epoch 中从 0.2 退火到 0 的余弦学习率进行训练。如表 1 所示,纯 MLP 模型达到 91.11% 的准确率,只有 52.8M FLOPs。毫不奇怪,纯 MLP 模型的性能并不优于 Wide ConvNet,这促使我们将 RepMLP 和传统的 ConvNet 结合起来。 然后我们进行一系列消融研究。
- A)我们还报告了转换前 MLP 的 FLOP,它仍然包含 conv 和 BN 层。尽管额外的参数是边际的,但 FLOPs 要高得多,这表明了结构重新参数化的重要性。
- B)“w/o Local”是没有Local Perceptron的变体,准确率低8.5%,可见local prior的重要性。
- C)“w/o Global”移除 FC1 和 FC2 并将分区图直接馈送到 Local Perceptron 和 Partition Perceptron。
- D)“FC3 as conv9”将 FC3 替换为一个 conv(K = 9 和 p = 4,因此它的感受野大于 FC3),然后是 BN,以比较 FC3 与常规 conv 的表示能力。虽然比较偏向于 conv,因为它的感受野更大,但其准确度低 3.5%,这验证了 FC 比 conv 更强大,因为 conv 是退化的 FC。
- E)“RepMLP as conv9”直接用 9 × 9 conv 和 BN 替换 RepMLP。与 D 相比,它的准确性较低,因为它没有全局感知器。
4.2. RepMLP-ResNet for ImageNet Classification
我们以 ResNet-50 [14](torchvision 版本 [23])作为基础架构来评估 RepMLP 作为传统 ConvNet 中的构建块。为了公平比较,所有模型都在 100 个 epoch 中使用相同的设置进行训练:8 个 GPU 上的全局批量大小为 256,权重衰减为 10−4,动量为 0.9,余弦学习率从 0.1 退火到 0。我们使用 mixup [32] 和 Autoaugment [7] 的数据增强管道,随机裁剪和翻转。所有模型均使用单个中央裁剪进行评估,并在相同的 1080Ti GPU 上测试速度,批量大小为 128,以示例/秒为单位进行测量。为了公平比较,RepMLP 被转换,每个模型的所有原始 conv-BN 结构也被转换为带有偏差的卷积层以进行速度测试。
作为一种常见的做法,我们将 ResNet-50 的四个残差阶段分别称为 c2、c3、c4、c5。在 224 × 224 的输入下,四个阶段的输出分辨率分别为 56、28、14、7,四个阶段的 3 × 3 卷积层的 C = O = 64、128、256、512 分别为。为了用 RepMLP 替换大的 3 × 3 卷积层,我们在局部感知器中使用 h = w = 7 和三个卷积分支,其中 K = 1、3、5。 我们首先在 c4 中使用 RepMLP 并改变超参数 r 和 g 以测试它们如何影响精度、速度和参数数量(表 2)。值得注意的是,经过剧烈的 8 倍缩减(因此 RepMLP 的输入和输出通道为 256/8 = 32),RepMLP-Res50 的参数更少,运行速度比 ResNet-50 快 10%。前两行之间的比较表明,当前的 groupwise 1×1 conv 效率低下,因为参数增加了 59%,但速度仅下降了 0.7%。对 groupwise 1 × 1 conv 的进一步优化可能会使 RepMLP 更有效。在以下实验中,我们使用 r = 2 或 4 和 g = 4 或 8 进行更好的权衡。 我们继续在不同阶段测试 RepMLP。具体来说,对于合理的模型大小,我们分别为 c2、c3、c4、c5 设置 g = 8 和 r = 2、2、4、4。桌子。。仅在 c4 上使用 RepMLP 只会增加 5M 的参数,但准确度提高了 0.94%,并且在 c3 和 c4 中使用 RepMLP 提供了最佳权衡。它还建议 RepMLP 应该与传统的 conv 结合以获得最佳性能,因为在所有四个阶段中使用它提供的准确度低于 c2+c3+c4 和 c3+c4。我们在以下实验中在 与具有更高输入分辨率的大型传统 ConvNet 的比较(表 4)进一步证明了 RepMLP 的有效性并提供了一些有趣的发现。当使用 320 × 320 输入进行训练和测试时,我们使用 h = w = 10 的 RepMLP,局部感知器有四个分支,K = 1、3、5、7。我们还改变组的数量以生成三个具有不同尺寸。例如,g8/16 表示 c3 的 g = 8 和 c4 的 16。作为远程依赖建模的两个经典模型,我们按照原始论文中的说明构建了 Non-local [29] 和 GC [1] 对应物,并且使用相同的设置训练模型。 我们还将著名的 EfficientNet [24] 系列作为强基线再次使用相同的设置进行训练。我们有以下观察。3+c4 中使用 RepMLP。
- 1)与参数数量相当的传统ConvNets相比,RepMLP-Res50的FLOPs要低得多,速度更快。例如,与具有 224 × 224 输入的 ResNet-101 相比,RepMLPRes50 只有 50% 的 FLOPs 和 4M 的参数,运行速度快 50%,但它们的精度是相同的。凭借 320 × 320 的输入,RepMLP-Res50 在准确度、速度和 FLOP 方面的表现都大大优于其他方法。此外,ResNet-50 的改进不应简单地归因于深度的增加,因为它仍然比 ResNet-101 浅。
- 2)增加 RepMLPs 的参数会导致非常小的减速。从 RepMLP-Res50-g8/16 到 RepMLP-Res50-g4/8,参数增加了 47%,但 FLOPs 仅增加了 3.6%,速度仅降低了 2.2%。此属性对于大型服务器上的高吞吐量推理特别有用,其中吞吐量和准确性是我们的主要关注点,而模型大小则不是。
- 3)与Nonlocal和GC相比,RepMLP-Res50的速度几乎相同,但准确率高出1%左右。
- 4)与实际上在 GPU 上效率不高的 EfficientNets 相比,RepMLP-Res50 在速度和准确度上都表现出色。 我们在图 5 中可视化了 FC3 的权重,其中采样的输出点 (6,6) 用虚线正方形标记。原始 FC3 没有局部先验作为标记点,并且邻域没有比其他更大的值。,这是意料之中的。此外,全局容量并没有丢失,因为在最大卷积核(本例中为 7 × 7,由蓝色方块标记)之外的一些点(用红色矩形标记)仍然比内部的点具有更大的值。
我们还在附录中介绍了另一种瓶颈设计(RepMLP Light Block),它不使用 3×3 卷积,但仅使用 1×1 进行 8× 通道缩减/扩展。与原始的 ResNet-50 相比,它实现了相当的准确度(77.14% 对 77.19%),FLOP 降低了 30%,速度提高了 55%。
4.3. Face Recognition
。我们用于训练的数据集是 MS1M-V2,这是一个包含来自 85k 名人的 580 万张图像的大规模人脸数据集。它是 MS-Celeb-1M 数据集 [12] 的半自动精炼版本,其中包含来自 10 万个identity的 100 万张照片,并且有许多嘈杂的图像和错误的 ID 标签。我们使用 MegaFace [16] 进行评估,其中包括 60k identity的 100 万张图像作为图库集,以及来自 FaceScrub 的 530 个identity的 100k 图像作为探针集。也是人工清零的精炼版。我们使用 96 × 96 的输入进行训练和评估。
。与常规的 ResNet-50 相比,c2,c3,c4,c5 中的块数从 3,4,6,3 减少到 3,2,2,2,宽度从 256,512,1024,2048 减少到128,256,512,1024,3×3的通道从64,128,256,512增加到128,256,512,1024。换句话说,残差块中的 1×1 卷积层不会减少或扩展通道。因为输入分辨率为 96 × 96,所以 c2,c3,c4,c5 的空间大小分别为 24,12,6,3。对于 RepMLP 对应项,我们通过用 h = w = 6, r = 2 的 RepMLP 瓶颈替换 c2、c3、c4 的 stride1 瓶颈(即 c2 的最后两个瓶颈和 c3、c4 的最后块)来修改 FaceResNet , g = 4。 对于训练,我们使用 512 的批大小、0.9 的动量、AM-Softmax 损失 [28] 和 [3] 之后的权重衰减。所有模型都经过 420k 迭代训练,学习率从 0.1 开始,在 252k、364k 和 406k 迭代时除以 10。为了评估,我们报告了 MegaFace 上的 top1 准确度。表 5 显示,FaceResNet 提供了比 MobileFaceNet 更高的准确度,但运行速度较慢,而 RepMLP-FaceRes 在准确度和速度上都表现出色。与 MobileFaceNet 相比,RepMLPFaceRes 的准确率提高了 4.91%,运行速度提高了 8%(尽管它有 2.5 倍的 FLOPs),这显然更适合高功率设备。
4.4. Semantic Segmentation
。我们验证了 ImageNetpretrained RepMLP-Res50 在 Cityscapes [6] 上的泛化性能,其中包含 5K 精细标注的图像和 19 个类别。我们使用 RepMLP-Res50-g4/8 和在 ImageNet 上以 320 × 320 预训练的原始 ResNet-50 作为主干。为了更好的可重复性,我们简单地采用了 PSPNet [34] 框架的官方实现和默认配置 [33]:poly learning rate policy,base 为 0.01,power 为 0.9,权重衰减为 10−4,全局 batch size 为 16在 8 个 GPU 上运行 200 个 epoch。在 PSPNet50 之后,我们在两个模型的 c5 和原始 ResNet-50 的 c4 中使用 dilated conv。我们没有在 RepMLP-Res50-g4/8 的 c4 中使用 dilated conv,因为它的感受野已经很大。由于 c3 和 c4 的分辨率变为 90 × 90,全局感知器将有每个通道的 81 个分区,因此 FC1 和 FC2 中的参数更多。我们通过将 c3 的 FC1 的输出维度和 FC2 的输入维度减少 4 倍和 c4 的 8 倍来解决这个问题。 FC1 和 FC2 是随机初始化的,其他所有参数都继承自 ImageNet 预训练模型。 表 6 显示具有 RepMLP-Res50g4/8 的 PSPNet 在 mIoU 方面比 Res-50 主干网络高 2.21%。虽然它有更多的参数,但 FLOPs 更低,速度更快。值得注意的是,我们的 PSPNet 基线低于报告的 PSPNet-50,因为后者是为语义分割定制的(在最大池化之前增加了两层),但我们的不是。
5. Conclusion
FC 比 conv 具有更强的表示能力,因为后者可以被视为具有共享参数的稀疏 FC。然而,FC 没有局部先验,这使得它不太适合图像识别。在本文中,我们提出了 RepMLP,它利用 FC 的全局容量和位置感知,并通过简单且与平台无关的算法将卷积重新参数化,将局部先验合并到 FC 中。从理论上讲,将 conv 视为 FC 的退化案例开辟了一个新的视角,这可能会加深我们对传统 ConvNets 的理解。值得一提的是,。
Appendix A: RepMLP-ResNet for High Speed
。在这里,我们提出了另一种在 ResNet 中使用 RepMLP 以获得更高速度的方法。具体来说,我们构建了一个 RepMLP Light Block(图 6),没有 3 × 3 conv,但在 RepMLP 之前和之后通过 1 × 1 conv 进行了剧烈的 8x 通道缩减/扩展。与论文中报道的 78.55%-accuracy RepMLP-ResNet50 相同,我们在 Local Perceptron 中使用 h = w = 7, g = 8 和三个 conv 分支,K = 1, 3, 5。速度测试相同与论文中报告的所有模型一样。。 值得注意的是,RepMLP 是一个可以以各种方式与许多其他结构组合的构建块。我们只提出了两种在 ResNet 中使用 RepMLP 的方法,这可能不是最优的。我们将公开代码和模型以鼓励进一步研究。
Appendix B: Converting Groupwise Conv into FC
将 conv 转换为 FC 的 groupwise 情况稍微复杂一些,可以通过先将输入分成 g 个并行组,然后将每个组分别转换来推导出。 PyTorch 代码显示在 Alg 1中和提交的 repmlp.py 包含一个可执行的例子来验证等价性。很容易验证 g = 1 的代码完全实现了论文中公式15。
Appendix C: Absorbing BN into FC1
Global Perceptron 中的 BN 对输入应用线性缩放和偏置。在与 FC1 内核进行矩阵乘法后,将添加的偏差投影,然后添加到 FC1 的偏差上。因此,可以通过缩放 FC1 的内核和改变 FC1 的偏差来抵消这个 BN 的去除。代码显示在 Alg 2 中和提交的 repmlp.py 包含一个可执行的例子来验证等价性。