生活家

导航菜单



当前位置: 首页  /  热点  /  正文

CVPR 2023 | 神经网络家族添新丁!小步快跑追求高速的FasterNet

阅读:31

CVPR 2023 | 神经网络家族添新丁!小步快跑追求高速的FasterNet

作者丨科技猛兽

编辑丨极市平台

本文目录

1 FasterNet:追求更快的神经网络
(来自 HKUST,Rutgers University)
1 FasterNet 论文解读
1.1 背景和动机
1.2 深度可分离卷积和常规卷积的内存访问成本
1.3 部分卷积 PConv 的设计
1.4 PConv 之后的 Point-Wise Convolution
1.5 基于 PConv 的视觉骨干模型 FasterNet
1.6 PConv 具有更高的 FLOPS
1.7 实验结果

太长不看版

为了设计更快的神经网络,许多工作都集中在减少总浮点运算数量 (Floating-Point OPerations) 上。但是,FLOPs 和神经网络的延时 (Latency) 不一定遵循严格的一一对应关系,换句话,FLOPs 的减少不一定会导致类似水平的延迟 (Latency) 减少。这主要是由于每秒浮点运算数量 (Floating-Point OPerations per Second) 较低。

为了实现更快的网络,本文重新审视了流行的算子,并证明了较低的 FLOPS 主要是由于算子的频繁内存访问,尤其是 Depth-wise Convolution。

因此,本文提出了一种新的部分卷积 (Partial Convolution, PConv),通过同时减少冗余计算和内存访问,可以更有效地提取空间特征。在 PConv 的基础上,作者进一步提出了 FasterNet,一种新的神经网络家族,在各种设备上的运行速度远高于其他网络。例如,在 ImageNet1k 上,小型的 FasterNet-T0 在 GPU、CPU 和 ARM 处理器上分别比 MobileViT XXS 快3.1倍、3.1倍和2.5倍,同时准确率高 2.9%。大型 FasterNet-L 实现了令人印象深刻的 83.5% 的 top-1 精度,与 Swin-B 不相上下,同时在 GPU 上的推理吞吐量提高了 49%,并在 CPU 上节省了 42% 的计算时间。

1 ViT 的前奏:Scale up 卷积神经网络学习通用视觉表示

论文名称:Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks (CVPR 2023)

论文地址:

https://arxiv.org/pdf/2303.03667.pdf

1.1 背景和动机

神经网络在图像分类、检测和分割等各种计算机视觉任务中取得了快速的发展。一个蓬勃发展的趋势是追求具有低延迟和高吞吐量的快速神经网络,以获得出色的用户体验、即时响应和安全原因。

如何把网络做得更快呢?目前研究人员不想去寄希望于寻找到一些计算代价更大的设备,而是希望尽量减小浮点运算数量 (Floating-Point OPerations)。目前 FLOPs,在许多经典的工作中都指的是 multiply-adds,即:一次乘法和一次加法这个整体的数量。像 MobileNets[1][2],ShuffleNets[3][4],GhostNet[5]等都借助 depthwise convolution (DWConv) 或者 group convolution (GConv) 等操作来降低整个网络的 FLOPs。

但是这些操作在带来 FLOPs 减小的过程中还会带来另一种副作用,即:内存访问 (memory access) 的增加。而且,以上这些模型通常伴随着额外的数据操作,如拼接 (concatenation), 打乱 (shuffling), 和池化 (pooling),其运行时间对于小模型往往是显著的。

除了以上的纯卷积神经网络,小型 ViT 和 MLP 的研究也越来越多。比如 MobileViTs[6][7][8] 和 MobileFormer[9] 通过结合 DWConv 和改进的注意力机制来降低计算复杂度。但是,它们仍然受到前述 DWConv 问题的困扰,并且还需要专门的硬件支持来改进注意力机制。一些 Normalization 和激活函数层也会进一步地限制这些模型的速度。

所以,以上 "快" 的神经网络并不是真的很快,而一个模型延时的计算方法如下:

式中,FLOPs 是总浮点运算数量 (Floating-Point OPerations),FLOPS 是每秒浮点运算数量 (Floating-Point OPerations per Second),用来衡量有效计算速度。

虽然目前的方法大多尝试来减少 FLOPs,但他们很少同时考虑优化 FLOPS 来实现真正的低延时。作者比较了典型神经网络在英特尔 CPU 上的 FLOPS,结果如下图1所示。可以看出,很多现有的神经网络的 FLOPS 都较低,甚至普遍低于经典的 ResNet50。在如此低的 FLOPS 下,这些 "快速" 的神经网络实际上还不够快,换句话讲,它们在总计算量 FLOPs 上的减少并不能转化为延迟的确切减少量。在某些情况下,没有任何改善,甚至会导致更严重的延迟。例如,CycleMLP-B1 的 FLOPs 只有 ResNet50 的一半,但运行速度更慢 (CycleMLPB1 vs ResNet50: 111.9ms vs 69.4ms)。

