立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 432|回复: 5

[讨论] 如何评价FAIR提出的ConvNeXt:CNN匹敌Swin Transformer?

[复制链接]
发表于 2025-3-2 21:15 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
CNN还是YYDS?
A ConvNet for the 2020s
The "Roaring 20s" of visual recognition began with the introduction of Vision Transformers (ViTs), which quickly superseded ConvNets as the state-of-the-art image classification model. A vanilla ViT, on the other hand, faces difficulties when applied to general computer vision tasks such as object detection and semantic segmentation. It is the hierarchical Transformers (e.g., Swin Transformers) that reintroduced several ConvNet priors, making Transformers practically viable as a generic vision backbone and demonstrating remarkable performance on a wide variety of vision tasks. However, the effectiveness of such hybrid approaches is still largely credited to the intrinsic superiority of Transformers, rather than the inherent inductive biases of convolutions. In this work, we reexamine the design spaces and test the limits of what a pure ConvNet can achieve. We gradually "modernize" a standard ResNet toward the design of a vision Transformer, and discover several key components that contribute to the performance difference along the way. The outcome of this exploration is a family of pure ConvNet models dubbed ConvNeXt. Constructed entirely from standard ConvNet modules, ConvNeXts compete favorably with Transformers in terms of accuracy and scalability, achieving 87.8% ImageNet top-1 accuracy and outperforming Swin Transformers on COCO detection and ADE20K segmentation, while maintaining the simplicity and efficiency of standard ConvNets.





原文地址:https://www.zhihu.com/question/510965760
楼主热帖
回复

使用道具 举报

发表于 2025-3-2 21:16 | 显示全部楼层
首先,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 解决了巨大计算量问题,但是依然有自身的问题:

  • 其实现非常复杂,特别是移位的 LSA 计算方式
  • 难以部署,他的 OP 比较特殊,这非常不好
  • 随着诸多最新发现,自注意力和逐深度方向卷积 DW Conv 可以等价,那么 Swin Transformer 和 Conv 结合会咋样,有待研究
解决前两个问题的典型算法是 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 的具体改进不谈,我们从上述诸多论文中可以发现 :

  • 自注意力层可以和 DW Conv 等价,将自注意力层替换为 DW Conv 模块,性能也是非常类似的
  • ViT 等 Transformer 等算法成功的关键在于精心设计的 Transformer 架构

