首先,MetaAI 这篇 ConvNeXt 论文实验做的非常充分,符合其论文的一贯风格,读起来赏心悦目,推荐大家去读读原文。
从 ResNet 出发通过不断的 Swin Transformer 化验证了 Conv 其实不比 Transformer 差什么。这是一个自然的结论,是一个很容易想到的结论,下面详细说说为啥?
(1) 从 ResNet 到 ViT
ResNet 是一个非常优雅的 ConvNet,采用滑动窗口模式提取特征,并输出多层金字塔特征图,非常适合各种下游任务。相比 ResNet,ViT 采用全局感受野的注意力机制提取特征,从一开始 ViT 就强调相比 ResNet 这种 Conv 局部感受野特征提取操作,全局自注意力模式会更加优异,当数据量巨大时候性能优异度更加明显。
ViT 的这种全局自注意力特征提取模式的优异性,慢慢已经得到了大家的认可,后续的诸多 SOTA 刷榜论文也证明了这点。
(2) 从 ViT 到 MLP-Mixer 到 ConvMixer
随着 Transformer 的发展,上述结论被人质疑,典型的如 MLP-Mixer 和 ConvMixer。
MLP-Mixer 认为其实无需注意力机制 Attention ,仅仅需要 Token-Mixing MLP 和 Channel-Mixing MLP 即可。因为自注意力模块做的事情是 token mixing,而后续的 FNN 模块做的事情是 channel mixing,MLP-Mixer 中证明采用 MLP 实现 token mixing 功能,而无需自注意力模块,性能也是和 ViT 类似。
ConvMixer 也是相同思路,但是他的 Token-Mixing 不再采用自注意力或者 MLP,而是直接用 3x3 DW 卷积即可。
上述两篇论文都间接说明了 ViT 或者 Transformer 中强调的全局自注意力优异性并不成立,ViT 的成功或许来自 Transformer 整体精心设计的架构
相同的观点做法有很多,典型的还有 ResMLP、CycleMLP、gMLP、MetaFormer 和 An Empirical Study of CNN, Transformer, and MLP 等等。
(3) 从 ViT 到 Swin Transformer
在 ViT 的诸多改进中,Swin Transformer 算是一个非常成功的改进。其针对 CV 任务中一般是多尺度图片,且图片分辨率很大的问题,创造性的提出了局部注意力计算模块 LSA,即仅仅在窗口内计算自注意力,相比 ViT,性能也有极大的提升,将 Transformer 实用性提升了一大步。
(4) 从 Swin Transformer 到 ELSA
Swin Transformer 解决了巨大计算量问题,但是依然有自身的问题:
解决前两个问题的典型算法是 Imporved MViT、Twin 和 Shuffle Transformer 等等,这类算法都是在考虑如何在去掉移位 LSA OP,而是通过其他方式引入窗口间信息交互。
一个更彻底的研究 Swin Transformer 的算法是 ELSA,其发现一个现象
作者以 Swin Tiny 版本为例,将其中的局部窗口注意力模块 LSA 替换为 DW Conv、decoupled dynamic filter (DDF),从上图可以看出 DWConv 和 DDF 性能都比 LSA 强的,特别是 DW Conv,在参数量和 FLOPs 更小的情况下性能会比 Swin Transformer 高。
这说明 LSA 其实也没有想象中那么好,DW Conv 同样可以胜任。抛开 ELSA 的具体改进不谈,我们从上述诸多论文中可以发现 :
(5) 从 Swin Transformer 到 ConvNeXt
既然 ViT 和 Swin Transformer 等的成功并不是来自所谓的注意力机制,而是精心设计的 Transformer 架构,那么自然会有疑问这个精心设计的架构为啥如此优异,一经提出就超越 ResNet?现在诸多论文都是在探讨 Transformer 架构中的某个部件对整体性能的影响,例如 Patch 切分模式等,而 ConvNeXt 虽然没有正面回答为何 Transformer 性能优异,但是从实践角度,参考 Swin Transformer 架构,升级了 ResNet 架构,提出 ConvNeXt ,从而使得 ResNet 依然如此伟大。
从上述发展来看,从 ResNet 到 ViT,再到 Swin Transformer,最终又回到 ResNet,是一个非常自然的过程。简单来说发展历程是某人突然发现一个非常好的网络架构(一开始没有意识到架构的重要性),然后中间大家一起来魔改,最后大家发现其实都走偏了,现在又有人开始回归架构本身了,而不是所谓的自注意力和 Conv 谁更优异之争。
虽然 ConvNeXt 很优秀,但是依然没有深入探讨 Transformer 架构的伟大之处,或许总有一天能够研究清楚,带领大家认识架构设计的本质吧!
顺便提一句:当时我第一次接触 Transformer 算法时候感叹如此简单的结构(因为核心组件就那几个,堆叠就行),如果 CV 领域能够完全借鉴 NLP 发展,那以后大家就共同发展共同繁荣了,想想就激动(终于可以对外称我也懂 NLP 了)。但是随着 CNN 领域对 Transformer 的改进不断呈现,发现好像不是这样了,大家都在考虑如何对 Transformer 引入 CNN 局部信息来提升性能和收敛速度乐此不疲(当然效果是有的),这种混合 CNN 和 Transformer 的做法其实我是不感冒的,因为觉得违背了设计初衷。但是从现在发展来看,或许 CNN 和 Transformer 本身就没啥好特意区分的,两者在某个角度上其实就是等价的,从这个角度来看,各种混合 CNN 的 Transformer 或许就不那么变扭了。未来也可能出现一种标准架构超越 Transformer,然后大家又可以开心的玩耍了!
当然上述是我一家之言,不一定理解的非常到位!
附加:很高兴看到 MetaAI (前身 FAIR)选择了 MMDetection 来作为算法 base 实现了目标检测部分,作为 MMDetection 维护者,希望大家都能够基于 MMDetection,将其应用于各种场合,不断打磨升级,将易用性提高一大步。目前随着 MMRazor 和 MMDeploy 的发布,从标注到训练到压缩到部署全链条都已经打通,相信会极大的方便用户。如果你觉得不错,欢迎给 Star