如果只看这几年的视觉主线,很容易形成一种印象:ViT 出来之后,卷积网络已经被时代翻过去了,后面的工作更多是在 Transformer 上继续堆设计、堆数据、堆规模。ConvNeXt 这篇论文有意思的地方就在这里。它并不是再发明一个新的混合架构,也不是试图证明注意力机制没有价值,而是退回到一个更基本的问题上:如果把过去十年里已经被分别验证过的现代设计原则重新收拢到一个纯卷积网络里,那么 CNN 到底还能走到什么程度?

论文作者没有直接拿一个现成 CNN 去和 Swin Transformer 做系统层面的对比,而是选择从标准 ResNet 出发,一步一步向更“现代”的设计靠近。原文在摘要里给出的表述很直接:他们要做的是 reexamine the design spaces and test the limits of what a pure ConvNet can achieve。换句话说,这篇论文真正重要的地方,不只是给出了 ConvNeXt 这个名字,而是给出了一条很清楚的分析路径:哪些性能差距来自注意力本身,哪些其实来自训练配方、宏观结构、块设计和实现细节。

这篇论文值得细读,也正因为它不像很多模型论文那样一上来就给一个“新模块”,然后很快滑向结果罗列。ConvNeXt 更像一次系统性的架构清点:先把 ResNet 放到 2020 年代的训练条件下,再逐步吸收 Swin Transformer 背后的设计思想,最后看看纯卷积是否还能在分类、检测和分割任务上站住脚。

下文沿着论文原文的逻辑展开,不把 ConvNeXt 当作一篇“模型速览”来写,而是集中看三个问题:论文到底在回应什么,作者是如何一步步把 ResNet 改造成 ConvNeXt 的,以及这些修改最终说明了什么。

1. 为什么是 ConvNeXt:这篇论文到底在回应什么

原论文开头回应的是一个非常明确的背景:ViT 在分类任务上表现强势,Swin Transformer 又把层次化设计、局部窗口和多阶段结构重新带回视觉模型,于是很多人自然会把优势归因到 Transformer 本身。

但作者提出的疑问是:如果 Swin 这样的层次化 Transformer 已经重新引入了不少卷积先验,那么它的成功到底有多少来自注意力机制本身,又有多少来自这些“重新带回来的卷积式设计”?

顺着视觉模型的发展脉络往下看,这个问题会更清楚一些。2010 年代的主线是 ConvNet,从 AlexNet、VGG 到 ResNet、ResNeXt,讨论的重点一直是如何把卷积网络做得更深、更稳、更高效。ViT 改变了比较的基准,而 Swin Transformer 则进一步把局部窗口、多阶段结构这些更接近卷积网络的设计重新带了回来。也正因为如此,ConvNeXt 真正要对照的对象不是原始 ViT,而是 Swin 这一类层次化视觉 Transformer。论文关心的并不是“ConvNeXt 会不会比 Transformer 更强”,而是 在现代训练和现代设计条件下,纯卷积还能走到哪里。作者采取的方式也很明确,不是重新发明卷积,而是 modernize a standard ResNet toward the design of a vision Transformer

论文摘要和引言里有两句很关键:

We gradually “modernize” a standard ResNet toward the design of a vision Transformer.

We reexamine the design spaces and test the limits of what a pure ConvNet can achieve.

从这个角度看,ConvNeXt 的意义并不在于“证明卷积打败了 Transformer”,而在于它把“CNN 落后”这个说法重新拆开了:到底是卷积本身落后,还是旧的 CNN 设计范式落后,这是两回事。

这篇论文开头给出的总览图很适合把这个问题放到同一张坐标系里理解:左侧是只用 ImageNet-1K 训练时的模型族,右侧是经过 ImageNet-22K 预训练后的模型族,气泡面积对应 FLOPs。真正值得注意的不是某一个孤立结果,而是 ConvNeXt 在两种训练设定下都能进入和 Swin 相同的竞争区间,并在更大规模预训练下继续保持优势。

图片来源:Liu et al., A ConvNet for the 2020s, CVPR 2022,论文原图。

2. 论文的方法论:不是发明新模块,而是系统性重做 ResNet

很多读者第一次看 ConvNeXt,会把它理解成“又一个新 backbone”;但原文的价值更像一次控制变量式的系统研究。作者不是凭直觉堆模块,而是沿着一条固定路线逐步改造,并在每一步记录性能变化。

