1、为什么要用Multi-Scale的ViT?
patch大小会影响ViT的准确性和复杂性;具有细粒度的patch大小,ViT性能更好,但会导致更高的FLOPs和显存消耗。例如,patch大小为16的ViT比patch大小为32的ViT好6%,但前者需要更多4×的FLOPs。
受此启发,作者提出的方法是利用来自更细粒度的patch大小的优点,同时平衡复杂性。更具体地说,作者首先引入了一个双分支ViT,其中每个分支处理不同patch大小的特征,然后采用一个简单而有效的模块来融合分支之间的信息。
此图为Cross-Attention Multi-Scale Vision Transformer,即CrossViT的网络结构。模型主要由K个多尺度Transformer编码器组成,其中每个编码器由两个分支组成:
L-Branch :
大分支利用粗粒度的patch大小(Pl),更多的Transformer编码器和更大的embedding维度。
S-Branch :
小分支对细粒度的patch大小(Ps))进行操作,具有更少的编码器和更小的embedding维度。
两个分支的输出特征在Cross-Attention中融合L次,利用末端的两个分支对CLS token进行预测。对于两个分支的每个token,作者还在多尺度Transformer编码器之前添加了一个可学习的位置embedding,以学习位置信息。
2、多尺度特征融合:
有效的特征融合是学习多尺度特征表示的关键。在本文中作者探索了四种策略:
(a)All-Attention Fusion是简单地concat来自两个分支的所有token,而不考虑每个token的属性。因为所有的token都是通过自注意模块计算的,其时间复杂度也是跟输入特征大小呈二次关系。
(b)Class Token Fusion只将 CLS Token 融合,因为它可以被视为一个分支的全局表示。
(c)Pairwise Fusion成对融合,根据它们的空间位置将它们合并。其中相对应空间位置的 Token 融合在一起,CLS Token 则分别融合。但是,这两个分支处理不同大小的patch,因此具有不同数量的patch token。因此作者首先执行插值操作来对齐空间大小,然后以成对的方式融合两个分支的patch token。
(d)Cross-attentions Fusion交叉注意力,将来自一个分支的 CLS Token 和来自另一个分支的 Patch Token 融合在一起。为了更有效地融合多尺度特征,作者首先利用每个分支的CLS token作为代理,在另一个分支的patch token之间交换信息,然后将其投影到自己的分支。
由于CLS token已经学习了自己分支中所有patch token之间的抽象信息,因此与另一个分支中的patch token的交互有助于融合不同尺度的信息。与其他分支token融合后,CLS token在下一层Transformer编码器上再次与自己的patch token交互,在这一步中,它又能够将来自另一个分支的学习信息传递给自己的patch token,以丰富每个patch token的表示。