(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
MMDetection
回复 支持 反对

使用道具 举报

发表于 2025-3-2 21:16 | 显示全部楼层
我愿称之为2022年cv算法工程师抄作业必备手册,手把手教你改模型,把Resnet50从76.1一步步干到82.0。或许对于广大researcher而言这只是一个堆trick的工作,但对于工程师来说,光是验证哪些trick能work,哪些trick堆叠在一起能都产生收益,这件事本身就已经散发着money的味道了。现在大佬们烧了这么多电费把结果摆到大家面前,还要什么自行车~
个人整理如下,附上了代码注释:
镜子:ConvNeXt:手把手教你改模型后续应该还会在轻量级模型上对一些trick进行验证
回复 支持 反对

使用道具 举报

发表于 2025-3-2 21:17 | 显示全部楼层
至少我觉得作者在暗示:
1 图像任务中transformer并没有本质的优势,大部分提点来自于花里胡哨的trick和对网络架构精心调节。
2 swin transformer好不容易赶上来了,但长的越来越像cnn了,还没有cnn架构漂亮自然。
3 cnn用上所有最"modern"的trick和最精心的架构调整,依然是最能打的。
我觉得文章还是不错的,贡献了一个新的cnn sota。虽然很多trick说不清楚提点原因,但直观上也能说的通,也许有进一步研究的价值。比如去掉depthwise之后的activation。
最后,个人觉得目前图像任务中,cnn和transformer真的没有太大区别,同等计算量和参数量下,精度基本相当。
但是cnn拥有着清晰简单的结构,更加广大的研究社区,更加丰富的系列模型(从200KB到50MB),以及更加丰富的硬件平台,更完善的部署pipeline(部署要考虑低精度量化,操作融合等)。这些优势使得cnn更易于应用到多种场景(边缘侧,移动端,云端)。
回复 支持 反对

使用道具 举报

发表于 2025-3-2 21:18 | 显示全部楼层
刚刚看了一下,作为菜狗-.-我更关心有啥能拿过来的东西不,顺便简单记录了一下 tricks(比较潦草,将就点哈),方便其他人去原文找对应章节学习。

<hr/>概述:以ResNet50和Swim-T为例,作者把 ResNet50从 76.1 调/修改 到了 82.0(imageNet-1K),超过了Swin-T的81.3

A ConvNet for the 2020s


  • 文章干了这样一件事:逐步把 ResNet 改造(modernize)成 Transformer;

    • Conv 具有内置偏置:平移不变性
    • 滑动窗口的特点使得它本身效率就高;
    • ViT丢弃了 Conv 的偏置,仅利用注意力机制就获得了很大的提升(不过这些前提是有大规模预训练,另外全局注意力的计算复杂度也比较大)
    • 层级的 Transformer 使用混合设计克服了这个gap,例如 Swin-transformer;这表明 卷积从未落寞(原文:the essence of convolution is not becoming irrelevant; rather, it remains much desired and has never faded.)

  • 高效训练ResNet50:A recent paper [76] demonstrates how a set of modern training techniques can significantly enhance the performance of a simple ResNet-50 model.
  • 提升 ResNet 可能的 tips: The complete set of hyper-parameters we use can be found in Appendix A.1,在imageNet-1k上把 ResNet50 从 76.1 提到 78.8;

    • 76.1-78.8

  • 正文: ResNet 进行网络结构的逐步改造
Macro Design(大改动)


  • 作者分析 swin-T 的设计,考虑了两点
  • the stage compute ratio,

    • 改变layer0~layer4的block数比值:(3,4,6,3)-> (3,3,9,3),这一点在 [50, 51] 中有人分析过;

      • 78.8->79.4(后面都是指点数)

    • and the “stem cell” structure

      • Changing stem to “Patchify”
      • ResNet 中原先的 Stem cell(即kernel降维过程)为7x7 Conv + Stride=2 +max_pool,这样一次降维为 4倍;
      • 作者仿照 Swin-T,用4x4, stride=4的卷积(即patchify,因为没有相交)
      • 79.4->79.5


ResNeXt-ify(ResNeXt化)


  • 用 depthwise conv 代替 bottleneck中的 3x3卷积(depthwise conv 只在每一 channel 上进行 spatial 信息交互,有点类似于 self-attention);
  • 把网络的宽度从64 提到 96;
  • 79.5->80.5
Inverted Bottleneck


  • 在bottle neck上把维度变化的顺序进行了修改,原先是 大维度(channel维度)->小维度(此时进行d3x3空间大小降维)->大维度,从而减少计算量;
  • 现在是 小维度->大维度(d3x3)->小维度,虽然本模块的计算量增加了,但输入输出的维度降低了,其他参与的模块的整体维度就小了,整个网络计算量也就小了;
  • 80.5->80.6
Large Kernel Sizes


  • Swin-T用的 Kernel 是 7x7,这在之前一些 ConvNet上也用过,不过过去的“黄金配置”是叠加 3x3 Conv,这样在 GPU 实现时硬件加速也很好;因此作者重新回顾了 大 kernel-sized 卷积的使用;
  • 直接用 7x7 会导致参数里变大,作者把 Inverted Bottleneck 的空间降维 d3x3进行了移动(此时的与 swin-T的位置类似),从而在小维度上进行空间降维,节省了计算量;但也掉点了(作者称为暂时的掉点)
  • 然后使用 7x7,此时点数又上升了,与之前结果相近,这说明 7x7 在相同参数量下效果一样;
  • 点数没变,但为了与 Swin-T对齐会使用
Micro Design(小改动)


  • 之前都是大改动,现在是小改动;
  • 把 ReLU 换成 GELU;(精度没变,但是 transformer中都用了,作者为了统一也用了)
  • 把 激活层减少(具体结构见论文)

    • 80.6->81.3

  • 把多余的 BN 去掉,只在 1x1 前留一个

    • 81.3->81.4

  • 用LN代替剩下的那个BN

    • 81.4->81.5

  • 单独的下采样层

    • ResNet的下采样通常是 3x3,s=2(如果有residual就有一个1x1,s=2);
    • 与 swin-T 对齐,改为 2x2, s=2,此时生成的特征的感受野是独立的(无交叠)
    • 由于改了后网络训练不稳定,多加了几个Norm层,分别在 下采样前,stem后和 GAP后
    • 81.5->82.0

综上,作者阐述并未用新东西,就把以前用过的东西整合了一下。统一网络结构外的东西(数据增广,预处理,优化器等)把 ResNet从76.1干到78.8,修改网络结构后从78.8干到82.0。
回复 支持 反对

使用道具 举报

发表于 2025-3-2 21:19 | 显示全部楼层
首先强调:文章是好文章,从动机到实验都非常solid,值得也应该被任何顶会接收。
我只是想说,都2020s了,业界还在全监督任务上纠结CNN还是transformer谁能更好地(过)拟合数据,以致于每次有类似的刷点文章总能引发最多关注,是不是有点悲哀?
大家都知道,Swin Transformer借鉴了CNN的许多思想,如层次化下采样、交替滑动窗口等;而这次的ConvNeXt为了追上transformer,也不得不采用更大kernel size去模拟远距建模能力。可以预见,在没有重大技术突破之前,未来但凡达到各种SOTA的模型,肯定都会结合两者各自的优势。
因此我想做出如下几个判断:

  • 可以肯定地说,CNN和transformer的设计理念,都已经深刻地影响了计算机视觉。即使突破到了下一代统计学习模型,这些设计理念(如CNN的局部敏感性和transformer的远距建模能力)都不会消失,而是会以某种形式保存下来。参考上一代的统计模型SVM:它以线性层的形式被保留至今。
  • 抛开具体任务和具体场景,纠结CNN和transformer谁更好,本身没有特别大的意义。对于实际应用来说,没有最好的模型,只有最合适的模型。
  • 如果非要比较不同模型的优劣(包括但不限于:纯CNN模型、纯transformer模型、两者融合设计的模型),那么决胜的战场一定不在与全监督识别,而在于某种更加适合应用、甚至适应视觉识别问题本质的任务[1]。在现在看来,自监督比全监督更适合作为裁判[2],但依然任重道远。
对于CV的未来,我是颇有些担忧的。若不能定义出更适合的任务甚至评测环境,或者从数据闭环上构建完整的解决方案,那么CV领域还将浸泡在绝对精度的羊水里(就像相对论前的绝对时空观一样),继续等待属于我们的爱因斯坦。
最后,我还是再强调一遍:文章是非常好的文章,只是希望业界不只关注这样的文章。
<hr/>更新:评论里有同学问,如果不刷绝对精度,应该如何做。我说几个设想,但都很难。

  • 短期设想:设计出一种真正适合评判自监督学习模型的指标。目前,自监督学习的评判几乎完全依赖各种有监督任务,然而我认为,这一点从逻辑上就是错的:我们不应该让上游自监督去适应下游有监督,而应该是反过来。至于在绝对精度之外的评判标准,我一如既往地认为,应当追求在无标签数据中,追求压缩率和恢复率的tradeoff。
  • 中期设想:改变当前的绝对精度指标,设计出“按需识别”的评价方式和对应指标。举个例子,如果我看到一张街景,其中包含上百个人,我肯定不会像算法一样,把其中每个人都检测出来,即使我有检测出所有人的能力;我只关心可能与我产生交互的少数几个人。同时,如果我愿意,我不仅可以检测出某个人,还可以检测他的头部,进而是面部、五官,甚至无限精细的元素,但是算法的标注是固定的。我称前者为“实例级按需识别”,而后者为“语义粒度级按需识别”。要想做到这一点,需要其他模态(如语言)的辅助,但也远远不止于此。
  • 长期设想:为CV算法(也包括其他AI算法)构建某种虚拟环境,允许其通过交互来学习。当然,这个环境和真实世界的gap必须足够小,以使得训练好的智能体能够迁移到真实世界中来。这是我所能意识到的终极目标,不仅需要识别、生成、模拟、对抗等算法更上一层楼,还需要强化学习作为整体组织框架。
这三个设想,彼此间有着递进关系。自监督算法要高效地压缩数据,就势必不能追求在任何情况下都完整地识别语义,必须根据压缩和恢复的tradeoff,调整识别的精度。同时,只有做到按需识别,才能为虚拟世界中的智能体提供合理的学习指标,让它更接近人的行为。
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表