论文地址:https://arxiv.org/abs/2105.03889
代码:https://github.com/pengzhiliang/Conformer
发表于:ICCV’21
Abstract
在卷积神经网络(CNN)中,卷积运算善于提取局部特征,但在捕捉全局表征方面遇到困难。在Vision Transformer中,级联的自注意力模块可以捕捉到长距离的特征依赖,但不幸的是会恶化局部特征细节。在本文中,我们提出了一种混合网络结构,称为Conformer,以利用卷积操作和自注意力机制来增强表征学习。Conformer植根于特征耦合单元(Feature Coupling Unit,FCU),它以交互的方式融合了不同分辨率下的局部特征和全局表示。Conformer采用了一种并发结构,使局部特征和全局表征得到最大程度的保留。实验表明,在参数复杂度相当的情况下,Conformer在ImageNet上比Vision Transformer(DeiT-B)的性能要好2.3%。在MSCOCO上,它在目标检测和实例分割方面分别比ResNet-101的mAPs高出3.7%和3.6%,显示出成为一个通用主干网络的巨大潜力。代码可在https://github.com/pengzhiliang/Conformer上找到。
I. Motivation
大致意思是,CNN的局部特征提取能力很强,但是全局上下文提取能力不行;Transformer全局上下文提取能力很强,但是局部细节提取能力不行。也就是说,我们得想办法把CNN与Transformer的各自优势给结合起来。基于这一思路,已经有一些尝试,例如将CNN的feature map作为特征图输入transformer,或者改进transformer自身的结构以引入局部特征。而本文的思路是,与其尝试在transformer中去引入一点点局部特征,不如直接两种backbone都用,然后把各自的特征给结合起来。
II. Network Architecture
网络的整体结构可以看右上的小图。可以发现,整个网络有两个分支,一个Transformer分支(绿色),由多个Transformer block组成;一个CNN分支,有多个Conv block组成。本文要做的就是怎么处理CNN与Transformer特征的交互,如图中FCU所示,该结构将会在后文进行进一步说明。
注意在右上角的小图里还有个Stem模块,这个东西其实就是一个基础的卷积块,用于提取浅层细节特征并送入transformer中,即本文transformer的输入同样为特征图而非原始图像。
III. Feature Coupling Unit
其实看上面那张图,FCU实际上的结构也是很简单的:
CNN to Transformer:首先,用一个1×1卷积将通道数与Transformer对齐,接着下采样,最后通过一个LayerNorm层。
Transformer to CNN:首先,上采样,然后用一个1×1卷积将通道数与CNN对齐,最后通过一个BatchNorm层。
其实本质上就是这两种feature之间存在gap,因此在concat之前需要使用对应的标准化层进行处理,至于对齐通道数与特征图尺寸属于必须操作。