借用论文第二节的标题,这就是一条 Modernizing a ConvNet: a Roadmap。它的研究设定很干净:起点是 ResNet-50 / ResNet-200,对齐对象是 Swin-T / Swin-B,整体 FLOPs 尽量放在可比较范围里,而且每一步只改一类设计,观察精度如何变化。更重要的是,作者没有一上来就比较结构,而是先把训练配方统一,再谈结构差异。

沿着这条路线,论文把整个现代化过程拆成了几块连续推进的内容:先统一 training techniques,再看 macro design,接着引入 ResNeXt-ifyinverted bottlenecklarge kernel size,最后才处理那些更细的 layer-wise micro designs。把训练配方放在最前面其实很关键,因为 如果训练条件不统一,后面的结构比较很容易混进额外变量。

2.1 先把训练条件统一到 2020 年代

最容易被忽略的一点,是 ResNet 原始版本和 ViT / Swin 经常并不处在同一训练制度下比较。

论文里作者先做了一件看似朴素但非常重要的事:用接近 DeiT / Swin 的现代训练配方重新训练 ResNet-50。具体来说,就是把训练轮数从 90 epoch 拉到 300 epoch,把优化器换成 AdamW,同时引入 Mixup、CutMix、RandAugment、Random Erasing、Stochastic Depth 和 Label Smoothing 这些已经在现代视觉训练里很常见的做法。

这一点用一个小表格来看最直接:在架构还没改动之前,只要先把训练制度统一,ResNet-50 的表现就已经明显上来了。

模型 训练设置 ImageNet-1K Top-1
ResNet-50 原始训练配置 76.1%
ResNet-50 DeiT / Swin 风格现代训练配置 78.8%
提升 - +2.7%

这一步的潜台词很明确:很多人以为是“架构代差”,其实先有一部分差距只是训练配方没对齐。

2.2 为什么这一步很重要

这一步之后,比较对象已经不再是“旧 ResNet 对新 Transformer”,而更接近“现代化 CNN 对现代化 Transformer”。它既为后续 ablation 提供了更干净的起点,也提醒我们,论文里那些看起来像“架构代差”的性能差距,并不一定都来自模块本身。

3. 从 ResNet 到 ConvNeXt:作者是怎么一步步改出来的

全文最核心的部分,就是沿着论文原文的现代化路线往下走。真正重要的不是简单列出“改了什么”,而是把每一步都放回同一个框架里:原始设计是什么,作者为什么改,改完之后到底带来了什么变化。

3.1 Macro Design:先改网络的大框架

这一部分对应论文的 Macro Design,核心其实就是两步:先改 stage 级别的计算分配,再改输入端的 stem。

第一步,调整 stage compute ratio。

原始 ResNet-50 的 block 数是:

作者参考 Swin-T,把它改成:

也就是更接近 Swin 的 1:1:3:1 计算分配。光这一项,准确率就从 78.8% 提升到了 79.4%

这一步很能说明问题:ConvNeXt 不是一开始就在 block 里做复杂改动,而是先把整体算力分配重新安排。架构性能差距不只发生在 block 内部,stage 级别的计算分配同样重要。

第二步,把 ResNet stem 改成 patchify stem。

原始 ResNet 的 stem 是一个 、stride 2 的卷积后接 max pooling;作者则把它替换成了一个更接近 ViT / Swin 风格的 patchify stem,也就是 、stride 4 的 non-overlapping convolution。

结果从 79.4%79.5%,提升不大,但它让网络前端更接近 ViT / Swin 的 patchify 思路,也让整体设计更干净。

patchify stem 不是 ConvNeXt 性能跃升的决定项,但它确实标志着输入接口也被纳入了这轮整体重设计。单独把这两项宏观修改抽出来看,会更容易理解 ConvNeXt 为什么首先在整体框架上向 Swin 靠近,而不是一开始就去改 block 内部细节。

如果把前面这些修改放回论文原图来看,这条“从 ResNet 出发逐步现代化”的路线会更直观。作者并不是一次性把网络改完,而是沿着 training techniques、macro design、ResNeXt-ify、inverted bottleneck、large kernel 和 micro design 这条顺序逐层推进,最后才收束成 ConvNeXt。

图片来源:Liu et al., A ConvNet for the 2020s, CVPR 2022,论文原图。

3.2 ResNeXt-ify:引入 depthwise convolution 与更宽通道

ResNeXt-ify 这一步不能只理解成“换个卷积”,因为作者真正想做的,是进一步解耦空间混合和通道混合。