图1:典型神经网络在英特尔 CPU 上的 FLOPS

因此,本文作者重新检查了现有的运算符 DWConv 的计算速度,发现导致低 FLOPS 问题的主要原因是频繁的内存访问,并希望基于此提出解决方案。

1.2 深度可分离卷积和常规卷积的内存访问成本

DWConv 是 Conv 的一种流行变体, 已经被许多神经网络广泛采用。对于输入 , DWConv 使用个滤波器来得到输出 , 如下图 1(b) 所示。每个滤波器在一个输入通道上空间滑动, 并只计算一个输出通道的值。

DWConv 把 Conv 的计算量由 缩小到了

虽然 DWConv 可以有效地降低 FLOPs, 但它不能简单地用来取代常规的 Conv, 因为会导致严重的精度下降。所以说 DWConv 通常会跟随 Pointwise Convolution (PWConv)。一般在实践中 DWConv 的通道数会变宽为 以补偿精度的下降 (比如 MobileNet V2 中变为了6倍宽)。但是这会带来更高的内存访问, 降低整体计算速度, 尤其是对于 I/O-bound 设备。

DWConv 的内存访问数量:

常规卷积的内存访问数量:

1.3 部分卷积 PConv 的设计

本文给出的解决方案部分卷积 (Partial Convolution, PConv) 的出发点是卷积神经网络特征的冗余性。如下图2所示是在预训练的 ResNet50 的中间层中可视化特征图,左上角的图像是输入,特征图在不同通道之间具有很高的相似性。

图2:预训练的 ResNet50 的中间层中可视化特征图,左上角的图像是输入

部分卷积设计的目的是同时减小内存访问和计算冗余,其和常规卷积,DWConv 的区别如下图3所示,工作原理如下图4所示。

图3:PConv 和常规卷积,DWConv 的区别

图4:PConv 的工作原理和 FasterNet 架构

PConv 对部分输入通道应用常规的 Conv 来进行空间特征提取,而对其余通道保持不变。有点像 GhostNet,但是没有使用 GhostNet 中的 DWConv,而是依然保持着普通的卷积。我们来看看 PConv 的 FLOPs 和内存访问情况:

PConv 的 FLOPs

式中, 是特征图的宽和高, 是卷积核的大小, 是常规卷积作用的通道数。在实际实现时一般有 , 所以 PConv 的 FLOPs 仅仅为常规卷积的 1/16。

PConv 的内存访问情况

式中, 是特征图的宽和高, 是卷积核的大小, 是常规卷积作用的通道数。PConv 的内存访问数量仅仅为常规卷积的 , 其余的个通道不参与计算, 所以无需进行内存的访问。

1.4 PConv 之后的 Point-Wise Convolution

为了充分有效地利用来自所有通道的信息,作者进一步在 PConv 之后增加了 Point-Wise Convolution (PWConv)。如下图5所示,在输入特征图上的有效感受野一起看起来像一个 T 型的 Conv,和常规 Conv 相比,它更关注中心位置。

图5:在输入特征图上的有效感受野一起看起来像一个 T 型的 Conv,和常规 Conv 相比,它更关注中心位置

虽然型的 Conv 可以直接实现, 但将 型的 Conv 分解为 PConv 和 PWConv 更好, 因为分解的过程利用了过滤器间冗余并进一步节省了 FLOPs。对于相同的输入 和输出

T 型的 Conv 的 FLOPs

解耦成 PConv 和 PWConv 的 FLOPs

式中,,所以解耦成 PConv 和 PWConv 的两步实现有利于节约计算量。

PConv 的 PyTorch 伪代码如下:

import torch
import torch.nn as nn
from torch import Tensor


class PConv(nn.Module):
    """ Partial convolution (PConv).
    """
    def __init__(self,
                 dim: int,
                 n_div: int,
                 forward: str = "split_cat",
                 kernel_size: int = 3) -> None:
        """ Construct a PConv layer.

        :param dim: Number of input/output channels
        :param n_div: Reciprocal of the partial ratio.
        :param forward: Forward type, can be either 'split_cat' or 'slicing'.
        :param kernel_size: Kernel size.
        """
        super().__init__()
        self.dim_conv = dim // n_div
        self.dim_untouched = dim - self.dim_conv

        self.conv = nn.Conv2d(
            self.dim_conv,
            self.dim_conv,
            kernel_size,
            stride=1,
            padding=(kernel_size - 1) // 2,
            bias=False
        )

        if forward == "slicing":
            self.forward = self.forward_slicing
        elif forward == "split_cat":
            self.forward = self.forward_split_cat
        else:
            raise NotImplementedError

    def forward_slicing(self, x: Tensor) -> Tensor:
        """ Apply forward pass for inference. """
        x[:, :self.dim_conv, :, :] = self.conv(x[:, :self.dim_conv, :, :])

        return x

    def forward_split_cat(self, x: Tensor) -> Tensor:
        """ Apply forward pass for training. """
        x1, x2 = torch.split(x, [self.dim_conv, self.dim_untouched], dim=1)
        x1 = self.conv(x1)
        x = torch.cat((x1, x2), 1)

        return x

