转载:SBCFormer:一种新型CNN-VIT轻量级混合网络, 首次以1 FPS 速度在SBC上实现 80% 的top-1 精度

原文链接:SBCFormer:一种新型CNN-VIT轻量级混合网络, 首次以1 FPS 速度在SBC上实现 80% 的top-1 精度

文章地址:https://arxiv.org/ftp/arxiv/papers/2311/2311.03747.pdf
项目地址:https://github.com/xyongLu/SBCFormer

01 | 导言

现状:

计算机视觉在解决各种领域的现实问题方面变得越来越普遍,包括智能农业、渔业和牲畜管理。这些应用程序可能不需要每秒处理许多图像帧,导致从业者使用单板计算机(sbc)。尽管已经为“移动/边缘”设备开发了许多轻量级网络,但它们主要针对具有更强大处理器的智能手机,而不是具有低端cpu的sbc。

解决方法:

本文介绍一种叫做SBCFormer的CNN-ViT混合网络,在低端的cpu上实现了高精度和快速的计算。这些cpu的硬件约束使得Transformer的注意机制优于卷积。

在低端cpu上使用注意力存在一个挑战:高分辨率的内部特征映射需要过多的计算资源,而降低它们的分辨率会导致局部图像细节的丢失,SBCFormer引入了一种架构设计来解决这个问题。

SBCFormer在Raspberry Pi 4 Model B上实现了具有ARM-Cortex A72 CPU的精度和速度之间的最高权衡。它第一次在SBC上以1.0帧/秒的速度实现了大约80%的ImageNet-1K top-1精度。

准确性vs.延迟

02背景:

鉴于深度学习在视觉应用中被广泛应用,人们对高效神经网络设计的需求逐渐增加,推动了轻量化网络的发展。首先,我们看到了对纯 CNN 架构的改进。

为移动设备设计的卷积网络

早些时候,研究人员致力于提高卷积运算的计算效率。这个时期,SqueezeNetMobileNet家族是两大代表作品,它们分别通过引入深度可分离卷积分组卷积来降低标准卷积层的昂贵计算成本,以适应边缘设备的资源约束。此后,MobileNetV2在此基础上引入了反向残差块,进一步优化设计。因此,SBCFormer中采用了这一块作为卷积操作的主要构建单元。

对 CNN 架构的高效设计

另一种方法是对 CNN 架构进行高效设计,如Inception等引入1x1卷积及1xnnx1的分解。此外,一些经典的轻量级模型,包括ShuffleNetv1GhostNetMobileNeXtEfficientNetTinyNet等也被陆续提出。这些模型的特点是它们可以在每一层捕捉图像的局部空间相关性,但无法考虑全局交互。然而,对于标准大小的图像,使用卷积进行计算在CPU上可能变得计算昂贵,因为它需要大规模的矩阵乘法。这导致了大家对 Vision Transformer, ViT 的关注。

ViT 的到来

ViT 引入了一种新的思路,即使用自注意力机制实现全局交互,而不仅仅是局部空间相关性。它通过将图像拆分为一系列 Token 并引入自注意机制,有效地在整个图像范围内捕捉信息。然而,在低端处理器上使用 ViT 的挑战在于,自注意力机制的计算复杂度与令牌数量的平方成正比。SBCFormer 的创新之处在于通过引入双流结构,巧妙地平衡了注意力机制的计算效率和局部图像信息的保留。这使得在低端处理器上实现高准确度和适当推理速度成为可能。

从 ViT 到效率优化

前面提到,ViT 及其相关架构凭借自注意力机制和大规模图像数据集在各种视觉识别任务中取得了领先的推理准确度。然而,为了充分发挥它们的潜力,ViT 通常需要大量的计算和内存资源,这限制了它们在资源有限的边缘设备上的部署。为了提高 ViT 的效率,一系列研究聚焦于不同的角度进行改进。

首先,受到卷积架构中层次设计的启发,一些工作为 ViT 开发了新的架构。神经架构搜索方法也被用于优化 ViT 的架构。为了降低 ViT 的计算复杂性,有人提出了高效的自注意力机制,而其他人则关注于利用新的参数效率策略。随后的研究表明,在 Transformer 块中加入卷积可以提高 ViT 模型的性能和效率。

CNN-ViT 的混合架构

例如,LeViT 重新引入了卷积干扰层,以学习低分辨率特征,而不是使用ViT中的分块干扰层。EdgeViT 引入了 Local-Global-Local 块以更好地整合自注意力和卷积,使模型能够捕捉不同范围的空间令牌并在它们之间交换信息。MobileFormer 并行化 MobileNet 和 Transformer,以编码局部和全局特征,并通过双向桥接融合两个分支。MobileViT 则将Transformer块视为卷积,并开发了 MobileViT 块,以有效学习局部和全局信息。最后,EfficientFormer 采用混合方法,结合卷积层和自注意力层,实现准确性和效率之间的平衡。

