论文地址:https://arxiv.org/abs/2205.12956v2
代码地址:https://github.com/sail-sg/iFormer
主要内容:本文针对Transformer捕获高频的局部信息时表现出的不足,提出Inception Transformer混合架构(iFormer)。灵活移植Inception的卷积与最大池化,并以通道拆分机制来提高效率和频率斜坡结构来权衡高低频分量。
1. 摘要
Transformer在构建远程依赖关系表现不错,但是捕捉高频信息就不太行。图像中的低频信息和高频信息也叫做低频分量和高频分量。其中高频信息包括图像强度(亮度/灰度)变化剧烈的像素点,例如局部的边缘和纹理。而低频信息则包括图像强度(亮度/灰度)变换平缓的像素点,例如场景或物体的全局形状和结构。如图所示,将原图进行高低频信号分离后,可以很明显看出高频信号相比低频包含显著的边缘与轮廓信息。
Transformer捕捉高频信息=处理局部信息存在问题。为了解决这个问题,本文提出了Inception Transformer,简称iFormer,可以有效学习低频和高频信息。灵活移植Inception的卷积与最大池化,并以通道拆分机制来提高效率和频率斜坡结构来权衡高低频分量。
2.创新点
文章的框架图如图:是一个多层级的框架,每个stage图片大小和通道都发生变化。
iFormer block结构在图右,和一般的encoder很像,原来 Multi-head的地方被本文提出的Inception Mixer代替。
本来的主要创新点就是Inception token Mixer(ITM) ,如下图所示,maxpooling和DWConv两个分支作为高频混合器(High-frequency mixer),attention分支作为低频混合器。
1. High-frequency mixer
拿到特征图X∈,channel一分为二,一半给高频混合器,
一半给低频混合器,
其中:
高频里面做了两个分支,通道继续一分为二。maxpool分支表示为,DWConv分支表示为。
2.Low-frequency mixer
低频就比较简单了,比一半的多头注意力,多了一个在进入注意力计算前的一个 average pooling层用来降低计算参数量,也是目前transformer里面降参的常用方法了。
(这里要注意一下前两个stage,pooling和upsample的 kernel size和stride是2)
3.Fusion
因为还用了一个上采样的邻近插值办法,文中提到这样会导致相邻点的过度平滑,所以在将低频和高频混合器输出沿着channel维度concat后,使用了一个Fusion模块。即一个深度可分离卷积和一个跨通道的线性层。
Y就是最终Inception Token Mixer的输出。接下来的操作和一般encoder一样。残差后经过一个FFN输出。
最终the Inception Transformer block的公式表示如下:
ITM是Inception Token Mixer,FFN是前馈神经网络(两个线性层+ReLU,不知道的去看attention is all you need那篇文章)
4.Frequency ramp structure(斜坡策略)
这个比较好理解了,底层在捕捉高频细节方面发挥着更多的作用,而顶层在建模低频全局信息方面发挥着更多的作用。所以就将更多的通道从较低层到较高层逐渐分割给低频混频器,减少高频混合器的通道数。具体来说,主干有四个阶段,具有不同的通道和空间维度。对于每个块,我们定义了一个信道比,以更好地平衡高频和低频分量。低频比上升,高频比下降,达到了想要的效果。
从消融实验中可以看出,所提的混合器和斜坡策略都起到了效果。
可视化结果:iFormer注意到了鸟脚的树枝,说明是学习到了局部的信息
ImageNet-1K分类结果:
384 × 384 在 ImageNet-1K微调结果
COCO val2017结果:
语义分割结果:
总结:文章看起来,这个Mixer和斜坡策略还是比较有意思的,用卷积减少了transformer的参数量。实现起来也很简单。缺点是设计了频率斜坡结构。当然缺点也是显而易见的:需要手动设定通道比。这样对于不同的任务,需要一定的经验才可以很好的完成这项工作。