社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】百度&中科院开源新的视觉Transformer:卷积与自注意力的完美结合 | CVPR 2022 Oral

机器学习初学者 • 3 年前 • 319 次点击  

以下文章来源于极市平台 ,作者CV开发者都爱看的

论文地址:https://arxiv.org/abs/2204.02557

代码地址:https://github.com/PaddlePaddle/PaddleClas

01

写在前面的话


本文是对自注意力(局部窗口注意力)与传统卷积(depth-wise卷积)相结合的又一次思考,继LVT、ACmix之后,本文思考了一种全新的结合方式,通过这样的设计来有效扬长避短以解决传统视觉任务使用局部窗口自注意力导致的感受野受限与弱建模能力。


02

问题引出


传统视觉任务中为增强局部关系的捕捉效率,使用的自注意力方法多为局部窗口自注意力(如大名鼎鼎的SwinTransformer)而非直接的全局自注意力,但非常重要的一个问题是感受野限制,尽管自注意力范围为全局输入图像,但非重叠局部窗口的切分以及在其内部执行的自注意力计算导致全局输入仅仅在通道维度上共享权重。而且大部分现有网络使用串联结构(如MobileViT),对于局部窗口自注意力的计算来说,这样就会导致窗口内与窗口之间的关系交互少进而阻碍特征学习。所以我们急需一种有效的方法提出,既可以解决局部窗口自注意力中感受野受限的问题,又可以增强通道-空间建模能力,同时性能方面还能有所优化。

03

如何解决


作者等人提出MixBlock来实现卷积与自注意力的结合,通过并行结构、跨分支交互以及特征融合来解决上述问题,并将块进行金字塔式的堆叠实现整体架构MixFormer。下面我们将分成四个部分来详细介绍这一内容。
1.并行结构设计

图1
如图1所示,一个简单的并行结构被提出。值得注意的是,两种不同的计算方式采用不同的窗口大小,在局部窗口自注意力分支中,与过往工作保持一致而采用77的窗口大小;而在depth-wise卷积中,为了计算效率的提升而采用33的窗口大小。二者的不同也体现在通道维度,作者等人根据其FLOPs的比例来调整通道数(如表1)。
表1
这时候就要提出疑问了:为什么要设计为并行结构呢?卷积与自注意力的更好结合方式不是像LVT那样将两种计算方式耦合一部分吗?其实之前在问题引出中还提到了一个关键信息:传统的局部窗口自注意力计算方式会导致窗口内与窗口间的关系交互少而阻碍特征学习。所以并行结构的意义就显而易见:在解决有限感受野的同时,结合特征交互实现同时建模窗口内与窗口间的关系,从而实现更好的特征学习。接下来我们就详细剖析一下双向交互的设计。
2.双向交互设计
一个大的前提是:共享权重限制了共享维度中的建模能力。所以在局部窗口自注意力的计算中,由于在通道维度上的权重共享,导致该维度的弱建模能力。
Depth-wise卷积有一个很好的特性,它可以在关注通道的同时在空间维度上共享权重(但这也不可避免的导致空间维度建模能力弱)。作为一个分支的计算,分支的输出可以为局部窗口的分支提供一种“线索补充”,同样局部窗口分支的输出也可以为卷积分支带来“线索补充”。因为卷积分支存在空间维度建模能力弱的问题,自注意力分支存在通道维度建模能力弱的问题,所以设计双向交互可以同时实现对两个分支通道-空间维度的建模能力增强。
图2
如图2,对于卷积->自注意力分支的交互实现,作者等人采用类SE的设计,即DwConv 33的输出先经过全局平均池化层(GAP),接着使用11卷积来进行通道间的信息交互,在BN+GELU之后再度使用11卷积调整维度,最后经过sigmoid函数将特征值化为概率分布作用到自注意力分支的V计算中。对于自注意力->卷积分支的交互实现,与前者有所相似,但不同的是没有GAP,且经过最后一次11卷积后,通道数变为1,sigmoid之后变为一张空间维度上的概率分布图,从而作用到卷积分支中的DwConv 3*3输出。
这一交互设计十分巧妙,因为卷积分支通道建模能力强于自注意力分支,就在卷积分支生成通道维度的注意力从而应用于自注意力分支,增强其通道维度建模能力,反之亦然。
3.前馈层设计
在传统的视觉Transformer中,自注意力计算的后面紧跟着是前馈层来实现信息交互。在本文中,将前馈层设计为自注意力分支与卷积分支进行concat操作之后的MLP计算,而不是单独的放到自注意力分支后,这样可以进一步增强两个独立分支的信息交互,本人将其视作双向交互设计的补充。具体的可用公式表示如下:
其中MIX代表分支间的双向交互操作,即特征混合函数。在这之前,输入特征将通过两个线性投影层和两个范数层投影到并行分支进行相关计算。
为什么前馈层使用MLP而不是DwConv或者其他方式呢?作者等人使用MLP的主要原因是为了保持块的结构简洁有效,当然在实验部分,将MLP与DwConv方式对比(表2),发现并没有显著的效果提升,因此前馈层设计仅由MLP实现。
表2
4.MixFormer整体架构
如图3,基于MixBlock,一个金字塔结构的设计被提出。四个阶段的下采样率分别为{4, 8, 16, 32}。同时类比于MobileNets、EfficeintNets的设计,在网络的尾部,作者等人引入投影层将通道数增加至1280,旨在保留更多细节,为后续分类头提高性能。
对于每个阶段堆叠的MixBlock数量设计,作者等人提出了不同的比例配置,并在后续实验汇总进行了粗略的验证(如表3)。
图3
表3

04

思考


本文的出发点是为了解决传统局部窗口自注意力中存在的问题,但是也仅仅是局部窗口,是否能推衍至全局自注意力计算并取得显著效果并不明确。全局注意力的堆叠计算,一般来说更像是一张模糊的图片随着计算的进行逐渐变得清晰;而卷积的堆叠计算,则像是一张清晰的图片从局部的纹理等细节逐渐扩大到整张图片。因此如果在全局自注意力中引入,本文中的并行设计可能并不十分契合,因为全局自注意力并没有感受野受限的问题,来自卷积的特征信息也仅仅可以提高自注意力分支的通道建模能力,而空间建模能力是否能从全局自注意力分支中获得是个未知数。
当然作者等人进行了这方面的尝试,对 DeiT-Tiny(Training data-efficient image transformers & distillation through attention.)进行了一个简单的实验,但得到了一个并不理想的结果,效率不升反降(与ImageNet基线对比:71.3%对72.2%)。
综合来说,本文在局部窗口自注意力中的应用获得了巨大的成功(表4),为其中的感受野受限与通道弱建模问题提供了有效的解决方案。
表4

END


往期精彩 回顾




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/134307
 
319 次点击