03 | 方法

1)设计原则

采用了最近CNN-ViT混合系统中常用的基本架构。网络的初始阶段包括一组标准卷积层,它们擅长于将输入图像转换为特征映射,而不是将图像patch转换为ViT中的token的线性映射。将网络的主要部分划分为多个阶段,并在连续阶段之间减小特征图的大小。这是一个特征图的金字塔结构,尺寸为H/8 × W/8, H/16 × W/16, H/32 × W/32,等等。

Transformer注意机制的计算复杂度随着token的数量呈二次增长,即输入特征映射的大小 h × w。然后,具有较大尺寸特征图的较低阶段需要更多的计算成本。一些研究通过只关注特征图的子区域/token来解决这个问题。移动设备的研究通常只采用高层关注,虽然避免了增加的计算成本,但这导致了次优的推理精度,因为它放弃了ViT最重要的属性之一,即在图像中聚合全局信息。

考虑到这些因素,提出了一种缩小输入特征图的方法,将注意力集中在缩小的特征图上,然后再放大得到的特征图。在实验中,对于大小为224 × 224的输入图像,将特征映射缩小到7 × 7,而不考虑阶段。这种hourglass设计使模型能够从整个图像中汇总全局信息,同时最大限度地减少计算成本。然而,将特征映射缩小到如此小的尺寸可能会导致局部信息的丢失。为了解决这个问题,设计了一个具有两个并行流的块:一个用于局部特征,另一个用于全局特征。具体来说,保持了局部 stream的原始特征映射大小,并且不执行注意力操作。对于全局stream,采用上述的hourglass注意力设计,首先缩小特征图,应用注意力,然后将其放大到原始大小。最后两个stream的输出被合并并传输到下一个块。

2)SBCFormer 整体设计

SBCFormer 整体架构

SBCFormer的整体架构如图所示。该网络从一个初始部分(在图中标记为“Stem”)开始,该部分由3 × 3核和stride = 2的三个卷积层组成,将输入图像转换为特征图。主要部分包括三个阶段,每个阶段都通过单个卷积层连接到下一个阶段(在图中标记为“Embedding”)。这一层使用两步3 × 3卷积将输入特征图的大小减半。对于输出部分,采用全局平均池化,然后在网络的最后一层使用完全连接的线性层,特别是用于图像分类任务。

  1. 初始阶段: 使用一组标准卷积层,将输入图像转换为特征图,而不是采用ViT中的线性映射方式。这有助于在较低计算成本下捕捉图像的局部信息。这一部分由三个卷积核为 3*3,步长为2的卷积层。

  2. 主干部分: 将网络划分为多个阶段,每个阶段的特征图尺寸逐渐减小,形成金字塔结构。这种设计有助于减少计算复杂度,当然也是很常规的形式。

  3. Transformer注意力机制的优化: 由于注意力机制的计算复杂度与特征图的大小呈二次增长,为了平衡计算效率和全局信息捕捉,SCBFormer中采用了沙漏设计。即先将输入特征图缩小至较小的尺寸(7 × 7),应用注意力模块,然后再将其放大至原始大小,从而在整个图像范围内聚合全局信息。

  4. 局部和全局信息融合: 为了防止由于特征图缩小而导致的局部信息丢失,引入了块结构,其中包含两个并行流。一个流维持局部特征图的原始大小,不进行注意力操作;另一个流采用沙漏设计的注意力机制,以同时学习局部和全局信息。两个流的输出在块内合并,传递到下一个阶段。

  5. 特征表示能力的补偿: 为了弥补沙漏设计可能导致的特征表示能力的损失,引入了修改后的注意力机制,以更有效地捕捉特征之间的关系。

3)SBCFormer Block

  1. 初始块处理: 块的开始包括m_{i}个连续的反向残差块(Inverted Residual blocks)。后续使用带有ReLU激活函数的变体,包括逐点卷积、GeLU激活函数和3*3滤波器的深度卷积。
  2. 局部和全局分支: 更新后的特征分别传递到两个不同的分支,即局部和全局流。对于局部流,作为残差直接传递到块的末尾。对于全局流,输入特征首先通过平均池化层缩小分辨率,实验中设为7×7。缩小的特征图然后传递到一个包含两个连续的 InvRes 块,图中表示为 'Mixer',紧随其后是一个堆叠的注意力块,标记为 'MAttn'。然后通过上采样和卷积操作得到输出特征图。
  3. 特征融合: 在块的最后部分,局部流特征和全局流特征被融合以获得新的特征图。首先,这里通过对输入进行投影得到一个权重图,,然后对其进行 Sigmoid 激活。接着,将权重图与输入相乘,并在通道维度上与全局流输出特征拼接。最后,将融合后的特征通过另一个投影块,将通道数减半,最终得到块的输出。

