关注公众号,发现CV技术之美

 写在前面

Transformer由于其强大的建模能力,目前在计算机视觉领域占据了重要的地位。在这项工作中,作者探究了Transformer的自注意(Self-Attention)模块是否是其实现图像识别SOTA性能的关键 。为此,作者基于现有的基于MLP的视觉模型,建立了一个无注意力网络sMLPNet。

具体来说,作者将以往工作中用于token混合的MLP模块替换为一个稀疏MLP(sMLP)模块。对于二维图像token,sMLP沿轴向(横向或者纵向)应用一维MLP,参数在行、列维度共享。通过稀疏连接权重共享 ,sMLP模块显著降低了模型参数的数量和计算复杂度,避免了MLP模型的内在问题(如过拟合、参数量大、计算量大)。

当仅在ImageNet-1K数据集上训练时,sMLPNet在只有24M参数下达到81.9%的Top-1精度,比相同模型大小约束下的大多数CNN和视觉Transformer要好得多。当扩展到66M参数时,sMLPNet达到了83.4%的Top-1精度,这与SOTA的 Swin Transformer相当。

 1. 论文和代码地址

Sparse MLP for Image Recognition: Is Self-Attention Really Necessary?

论文地址:https://arxiv.org/abs/2109.05422
代码地址:未开源
sMLP Block复现代码:https://github.com/xmu-xiaoma666/External-Attention-pytorch#5-sMLP-Usage

 2. Motivation

自AlexNet提出以来,卷积神经网络(CNN)一直是计算机视觉的主导范式。随着Vision Transformer的提出,这种情况发生了改变。ViT将一个图像被划分为不重叠的patch,并用线性层将这些patch转换为token,然后输入到Transformer中进行处理。

Transformer编码器由多头自注意网络(Multi-Head Self-Attention)和前馈网络(FFN)组成,来实现空间信息混合和通道信息混合。当在一个非常大的数据上进行预训练时,ViT在图像识别任务上表现得非常好。接着DeiT进一步证明了只在ImageNet-1K上训练时,通过适当的数据增强和正则化技术,无卷积的Vision Transformer也可以实现SOTA的图像识别精度。

目前,无卷积的Vision Transformer主要存在两个核心的思想:首先,全局依赖性建模很重要 。不仅如此,它甚至可以取代卷积操作的局部建模。第二,自注意很重要 。尽管ViT和DeiT表现良好,学术界并没有完全接受这两种观点。

一方面,研究人员挑战了用全局建模代替局部建模的必要性既然局部偏置在自然图像中是有效的,为什么要通过全局自注意模块来学习它,而不是直接将它注入到网络中呢 ?此外,全局自注意对于输入token的数量具有二次计算复杂度。因此,网络结构不有利于高分辨率输入,对金字塔结构并不友好。

基于这一点,Swin Transformer通过限制局部窗口内的自注意操作,将局部偏置注入回网络中。这种设置还控制了计算的复杂度,并允许使用金字塔结构和多阶段处理。Swin Transformer的优越性能表明了局部偏置和多阶段处理的有效性。

另一方面,研究人员也挑战了Self-Attention的必要性 。MLP-Mixer也建模了全局依赖关系,但它采用了一个MLP块,而不是一个自注意模块来实现。MLP-Mixer的整体架构与ViT相似。输入图像被分成多个patch,然后线性层将patch映射到token中。该编码器包含用于空间混合和通道混合的交替层。

唯一的主要区别是,空间混合模块是由一个MLP块实现的。MLP-Mixer继承了ViT的所有缺点,且由于参数数量过多,容易发生过拟合 。因此,MLP-Mixer和SOTA模型的性能还是存在一定差距,尤其是在不预训练的情况下。因此,作者在本文中探究了:在解决了所有的缺陷后,一个无注意力的网络是否有可能实现在图像识别上的SOTA性能?