这一部分的做法,可以概括成一句话:把 3x3 grouped convolution 推到极端,换成 depthwise convolution,同时把通道宽度从 64 提升到 96。这样改完之后,准确率直接来到 80.5%。这一步真正值得解释的,不只是“换了卷积”,而是它为什么会让人联想到 self-attention 中按通道做空间加权的行为,以及 depthwise conv 和 1x1 conv 组合起来之后,实际上就是把 spatial mixingchannel mixing 拆开处理了。

3.3 Inverted Bottleneck:为什么 MLP ratio 也会影响卷积网络

最值得讲清楚的,是 ConvNeXt 和 Transformer block 之间那条经常被忽略的联系:Transformer 的 MLP block 常用 expansion ratio = 4,而 MobileNetV2 等工作里,卷积网络也早就出现了 inverted bottleneck。ConvNeXt 在这里其实是把这两条线重新接起来。采用 inverted bottleneck 之后,准确率从 80.5%80.6%,提升本身不算大,但同时 FLOPs 还下降了,这就说明它并不是单纯“多堆一层”,而是在重新整理块内部的计算分配。

ConvNeXt 的很多改动都不是单点大提升,而是在一步步收拢设计空间,让卷积块的形态越来越接近现代视觉主干的共识。

3.4 Large Kernel Size:为什么 7x7 depthwise conv 是关键一步

很多人提到 ConvNeXt,第一反应就是“大卷积核”,但论文里真正值得看的不是“大”本身,而是大核是在什么条件下起作用的。

但原文其实不是直接把 kernel 改大就结束了,而是先做了一个过渡步骤:先把 depthwise conv 的位置前移,再去尝试不同的 kernel size,包括 3、5、7、9 和 11。这个过程本身就很有信息量:depthwise conv 前移之后,准确率会先掉到 79.9%;等 kernel size 从 3 增大到 7 之后,性能又回到 80.6%;再继续增大到 9 和 11,收益就开始饱和了。这里最重要的两个认识是,7x7 更像论文里观察到的一个较优平衡点,而不是“越大越好”;同时,这里的大核也不是在模仿 global attention,而是在卷积框架内部扩大有效感受野。

这一步还能看出一个很有意思的点:ConvNeXt 的“大核”并不是在否定局部先验,而是在保持局部归纳偏置的前提下,适度放宽局部建模范围。

3.5 Micro Design:真正把 block 改成 ConvNeXt block

论文最后这部分 micro design,更像是在继续做减法和整理。整体方向很统一:把 ReLU 换成 GELU,把 block 里的 activation 数量减少到只保留一个,把 normalization 层继续收掉,再把 BatchNorm 换成 LayerNorm,最后引入独立下采样层。也正是在这一串细节修改完成之后,模型才真正收束到 ConvNeXt 的最终形态。数字上看,这一步的累积效果也很清楚:fewer activations 让结果从 80.6%81.3%,继续减少 normalization layers 后来到 81.4%,把 BN 改成 LN 后是 81.5%,最后加上 separate downsampling layers 和额外 norm,模型达到 82.0%

说到底,ConvNeXt 不是靠某一个“神奇模块”赢的,而是靠一串看起来都不算惊艳、但方向一致的设计修改叠出来的。

把论文里的 block 设计图放在一起看,这种“逐步收拢设计空间”的感觉会更明显。ResNet bottleneck、Swin block 和 ConvNeXt block 并不是彼此完全断裂的三种对象;ConvNeXt 更像是沿着现代视觉主干已经验证过的共同趋势,把卷积块重新整理到一种更简洁的形式上。

图片来源:Liu et al., A ConvNet for the 2020s, CVPR 2022,论文原图。

4. ConvNeXt 的最终形态:从 block 到模型族

走完上面的现代化路线之后,再回头看 ConvNeXt 的最终形态,会更容易理解。

4.1 ConvNeXt block 的最终结构

用论文里的 block 图来回看,会发现它的核心特征已经非常清楚:先做 depthwise conv,用 LayerNorm 做归一化,再通过 1x1 conv 或 linear 做通道混合;中间保留一个 GELU,同时使用 expansion ratio = 4 的 inverted bottleneck。这个 block 之所以长成现在这样,并不是因为作者突然发明了一个全新块,而是因为前面那一串现代化调整最终都落到了这里。

4.2 ConvNeXt-T/S/B/L/XL 的尺度设计

