阅读笔记- MetaFormer Baseline for Vision

源码地址:https://github.com/sail-sg/metaformer

image.png

1. 动机&贡献

为什么transformer能够在vision上取得好的效果?其核心在于MetaFormer的结构,那么本文在这个认知的基础上去探索了MetaFormer结构的下限。 在MetaFormer结构上使用了两个很普通的token mixer 均取得了很棒的分类效果。

本文的一些结论如下:

  • MetaFormer结构保证了其模型的下限,即将mixer 换成了identityFormer,其在ImageNet-1K上的top-1 acc依然达到80.4%;
  • MetaFormer结构中使用任何token mixer均能拿到不错的结果。直接使用RandFormer,即随机生成的加权矩阵,在ImageNet-1K的top-1 acc达到81.4%
  • MetaFormer结构能够很容易达到SOTA的效果。这里作者给了两种mixer的形式
    • ConvFormer, 使用MobileNet中的depthwise conv block,就能够超越ConvNeXt
    • CAFormer,将ConvFormer的后两个stage的token mixer换成标准的self-attention,就能刷新目前ImageNet-1K top-1的性能;

2. 方法

2.1 MetaFormer

X' = X + TokenMixer(Norm_1(X)), \\ X'' = X' + \sigma(Norm_2(X')W_1)W_2
其中第2个式子就是带有skip-connection的FFN结构,第1个式子就是attention的结构,注意这里均采用的pre-norm的形式。

2.2 探索的4种MetaFormer结构

  1. IdentityFormer
    IdentityMapping(X) = X
    即直接连接,不进行spatial的融合。
  2. RandFormer
    RandomMixing(X) = XW_R
    其中W_R是随机初始化并进行freeze的矩阵
  3. ConvFormer
    Convolutions(X) = Conv_{pw_2} (Conv_{dw}(\sigma(Conv_{pw_1}(X))))
    其中 Conv_{pw_1}, Conv_{pw_2} 是pointwise 卷积,即逐点的FC层, Conv_{dw}是depthwise的卷积, \sigma是非线性激活函数,注意在depthwise卷积之后没有使用激活函数。
  4. CAFormer
    在ConvFormer的后两个stage换成全局attention。

四种tokenMixer的结构图如下
image.png

除此之外还有三个修改:

  • 激活函数: StarReLU, 能够大大降低FLOPs的同时达到GELU的性能,
    StarReLU(x) = s (ReLU(x)^2) + b
  • scaling branch output, skip-connection 连接处的连接方式, 包括LayerScale (\lambda_l)和ResScale (\lambda_r), 最终选择的是ResScale。
    X' = \lambda_r \cdot X + \lambda_l \cdot F(Norm(X))
  • Disabling biases, MetaFormers种卷积层,全连接层以及归一化层的bias都关闭,并不影响指标,甚至还能有所改善。

3. 结论

  1. MetaFormer结构保证了模型结构的下限,但更好的tokenMixer能带来更高的性能;
  2. 激活函数可以均替换为 StarReLU, skip-connection可以模型ResScale,bias可以默认关闭;
  3. 思考:对于下游任务,应该更多的考虑什么样的结构能够保证指标,如果采用MetaFormer结构是不是有比cross attention更好的结构,或者说使用MetaFormer的结构替换以前的FPN结构能获得更好的性能
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容