因此,作者设计了一个无注意力的网络,称为sMLPNet,它只使用卷积和MLP作为构建块。sMLPNet采用了与ViT和MLP-Mixer类似的体系结构,且通道混合模块与他们完全相同。在每个token混合模块中,采用深度卷积来利用局部偏置,并使用改进的MLP来建模全局依赖关系

具体来说,作者提出了具有轴向(即横向和纵向)全局依赖建模特征的稀疏MLP(sMLP)模块(如上图右所示)。sMLP显著降低了计算的复杂度,并允许采用金字塔结构进行多阶段处理。因此,sMLPNet能够在更小的模型上实现与Swin Transformer相同的图像识别性能。

在本文中,作者研究了Transformer的关键组成部分(即Self-Attention)是否是图像理解的真正关键因素 。基于过去视觉模型的设计思想,作者采用了在设计时采用了局部偏置和金字塔结构。此外,作者也采用了全局依赖建模的思想,但使用稀疏MLP模块来实现。

基于以上思想,作者建立了一个名为sMLPNet的无注意力网络,实现了SOTA图像识别性能。本文表明,自注意力可能不是视觉模型设计的核心组成部分。相反,正确使用局部偏置、金字塔结构和对计算复杂度的控制是设计高性能视觉模型的关键

 3. 方法

3.1. Design Guidelines

在这项工作中,作者保留了CNN使用的一些重要的设计理念,并添加了受Transformer启发的新组件。设计指南如下:

1.采用类似于ViT、MLP-Mixer和Swin Transformer的架构,以确保一个公平的比较。

2.显式地将局部偏置注入到网络中。

3.探索不使用自注意模块的全局依赖关系。

4.在金字塔结构中进行多阶段处理。

3.2. Overall Architecture

上图展示了本文网络的整体架构。与ViT、MLP-Mixer和Swin Transformer类似,空间分辨率为H×W的输入图像被分割为不重叠的patch。作者在网络中采用了4×4的patch大小,每个patch被reshape成一个48维的向量,然后由一个线性层映射到一个c维embedding,整张图像可以表示为的tensor。

整个网络由四个阶段组成。除第一阶段从线性embedding层开始外,其他阶段从patch合并层开始,将空间维数减少2×2,将通道维数增加2倍。patch合并层由一个线性层实现,它以每个2×2个相邻patch的concat特征作为输入,输出合并后的patch的特征。然后,将新的图像token输入到token混合模块和通道混合模块中。

token混合模块如上图所示。在这个模块中,作者使用了3x3的深度卷积来注入局部偏置。这个操作非常高效,因为它包含很少的参数,并且在推理过程中需要很少的FLOPs。

此外,作者还尝试用sMLP模块来建模全局依赖关系。稀疏性权重共享特性 使得sMLP比原来的MLP模块更不容易过拟合。sMLP的计算复杂度的大大降低,使其能够在第一阶段中以的空间分辨率进行操作。

通道混合模块由FFN实现,与MLP-Mixer中的实现方式完全相同。FFN由两个线性层和一个GeLU激活函数组成。第一线性层将维度从D扩展到αD,第二层将维度从αD缩减回D,其中α是一个可调的超参数。

3.3. Sparse MLP (sMLP)

作者设计了一个稀疏MLP来解决原始MLP的两个主要缺点。首先,减少参数的数量以避免过拟合 ,特别是当网络在中等大小的数据集上进行训练时。其次,降低计算的复杂度 ,特别是当token的数量很大的情况下,以实现金字塔结构中的多阶段处理。

在稀疏MLP中,作者使用稀疏连接权重共享 来实现,如上图所示。sMLP中的每个token只直接与同一行或同一列上的token交互。此外,所有行和所有列可以分别共享相同的投影权重。它由三条路径组成。除了中间所示的直连映射外,另外两条路径分别负责沿水平方向和垂直方向混合token。

设表示输入token的集合。在水平混合路径中,将特征reshape为,并对每一个行应用一个权重为的线性层来混合信息。

