https://arxiv.org/abs/2105.03889
https://github.com/pengzhiliang/Conformer
ICCV2021
Conformer的组成成分:a stem module,dual branches,FCUs,two classifiers
Stem module:7*7 conv with stride 2,3*3 max pooling with stride 2
dual branches:CNN分支(ResNet,提取局部信息)和transformer分支(ViT,提取全局信息)
Feature Coupling Unit(FCU):结合这两种不同的信息
CNN branch:
采用特征金字塔结构,特征图的分辨率随网络深度的增加而降低,而通道数增加。
整个分支分为4 stage,每个stage由多个卷积块组成,每个卷积块包含nc个bottleneck。
按照ResNet中的定义,bottleneck包含一个1*1 down-projection convolution、一个3*3空间卷积、一个1*1 up-projection convolution,以及输入和输出之间的残差连接。
在实验中,第一个卷积块的nc设为1,随后的N-1个卷积块中nc大于等于2。
Visual transformers 将图像 patch 投影到一个向量中,导致局部细节丢失。而在 CNN 中,卷积核在重叠的特征图上滑动,这提供了保留精细局部特征的可能性。因此,CNN 分支能够为 transformer 分支连续提供局部特征细节。
Transformer branch:
在 ViT 之后,这个分支包含 N 个重复的 Transformer blocks。每个 transformer block 由一个多头自注意力模块(multi-head self-attention module)和一个 MLP block(包含一个上投影 fc 层和一个下投影 fc 层)组成。LayerNorms应用于自注意力层和 MLP block 中的每一层和残差连接之前。对于 tokenization,通过线性投影层( linear projection layer)将主干模块生成的特征图压缩为没有重叠的 14×14 patch embeddings,该线性投影层是一个 4×4 卷积,步长为 4。然后将类 token添加到 patch embeddings 进行分类。考虑到 CNN 分支(3×3 卷积)对局部特征和空间位置信息进行编码,不再需要位置 embeddings。这有助于提高下游视觉任务的图像分辨率。
Feature Coupling Unit:
CNN得到的特征图和transformer得到的patch embeddings之间存在偏差,因此提出FCU以交互的方式将局部特征与全局表示耦合起来。
一方面,CNN 和 transformer 的特征维度是不一致的。 CNN 特征图的维度为 C × H × W(C、H、W 分别为通道、高度和宽度),而 patch embeddings 为 (K + 1) × E,其中 K、1 和 E分别表示图像块 patches 的数量、类 token 和 embedding 维度。
当输入到 Transformer 分支时,特征图首先需要通过 1×1 卷积来对齐 patch embeddings 的通道数。然后使用下采样模块来完成空间维度对齐。最后,特征图添加了 patch embeddings。
当从 transformer 分支反馈到 CNN 分支时,patch embeddings 需要上采样以对齐空间尺度。然后通过 1×1 卷积将通道维度与 CNN 特征图的维度对齐,并添加到特征图中。同时,使用 LayerNorm 和 BatchNorm 模块对特征进行正则化。
另一方面,特征图和patch embeddings存在很大的语义区别。特征图是通过局部的卷积操作得到的,而patch embeddings是通过全局的自注意力机制得到的。FCU应用于每个block中,从而弥合这种语义之间的差距。
可视化后发现:
- Conformer的CNN分支相比传统CNN(ResNet),倾向于激活更大的区域,而不是局部区域,这表明transformer和CNN的耦合增强了长距离特征依赖性。图1(f)4(a)
- transformer分支的patch embeddings因为CNN分支提供的局部特征而保留了局部细节。图1(d)(h)
- 注意力区域更完整,而背景被抑制,这证明Conformer学习到的特征表示具有较高的判别能力。图4(b)
通过调整 CNN 和 Transformer 分支的参数,得到了模型的一些变体,分别为 Conformer-Ti、-S 和 -B。 Conformer-S 的详细信息在table 1中。Conformer-Ti/B 见附录。Conformer-S/32 将特征图拆分为 7×7 个 patches,transformer 分支中的 patch 大小为 32×32。
Conformer 在 ImageNet-1k(有 1.3M images)训练集上训练,并在验证集上进行测试。为了使 transformer 收敛到合理的性能,我们遵循 DeiT中的数据增强和正则化方法。这些方法包括 Mixup、CutMix、Erasing、Rand Augment 和 Stochastic Depth。
模型使用 AdamW 优化器训练了 300 个 epoch,batchsize 为 1024,weight decay 为 0.05。初始学习率设置为 0.001,并按 cosine schedule 衰减。
为了验证 Conformer 的多功能性,在 MSCOCO 数据集上的 instance-level 任务(目标检测)和 pixel-level 任务(实例分割)上对其进行了测试。Conformer 作为主干,在没有额外设计的情况下进行迁移。