1.5 基于 PConv 的视觉骨干模型 FasterNet

作者基于 PConv 进一步提出了 FasterNet,这是一种新的神经网络家族,运行速度非常快,对许多视觉任务非常有效。本文的目标是使架构尽可能简单,没有花哨的功能,使其总体上对硬件友好。

如上图4所示是 FasterNet 的整体架构。它有四个 stages,Stage1 之前通过 Embedding 层 (一个常规的 Conv 4×4,stride 为4),其他 Stage 之前使用 Merging 层 (一个常规的 Conv 2×2,stride 为2) 处理,用于空间下采样和通道数扩展。每个 Stage 都由一些 FasterNet 块堆叠而成。

具体的设计细节

细节1: 最后2个 Stage 消耗更少的内存访问,往往有更高的 FLOPS。因此,作者在最后2个 Stage放置了更多的 FasterNet 块,并相应地将更多的计算分配到最后2个 Stage。

细节2: 每个 FasterNet 块都是由1个 PConv 和后续的两个 1×1 的 Point-wise Convolution 构成的。这三者构成了一个倒残差的架构,中间层的通道数量更多,并放置了一个 Shortcut 连接以重用输入特征。

Normalization 层和激活函数的使用

Normalization 层和激活函数神经网络而言是必不可少的,但是如果在整个网络中过度使用这些层,就有可能会限制特征的多样性,从而损害网络的性能,还可能会降低整体计算速度。所以作者只把它们放在每个中间层的 PWConv 之后,以保持特征多样性并获得更低的 Latency。

FasterNet 使用 BN 来代替 LN 等。BN 的好处是它可以通过结构重参数化的方式合并到相邻的 Conv 层中,以便更快地推断。

对于激活函数,考虑到运行时间和有效性,作者经验性地选择 GELU 作为较小的 FasterNet 变体,ReLU 作为较大的 FasterNet 变体。

为了在不同的计算预算下服务于广泛的应用程序,作者提供了 FasterNetT0/1/2,FasterNet-S,FasterNet-M,和 FasterNet-L。

1.6 PConv 具有更高的 FLOPS

作者在3种不同设备上测量 Latency (Batch Size=1) 和 Throughput (Batch Size=32),GPU (2080Ti), CPU (Intel i9-9900X, using a single thread), 和 ARM。

本小节作者展示了 PConv 速度更快,更好地利用了设备上的计算能力。比如将10层 PConv 堆起来,然后测量GPU、CPU 和 ARM 处理器上的 FLOPs 和延迟/吞吐量6所示。

图6:不同算子的 On-device FLOPS,PConv 高 FLOPS,低 FLOPs,似乎是一个有吸引力的选择

PConv 的 FLOPs 只有普通 Conv 的 1/16,在 GPU、CPU 和 ARM 上分别比 DWConv 高14倍、6.5倍和22.7倍。常规的 Conv 拥有最高的 FLOPS,因为它已经不断优化了多年。GConv 和 DWConv 尽管显著降低了 FLOPs,但 FLOPS 却急剧下降。此外,它们倾向于增加通道数量以弥补性能下降,但是这会增加它们的延迟。

1.7 实验结果

ImageNet-1K 实验结果

如下图7和8所示是 ImageNet-1K 实验结果,展示了 FasterNet 显著优于最先进的分类模型。从另一个角度来看,在具有相似 Top-1 精度的情况下,FasterNet 在广泛的设备上比各种 CNN、ViT 和 MLP 模型运行得更快。Faststernet-T0 在 GPU、CPU 和 ARM 处理器上分别比 MobileViT-XXS 快3.1倍、3.1倍和2.5倍,准确率提高 2.9%。大型 FasterNet-L 达到了 83.5% 的 Top-1 精度,与新兴的 Swin-B 和 ConvNeXt-B 相当,同时在 GPU 上具有 49% 和 39% 的高推断吞吐量,以及在 CPU 上节省 42% 和 22% 的计算时间。而且,FasterNet 在架构设计方面比许多其他模型简单得多,这表明了设计简单而强大的神经网络的可行性。

图7:不同硬件类型的结果

图7:ImageNet-1K 实验结果

下游任务实验结果