在垂直混合路径上也应用了类似的操作,线性层的特征为权重为。最后,将三条路径的输出融合在一起,产生与输入tensor维度相同的输出tensor。作者用FC层来实现这一步:

sMLP结构的pytorch代码如下所示:

如果该模块重复两次,每个token就可以聚合整个二维空间的信息。换句话说,sMLP虽然直接连接稀疏,但却也能有效地获得了全局感受野。

下面来比较一些计算复杂度,本文sMLP的复杂度为:

MLP-Mixer的token混合部分的复杂度为:

可以看出,本文的方法将复杂度控制在了内,而MLP-Mixer为,其中。这使得本文的方法可以处理更大的N,并最终在金字塔结构中实现多阶段处理。

3.4. Model Configurations

基于上面提出的结构,作者提出了三种不同大小的模型,所有通道混合的FFN中的膨胀参数为α=3,不同结构的超参数设置如下:

其中为隐藏层的通道数量。

 4.实验

4.1. Ablation Study

Local and global modeling

从上表可以看出,去掉局部建模之后,图像识别精度显著下降至80.6%。这表明,DWConv是一种非常有效的建模局部依赖关系的方法。去掉全局建模之后,图像识别精度显著下降至80.7%,因此局部建模和全局建模在sMLPNet中都是重要的。

接着,作者在不同阶段删除了sMLP,结果如上表所示。所以看出,每个stage的sMLP都是重要的。

Fusion in sMLP

作者尝试了不同的方法来融合sMLP中的特征,可以看出,本文的方法和另外两种轻量级的操作相比具备性能上的优势。

Branches in sMLP

作者研究了三个分支中残差分支的作用,可以看出,加入残差分支能够带来性能上的提升。

Multi-stage processing in pyramid structure

作者还比较了单阶段和多阶段版本的MLP网络的性能,可以看出,多阶段版本可以达到更高的准确率。

4.2. Comparison with state-of-the-art

此外,作者还比较了本文的sMLPNet和SOTA模型的性能、参数和计算量。结果表明,一个无注意的模型可以达到SOTA的性能。

 5. 总结

基于 sMLP块,作者构建了一个MLP视觉识别模型sMLPNet。本文提出的sMLP块具有稀疏连接权重共享 的特性,sMLP通过分别沿轴向(即横向、纵向)聚合信息,避免了传统MLP的二次模型大小和二次计算复杂度。实验结果表明,这极大地促进了MLP视觉模型的性能。

当前,基于Transformer的模型已经达到了更高的性能。在性能上,本文的方法确实和目前的SOTA模型还存在一定的差距。不过呢,个人认为,作者提出本文的模型也不是为了追求极致的性能,而是为了展示无注意网络的表现,挑战自注意机制的必要性。

通过一系列的实验,作者也承认了基于MLP的网络结构有其固有的局限性。由于FC层的固定性质,MLP模型难以处理任意分辨率的输入图像。这使得MLP模型很难应用于一些重要的下游任务,如目标检测和语义分割。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

END

欢迎加入「计算机视觉交流群