论文中的模型配置也很规整:ConvNeXt-T 使用 ConvNeXt-S 使用 ConvNeXt-B 使用 ConvNeXt-L 使用 ;而 ConvNeXt-XL 则进一步扩大到 。这套配置和 Swin-T/S/B/L 在复杂度上的对齐关系,也正是后面实验结果能够成立的前提之一。把这组配置单独摊开来看,也能更清楚地看到 ConvNeXt 家族是如何从 Tiny 逐步扩展到 X-Large 的:先通过增加 block 数从 Tiny 扩展到 Small,再通过增加 channels 把模型进一步扩展到 Base、Large 和 X-Large。

5. 从结果到结论:ConvNeXt 真正说明了什么

理解 ConvNeXt 的关键,不只是把结果表里的数字再抄一遍,而是要看这些结果究竟支撑了怎样的结论。顺着 ImageNet、ImageNet-22K 预训练和下游任务一路看下来,论文真正想说明的,是纯卷积在现代训练和现代设计条件下依然可以成为第一梯队的通用视觉主干。

5.1 ImageNet-1K:纯卷积可以重新回到第一梯队

如果只抓最有代表性的数字,那么 ConvNeXt-T 达到 82.1%,高于 Swin-T 的 81.3%ConvNeXt-B 在 224 分辨率下是 83.8%,略高于 Swin-B 的 83.5%;到了 384 分辨率,这个差距扩大到 85.1% vs 84.5%。这几组数字已经足够说明问题:在论文给出的同级对比里,ConvNeXt 整体上优于 Swin;而且它并没有依赖 shifted window attention、relative position bias 这类专门模块,推理吞吐也并不差。

5.2 ImageNet-22K:规模上去之后,ConvNeXt 也能吃到红利

这一部分回应的是一个很常见的看法:很多人认为 Transformer 因为归纳偏置更少,所以在大规模预训练下更有优势。

论文给出的回答是:设计得当的 ConvNet 并不天然在大规模预训练下吃亏。

最关键的几组数字是:ConvNeXt-B 384 做到 86.8%,略高于 Swin-B 的 86.4%ConvNeXt-L 38487.5%,也高于 Swin-L 的 87.3%;再往上扩到 ConvNeXt-XL 384,则来到 87.8%。这些结果真正说明的,不是“ConvNeXt 在某个小设置上赢了一点”,而是它在规模扩展时也能保持竞争力。

5.3 下游任务:这篇论文为什么不只看分类

作者非常清楚,视觉 backbone 不能只看 ImageNet 分类,所以后面又继续做了 COCO detection / instance segmentation 和 ADE20K semantic segmentation。真正值得抓的结论也很直接:在 COCO 上,ConvNeXt-B/L/XL 相比 Swin 往往能多出约 +1.0 AP 左右;在 ADE20K 上,ConvNeXt-B/L/XL 也总体保持领先。

这一步的重要性也很清楚:ConvNeXt 不是单纯在分类上“刷一个更高 top-1”,而是作为通用视觉主干去对比。

把分类、22K 预训练和下游任务的结果放在一起看,ConvNeXt 的结论会更集中一些:它不是只在 ImageNet-1K 上偶然赢了一点,而是在扩大预训练规模、迁移到检测和分割任务之后,仍然保持了和 Swin 同级竞争、并在多数设置下略占优势的态势。

5.4 结果背后的判断

把这些结果放在一起看,首先能得到的判断是:旧 CNN 输掉的,并不一定是卷积本身。ConvNeXt 说明,很多性能差距并不是“卷积先天不如注意力”,而是旧 CNN 的设计和训练制度已经落后于时代。把训练配方、block、stem、normalization、kernel size 这些点重新整理起来之后,纯卷积依然可以很强。

再往前走一步,论文其实还说明了另一件事:Transformer 里那些看起来很“现代”的设计,并不专属于 Transformer。patchify、stage ratio、单激活、LayerNorm、MLP ratio 这些设计,放回卷积网络中同样成立。换句话说,一些成功经验更像是现代视觉架构的共识,而不是某个单一范式独占的能力。

也正因为如此,ConvNeXt 最重要的贡献更像一次设计空间重整。它最强的地方,不是提出了某个前所未见的新算子,而是把过去十年里零散出现、分别被验证过的有效设计重新组合成一套更自洽的 CNN 范式。它读起来不像一篇单模块论文,更像一次系统性的架构清点。

当然,这篇论文的边界也很明确。ConvNeXt 主要回答的还是监督学习设定下视觉主干的问题,它并没有否定 attention 的价值,更不是在宣布“卷积已经全面优于 Transformer”。更准确地说,它是在说明:纯卷积并没有过时,旧 CNN 的落后也并不等于卷积这件事本身的落后。