赞
踩
【ICLR2022】CrossFormer: A versatile vision transformer
论文:https://arxiv.org/abs/2108.00154
代码:https://github.com/cheerss/CrossFormer
论文代码级的解析推荐阅读 FlyEgale 的文章:浅谈CrossFormer - 知乎
首先简单回顾下ICCV2021的 PVT,架构图如下所示。因为VIT没有考虑多尺度信息,PVT就通过特征下采样集成了多尺度信息。具体包括四个阶段:第一个阶段,输入是 H × W × 3 H\times W\times 3 H×W×3 的图像,首先4x4分块得到 W 4 × H 4 \frac{W}{4}\times\frac{H}{4} 4W×4H个patch(即token),每个patch 通过全连接层转化为 C 1 C_1 C1维向量,这样就得到了 transformer block 的输入。因为该模块的输入输出特征维度是相同的,因此第一阶段输出是 W 4 × H 4 × C 1 \frac{W}{4}\times\frac{H}{4}\times C_1 4W×4H×C1。到第二、三、四阶段时,token的尺度分别为8,16,32,这样就集成了多尺度信息。
CrossFormer提出了跨尺度的基于跨尺度注意力机制的视觉Transformer,总体架构如下图所示,可以看出使用和PVT相同的金字塔结构,不同的地方在于:
CEL 出现在每个stage的开头,它接收上一个stage的输出为输入,为当前的stage生成 embedding。以第一个stage的CEL层为例,如下图所示,用4个同尺寸的 kernel 进行卷积(步长都是4),得到的特征维度依次为【64,32,16,16】。有趣的话,小卷积得到的特征维度高,大卷积得到的特征维度低。作者解释是这样的原因为了避免大卷积引入更多计算量。这个模块 FlyEgle 有代码级的详细解析,可以参考他的文章。
为降低计算量,作进行将自注意力分为 short distance attention(SDA)和 long distance attention (LDA)。常规的注意力计算是全局计算token间的关系,但是 swin 的经验表明,局部对token分组,计算组内token间的关系可以达到很好的效果,也会节省计算量。如下图所示,SDA把邻近的token分为一组,每组为 3x3=9 个 token;而LDA为有间隔的采样,同样是 3x3=9 个token为一组。SDA计算时是将下图输入的 9 x 9 x C 的输入矩阵reshape成 9 x (3 x 3) x C ,这样对 9个 3x3 做 attention 即可。LDA的计算相对复杂,具体推荐阅读 FlyEgle 文章的代码解读。
论文还有一个比较关键的部分:动态位置编码 Dynamic Position Bias (DPB),相对比较复杂,而论文里也没有比较详细的介绍 。从实验结果来看,效果和 swin transformer 的位置编码效果接近,没有太大区别。FlyEgle 文章里有比较详细的介绍,感兴趣可以阅读。
CrossFormer 参考了 PVT 和 swin 的思想,计算注意力时交替使用“局部注意力”和“长距离注意力”,两个结合起来能够取得非常好的效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。