数据集使用 COCO,检测和实例分割头使用 Mask R-CNN。实验结果,即 FasterNet 与代表性模型的比较如下图8所示。FasterNet 一直优于 ResNet 和 ResNext,具有更低的延迟和更高的 AP。具体而言,与标准 ResNet50 相比,FasterNet 节省了 36% 的计算时间,并产生 +1.9 的 box AP 和 +2.4 的 mask AP。FasterNet 与 ViT 变体相比也具有竞争力。在类似的 FLOPs 下,FasterNet-L 将 PVT-Large 的延迟降低了一半,即在 GPU 上从 152 ms 降低到 74 ms,实现了 +1.1 的 box AP 和 +0.4 的 mask AP。

图8:下游任务实验结果

总结

为了实现更快的网络,本文重新审视了流行的算子,并证明了较低的 FLOPS 主要是由于算子的频繁内存访问,尤其是 Depth-wise Convolution。本文提出了一种新的部分卷积 (Partial Convolution, PConv),通过同时减少冗余计算和内存访问,可以更有效地提取空间特征。在 PConv 的基础上,作者进一步提出了 FasterNet,一种新的神经网络家族,在各种设备上的运行速度远高于其他网络。例如,在 ImageNet1k 上,小型的 FasterNet-T0 在 GPU、CPU 和 ARM 处理器上分别比 MobileViT XXS 快3.1倍、3.1倍和2.5倍,同时准确率高 2.9%。大型 FasterNet-L 实现了令人印象深刻的 83.5% 的 top-1 精度,与 Swin-B 不相上下,同时在 GPU 上的推理吞吐量提高了 49%,并在 CPU 上节省了 42% 的计算时间。

参考

  1. ^Searching for MobileNetV3
  2. ^MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
  3. ^ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  4. ^ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
  5. ^GhostNet: More Features from Cheap Operations
  6. ^MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer
  7. ^Separable Self-attention for Mobile Vision Transformers
  8. ^MobileViTv3: Mobile-Friendly Vision Transformer with Simple and Effective Fusion of Local, Global and Input Features
  9. ^Mobile-Former: Bridging MobileNet and Transformer.

标签

CVPR神经网络家族新丁小步追求高速FasterNet


相关文章列表

编织工业神经网络-宜科(天津)电子有限公司的创新解决方案

编织工业神经网络-宜科(天津)电子有限公司的创新解决方案

宜科(天津)电子有限公司生产车间。经济日报记者 周 琳摄在工业自动化领域,较之机床、吊车、场桥等重型设备,小如指尖的传感器、编码器以及工业总线通讯系统被称为工业的“神经网络”。20年来,宜科(天津)电...


警惕网络购物隐形侵权行为

警惕网络购物隐形侵权行为

生活中,不少人有类似经历:在电商平台完成购物后,隔三差五便会接到商家的推销电话。一方乐此不疲,另一方则不堪其扰。其中隐藏的种种侵权行为,应引起各方警惕。如此精准的推销电话,源于商家违规利用消费者个人信...


吃什么东西对修复糖尿病周围神经病变有好处?

吃什么东西对修复糖尿病周围神经病变有好处?

糖尿病二十年,正常服用降糖药,不吃任何高糖食品。正常生活,喝酒抽烟。不定时测血糖,基本控制在6左右。不要太听医生的话,主要还是心情愉悦,不要有精神压力,一定要休息好。适当运动,适当劳动。一切0K。随着...


男孩在追求我,约我出去玩剧本杀,本子费跟我AA,各付各的,我觉得他抠。你们觉得我正常吗?

男孩在追求我,约我出去玩剧本杀,本子费跟我AA,各付各的,我觉得他抠。你们觉得我正常吗?

人最难得的美德是担当,这个男孩显然没有的厉害。正好通过玩剧本杀而了解他的三观,如果他请你玩剧本杀,你可以请他吃饭,礼尚往来。但是如果他说AA,就可以不交往了,就这件事上你俩三观不合。不是说AA他就抠门...


阳山,春天,清明节,在网络中国节,寻找完美的小假期

阳山,春天,清明节,在网络中国节,寻找完美的小假期

和风沐沐,草盛花香四月的阳山春意更浓了清明假期马上来临赶紧跟上小阳的步伐到阳山来一场郊游收获春日的浪漫与温柔~春游·踏青好去处~......


全国人大代表李君建议网络直播账号日打赏不超100元,呼吁明星艺人不代言网游,如何看待此事?

全国人大代表李君建议网络直播账号日打赏不超100元,呼吁明星艺人不代言网游,如何看待此事?

支持这建议,但实施太难了,挡太多人的财路了这个建议好这个建议好,可以起到限制一些年轻人不理智的消费行为。为什么这样说呢?开直播卖商品就不说了,特别是开直播唱歌秀才艺的女人。因为自己有几分姿色,加上开启...


友情链接