将第i阶段的输入特征映射表示为X_{i}\in R^{\left ( H/2^{i+2} \right ) \times \left ( W/2^{i+2} \right ) \times C_{i}},block的开始部分,放置了m_{i}个连续的反向残差块,这首先在MobileNetV2中使用。使用了一个带有GeLU激活函数的变体,它由一个逐点卷积、一个GeLU激活函数和一个带有3 × 3滤波器的深度卷积组成,这部分称之为InvRes,将输入X_{i}映射到X^{l}_{i},如下:

其中F^{m_{i}}\left ( \cdot \right )表示将m_{i}个连续的InvRes块应用于输入。

如图2所示,更新后的特性X^{l}_{i}被转移到两个不同的分支,本地和全局stream。对于本地stream,被传递到块的结束部分。对于全局stream,首先通过平均池化层将X^{l}_{i}缩小为h×w,在图中表示为“Pool”。无论实验的哪个阶段,都将其设置为7 × 7。然后将缩小后的地图传递给由两个连续InvRes块组成的块,在图中表示为“Mixer”,旁边是一堆名为“Mattn”的注意力块。然后将输出的特征图放大,然后进行卷积,用“ConvT”表示。

这些操作提供了一个特征映射:X^{^{g}}_{i}\in R^{\left ( H/2^{i+2} \right ) \times \left ( W/2^{i+2} \right ) \times C_{i}}

其中F_{MAttn}^{L_{i}}\left ( \cdot \right )表示将L_{i}连续的MAttn块应用于输入。

在block的最后一段,将局部stream特征X^{l}_{i}与全局stream特征X^{g}_{i}融合,得到新的特征映射,如图2所示。为了融合两者,首先用由X^{g}_{i}创建的权重映射调制X^{l}_{i}。具体来说,计算W^{^{g}}_{i}\in R^{\left ( H/2^{i+2} \right ) \times \left ( W/2^{i+2} \right ) \times C_{i}}作为:

其中Proj表示逐点卷积,然后进行批处理归一化。然后将其乘以X^{l}_{i},并将结果映射与通道维度中的X^{g}_{i}连接为

4)改进的注意力机制

上述两stream设计将补偿所提出的hourglass注意力计算所造成的局部信息损失。然而,由于注意力运行在一个非常低分辨率(或等效的,小尺寸)的特征图上,注意力计算本身必须失去其表征能力。为了补偿损失,对Transformer注意机制进行少量修改;见图2中的“MAttn”。

其主要概念是利用CNN的标准计算元组进行输入,特别是3x3(深度方向)卷积、GeLU激活函数和批处理归一化。注意机制里的输入由查询、键和值组成,本文方法将元组应用于值,因为它构成了注意输出的基础。本文方法的目标是通过促进输入特征图中空间信息的聚合来增强表征能力,同时降低训练难度。为了抵消计算成本的增加,消除了应用于查询和键的独立线性变换,而是对所有三个组件应用相同的逐点卷积。

修改后的注意力计算细节如下,X\in R^{h\times w \times C_{i}}表示注意机制的输入,输出{X}'' \in R^{h\times w \times C_{i}}由以下计算得到:

FFN代表vit中的前馈网络,{X}'被定义为:

其中,Linear是一个具有可学习权值的线性层,PW-Conv表示一个逐点卷积;MHSA的定义是:

式中d为查询和键中每个头的通道号;b\in R^{hw}为可学习偏差,作为位置编码;1\in R^{hw}是全一向量;{Y}'是定义如下:

DW-ConvG indicates a depth-wise convolution followed by GeLU and BN is batch normalization applied in the same way as that in CNNs.

04 | 实验结果

SBCFormer 变体

构建了四个不同大小的SBCFormer,分别为XS、S、B以及L,相关超参配置见下表。

不同网络在ImageNet-1K分类上的性能:

观察到,具有不同模型大小的SBCFormer变体在cpu上实现了更高的精度和延迟之间的权衡;SBCFormer和其他型号之间的性能差距在ARM cpu上比在Intel cpu上更为明显。SBCFormer只能在GPU上实现平庸或较差的权衡,这些结果设计目标一致,因为SBCFormer经过优化,可以在计算资源有限的cpu上运行得更快。

此外:SBCFormer首次以1fps在ARM-CPU上取得了80.0%精度!同等速度下精度大幅优于其他方案!

基于retinanet的不同视觉主干在COCO val2017目标检测中的性能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值