Self-Attention真的是必要的吗?微软中科大提出Sparse MLP,降低计算量的同时提升性能!...相关推荐

  1. 【深度学习】Transformer 向轻量型迈进!微软与中科院提出两路并行的 Mobile-Former...

    作者丨happy 编辑丨极市平台 导读 本文创造性的将MobileNet与Transformer进行了两路并行设计,穿插着全局与特征的双向融合,同时利用卷积与Transformer两者的优势达到&qu ...

  2. Transformer 向轻量型迈进,微软与中科院提出两路并行的 Mobile-Former

    作者丨happy 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. VisionTransformer向轻量型迈进,微软与中科大提出两路并行的Mobile-Former 已有的Tra ...

  3. CVPR2019|微软、中科大开源基于深度高分辨表示学习的姿态估计算法

    作者 | 周强(CV君) 来源 | 我爱计算机视觉(公众号id:aicvml) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_source=cs ...

  4. 微软亚研提出VL-BERT:通用的视觉-语言预训练模型

    机器之心发布 作者:Weijie Su.Xizhou Zhu.Yue Cao.Bin Li.Lewei Lu.Furu Wei.Jifeng Dai 来自中科大.微软亚研院的研究者们提出了一种新型的通 ...

  5. CVPR2019 | 微软、中科大开源基于深度高分辨表示学习的姿态估计算法

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天arXiv出现了好几篇被CVPR 2019 接收的论文. 其中来自微软和中国科技大学研究学者的论文<Deep High-Resolution ...

  6. 【Azure】微软 Azure 基础解析(六)计算服务中的虚拟机 VM、虚拟机规模集、Azure Functions 与 Azure 容器(ACI)

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中. 本系列文章列表如下: [Azure]微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区 ...

  7. 又好又好考?中科大软件学院真的好考么?

    这段时间,小编又在考研群里发现一些有意思的内容: 有群里的同学这样说: 数二英二408,初试310,复试不刷人,安徽大水区 就是考生们口口相传的 中科大软件学院 又好又好考 数二英二,省时省力,安徽大 ...

  8. Sanic异步框架真的这么强吗?实践中找真理

    Sanic异步框架真的这么强吗?实践中找真理,通过对Sanic.Flask.Spring三个框架进行压力测试得出答案! 目录 Sanic异步框架真的这么强吗?实践中找真理,通过对Sanic.Flask ...

  9. 业界真的需要水下数据中心?微软的确认为如此

    当前,市场对于数据处理的依赖和消费需求越来越大,因此迫使IT业界非常有必要开发出一系列创新的方法来存储海量的数据信息.作为一项名为"纳蒂克项目(Project Natick)"研究 ...

最新文章

  1. QML实现酷炫的 Cover Flow 效果(PathView)
  2. 怎么使用jstack精确找到异常代码
  3. 绕过CDN查找网站真实IP方法收集
  4. 如何将iso文件安装到VirtualBox里的ubuntu去
  5. Argument list too long 文件数过多
  6. md5sum/opensll md5
  7. python中各种@property、@xxx.setter、@classmethod、@staticmethod 都是些啥啊?
  8. Android studio 如何导入并引用Library工程
  9. python分布式爬虫系统_python简单分布式爬虫
  10. Microsoft Navision 4.0帮助您消除日常工作流程中的烦恼的7条途径
  11. jquery中的ajax写法
  12. MacOS下AndroidStudio无法启动
  13. android输入法剪贴板,QQ输入法手安卓V5.4剪贴板 任性粘贴
  14. 《天才在左 疯子在右》读书记
  15. string split 相关知识
  16. 谷歌您的个人资料_如何控制其他人可以看到的有关您的Google个人资料的信息
  17. Keil5-MDK 使用编译步骤及异常与修改(生成axf文件和bin文件)
  18. Linux-mdadm命令实现软RAID
  19. springmvc 采用MultipartResolver进行文件上传
  20. 想知道手机视频压缩app哪个好用?这几个工具值得一试

热门文章

  1. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(6)--(计算共线矩阵T)
  2. 数理统计--相关系数
  3. BCGControlBar MFC对话框换肤 续
  4. win7桌面计算机没了,win7系统桌面的计算机图标没了的解决方法
  5. python输入数据pyqt5_python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例...
  6. c语言大学期末考试题及答案,大学C语言期末考试题4及答案
  7. loss 加权_【转载】keras 自定义 loss损失函数, sample在loss上的加权 和 metric
  8. java获取cpu核数_vn.py社区精选12 - 策略参数优化,你需要懂得压榨CPU!
  9. java c 转换_Java怎么转换c语言?
  10. java channel源码_java nio ServerSocketChannel源码分析