这里提出一种在图像上非常强力的backbone,本文所报告的发现表明,大核CNN的潜力还完全没有得到充分开发。即便在Transformer的理论强项——“大一统建模能力”上,大核CNN也比我们所想象的更为强大。本文也报告了相关的证据:将kernel size从13减为11,这四个模态上的性能都发生了显著降低。大核卷积一统多种模态!RepLK正统续作UniRepLKNet:ImageNet 88%,时序预测SOTA,极简高效!
在Transformer占据多模态工具半壁江山的时代,大核CNN又“杀了回来”,成为了一匹新的黑马。
腾讯AI实验室与港中文联合团队提出了一种新的CNN架构,图像识别精度和速度都超过了Transformer架构模型。
切换到点云、音频、视频等其他模态,也无需改变模型结构,简单预处理即可接近甚至超越SOTA。
团队提出了专门用于大核CNN架构设计的四条guideline和一种名为UniRepLKNet的强力backbone。
只要用ImageNet-22K对其进行预训练,精度和速度就都能成为SOTA——
ImageNet达到88%,COCO达到56.4 box AP,ADE20K达到55.6 mIoU,实际测速优势很大。
在时序预测的超大数据上使用UniRepLKNet,也能达到最佳水平——
例如在全球气温和风速预测上,它就超越了Nature子刊上基于Transformer的前SOTA。
arXiv: https://arxiv.org/abs/2311.15599
code: https://github.com/AILab-CVC/UniRepLKNet
proj: https://invictus717.github.io/UniRepLKNet/
Model: https://huggingface.co/DingXiaoH/UniRepLKNet
太长不看版
问:这篇文章做出了什么贡献?
答:用于大核CNN架构设计的四条guideline,一种名为UniRepLKNet的强力backbone(只用ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU,实际测速优势很大),在时序预测的超大数据上用这一为图像设计的backbone达到SOTA水平(全球气温和风速预测,前SOTA是发在Nature子刊上专门为此设计的Transformer),在点云、音频、视频上凭着极为简单的预处理方式和毫无改变的模型结构均超过或接近SOTA水平。
问:为什么在Transformer大一统各个模态的时代还要研究CNN?
答:Transformer和CNN只不过是相互交融的两种结构设计思路罢了,没有理由认为前者具有本质的优越性。做研究就是为了修正人类对未知事物的认知,“Transformer大一统各个模态”正是本文试图修正的认知。正如2022年初ConvNeXt、RepLKNet和另外一些工作问世之前,“Transformer在图像特别是语义分割和目标检测等下游任务上吊打CNN”是主流认知,而当时这几篇工作将这一认知修正为“CNN和Transformer在图像任务上差不多,在其他模态上Transformer还是吊打CNN的”。我们要将其进一步修正:在点云、音频、视频上,CNN比我们想象的强太多了;在时序预测这种最近两年内CNN被反复超越的领域(LSTM等曾是主流,最近两年Transformer越来越多),CNN都能超过Transformer,成功将其“偷家”;CNN在大一统这一点上可能不弱于Transformer。
大卷积核CNN架构设计
(本章将会用很长的篇幅讨论模型架构设计的思路和推理过程,对结构设计不感兴趣的读者可以跳到下一章)
2022年我在RepLKNet [1]里提出了用超大卷积核(从13x13到31x31)来构建现代CNN以及正确使用超大卷积核的几个设计原则。但从架构层面看,RepLKNet只是简单地用了Swin Transformer的整体架构,并没有做什么改动。SLaK将kernel size进一步增大到了51x51,但其简单采用了ConvNeXt的架构。总得来讲,当前大核CNN架构设计要么遵循现有的CNN设计原则,要么遵循现有的Transformer设计原则。
我们不禁要问:这样的架构能充分发挥大卷积核的优势吗?
大卷积核的优势到底是什么呢?我们认为是不依赖深度堆叠的大感受野。深度又代表什么?一方面是更高层次的特征抽象,另一方面是更强的一般的表示能力。我们的新架构设计原则来自于对这三个概念的一些思考。首先我们详细比较一下这三个概念。
- 最大感受野描述了当模型试图抽取空间pattern时,特征图上的一个点理论上能与多远的点建立空间联系。例如,如果我堆叠三个3x3,得到的最大感受野就是7x7,那么一个点最多能和与它间隔5个点的另一个点建立联系。然而在实际的CNN中,两个点之间可能虽然理论上存在联系,但这一联系是通过若干层才实现的,非常微弱,对最终的输出影响极小。这就引入了有效感受野的概念。有理论分析表明,一个模型的有效感受野正比于kernel size乘以层数的平方根 [2]。也就是说,随着层数越来越深,进一步加深模型带来的提升有效感受野的效用是边际递减的。RepLKNet等工作表明,像ResNet-152这种模型虽然有几十个3x3卷积层,但其有效感受野其实不大,而且相对于ResNet-101并没有本质提升。
- 特征抽象的层次也与空间pattern有关。当讨论感受野时,我们关注模型能感知“多大的范围”,但除此之外,我们还要关注模型能感知“多高的抽象层次”。卷积神经网络的直观解释是模型通过用卷积核逐层提取空间pattern,令得到的特征的抽象层次越来越高,例如从线条到纹理,从纹理到物体的局部,再到物体。除了这种直观的抽象层次以外,CNN提取到的抽象层次也可能是人类所无法理解的。
- 深度所带来的一般的表示能力来自于更多的trainable参数和非线性激活函数。一般来说,更深的、参数更多的模型可以拟合更复杂的函数,从而学到更复杂的表征。
传统的卷积网络架构具有什么样的共性呢?我们注意到,当我们向网络中添加一个3x3或5x5卷积层时,我们实际上期望它同时产生三个作用:增大感受野、提高抽象层次、通过增加深度而一般地提高表征能力。
这给传统卷积网络设计带来了怎样的局限呢?
小卷积核必须要大量堆叠才能实现大感受野,所以我们得用很多3x3或者5x5层,而且最终效果也不好。
- 卷积层多了,特征抽象层次当然是够了,但到底多高的抽象层次算够?谁也不知道,因为这东西跟感受野是紧密耦合的,没法单独调整。
- 卷积层占用的参数和运算量太多了,在模型大小的限制下,很难再进一步提高其一般的表征能力了。
在大卷积核的加持下,我们可以用很少的大卷积核就实现足够的有效感受野。如果我们还遵循传统CNN的堆叠卷积核的设计范式,会有哪些不对劲的地方?
- 感受野可能过大了。这个问题不只是浪费算力而已。对于一些下游任务的framework(如语义分割的UperNet)而言,backbone中的低层feature过早地获得过大的感受野可能会产生负面效果(本来低层feature应该是局部特征,UperNet将其与高层feature组合才能涨点;而现在低层感受野也很大,全变成全局特征了)。
- 在感受野完全足够的前提下,把较低抽象层次的特征变成较高抽象层次的特征这种简单工作,明明一个depthwise 3x3就能胜任,我非要用一个31x31来干,属实没有必要。
- 模型可能只用很少的层就实现了大感受野,但如果我们止步于这样的深度(如RepLKNet只用了24个超大卷积层和24个FFN结构),模型的表征能力可能不够。
那我们应该遵循怎样的原则去设计大卷积核CNN架构?我们的回答是解耦上述三种要素,需要什么效果就用对应的结构来实现。我们能够实现这样的解耦,正是大卷积核的本质优势所保证的。
- 用少量大卷积核保证大感受野。
- 用depthwise 3x3等小卷积提高特征抽象层次。
- 用一些高效结构(如SE Block、Bottleneck structure等)来提高模型的深度从而增强其一般的表示能力。
在这一思想的指导下,我们进行了一系列系统的研究,提出了大卷积核CNN设计的四条Architectural Guidelines,简单概括如下:
- 关于局部结构设计:用一些像SE或bottleneck之类的高效结构来增加深度。
- 关于重参数化:用膨胀卷积来捕捉稀疏特征。本文提出了一个子模块叫Dilated Reparam Block,这个模块中除了大核卷积以外,还用了并行的膨胀卷积,而且利用结构重参数化的思想,整个block可以等价转换为一个大核卷积。这是因为小kernel+膨胀卷积等价于大kernel+非膨胀卷积。如下图所示。
- 关于kernel size:根据下游任务及所采用的具体框架来选定kernel size。正如前文所提到的,对语义分割框架UperNet而言,低层feature过早地获得过大的感受野可能会产生负面效果。但这并不意味着大kernel会降低模型的表征能力或最终feature的质量!RepLKNet的“kernel size加大至少不会变差”的结论并没有被推翻(RepLKNet做语义分割用的是DeepLabv3,不依赖于低层的特征的局部性),只是被修正了。对本文涉及的任务而言,13x13是足够的。
- 关于scaling law:对一个已经用了很多大kernel的小模型而言,当增加模型的深度时(例如从Tiny级别模型的18层增加到Base级别的36层),增加的那些block应该用depthwise 3x3,不用再增加大kernel了,感受野已经足够大了,但用3x3这么高效的操作来提高特征抽象层次总是有好处的。
据此,我们提出的UniRepLKNet模型结构如下,非常非常简单:每个block主要由三部分组成:depthwise conv, SE Block, FFN。其中depthwise conv可以是大卷积核(上述的Dilated Reparam Block),也可以只是depthwise 3x3。
将UniRepLKNet用于其他模态的极简设计
出于对简洁和通用性的永恒追求,将UniRepLKNet用于其他模态时,我们不对模型架构主体做任何改变(以下实验用的全都是UniRepLKNet-Small),而只是将视频、音频、点云、时序数据给处理成C x H x W的embedding map,正如我们将图像表示成3 x H x W的张量一样。例如,我们把音频的频谱图(T x F)看成是一幅单通道图像,即C=1, H=T, W=F;我们将点云进行三视图投影,得到三幅单通道图像,所以C=3, H和W可以随意指定;我们将视频中的各帧拼接到一起,极为简单地得到一张大图(例如,16帧的3 x 224 x 224视频拼接得到3 x 896 x 896的输入);对时序数据,我们借鉴CorrFormer [3]中的embedding layer将数据转换为隐空间中的张量然后将其reshape成一幅单通道图像的格式。
后文展示的结果将会表明,如此设计虽然惊人地简单,但其产生的效果是极为优秀的。
多项表现超越Transformer
作为图像模态中的老三样,ImageNet、COCO、ADE20K上的结果自然是不能少。论文中最多只用ImageNet-22K预训练,没有用更大的数据。
虽然大核CNN本来不是很重视ImageNet(因为图像分类任务对表征能力和感受野的要求不高,发挥不出大kernel的潜力),但UniRepLKNet还是超过了最新的诸多模型,其实际测速的结果尤为喜人。
例如,UniRepLKNet-XL的ImageNet精度达到88%,而且实际速度是DeiT III-L的三倍。量级较小的UniRepLKNet相对于FastViT等专门设计的轻量级模型的优势也非常明显。
结果:ImageNet、COCO、ADE20K
作为图像模态中的老三样,ImageNet、COCO、ADE20K上的结果自然是不能少。我们最多只用ImageNet-22K预训练,没有用更大的数据。
虽然大核CNN本来不是很重视ImageNet(因为图像分类任务对表征能力和感受野的要求不高,发挥不出大kernel的潜力),但UniRepLKNet还是超过了最新的诸多模型,其实际测速的结果尤为喜人。例如,UniRepLKNet-XL的ImageNet精度达到88%,而且实际速度是DeiT III-L的三倍。量级较小的UniRepLKNet相对于FastViT等专门设计的轻量级模型的优势也非常明显。
在COCO目标检测任务上,我们最强大的competitor是InternImage [4]:UniRepLKNet-L在COCO上不及InternImage-L,但是UniRepLKnet-XL超过了InternImage-XL。考虑到InternImage团队在目标检测领域的积淀非常深厚,我们达到这一效果也算很不容易了。
在ADE20K语义分割上,UniRepLKNet的优势相当显著,最高达到55.6的mIoU。与ConvNeXt-XL相比超出了整整1.6.
结果:时序预测、音频、视频、点云
为了验证UniRepLKNet处理时序数据的能力,我们挑战了一个数据规模超大的《Nature》级别的任务:全球气温和风速预测。尽管UniRepLKNet本来是为面向图像任务设计的,它却能超过为这个任务而设计的CorrFormer [3](前SOTA)。
这一发现尤为有趣,因为一般认为时间序列预测的效果取决于模型建模相互依赖关系的能力,这本应是最能发挥Transformer长处的领域(听起来就适合attention!),现在我们却用CNN将其“偷家”了,再考虑到Transformer当年也是从NLP来CV偷家的,一种奇妙的感觉油然而生。正如职业选手孙一峰在星际争霸生涯中反复证明的那样,一切局势最终都会变为换家。
在音频、视频和点云任务上,我们的极简处理方法也惊人地work。(详见论文)
结论
除了提出一种在图像上非常强力的backbone之外,本文所报告的这些发现似乎表明,大核CNN的潜力还完全没有得到充分开发。即便在Transformer的理论强项——“大一统建模能力”上,大核CNN也比我们所想象的更为强大。本文也报告了相关的证据:将kernel size从13减为11,这四个模态上的性能都发生了显著降低。(详见论文)
其他常见问题
问:对视觉领域而言,在Transformer发展的浪潮下,继续研究CNN的意义是什么?是因为CNN在某些情况下(如小模型、边缘设备)更高效吗?
答:这个问题的提出似乎隐含了一个假设,就是“Transformer本质上强于CNN”,所以“CNN只有在某些Transformer看不上或者还没来得及吊打的领域苟延残喘”。其实Transformer和CNN谁强谁弱这个问题被人从2020年讨论到2023年,也没什么意思了。反正都是以可学习的方式实现序列建模,训练过程也都是黑盒子,最终效果也差不多,我们有什么证据支持Transformer本质上强于CNN?即便把“某些情况”这种定语去掉,即便不考虑成本和部署的因素,就单纯比理想情况下的性能极限,也没有理由认为Transformer本质上更强。Transformer本质优越论持有者普遍认为Transformer的scaling law更为优秀,在数据量和模型量级超大的情况下更强,但是google最新的工作(https://arxiv.org/abs/2310.16764)用JFT-4B训练NFNet也达到了90.4%的ImageNet精度(NFNet可是年龄跟ViT差不多的老模型了),这证明至少在图像领域,Transformer和CNN只不过是相互交融的两种模型罢了,ViT也这么多年了,这种谁强谁弱的讨论没必要延续到2024年了。
问:如何用CNN做各种生成任务?这是不是CNN的本质弱点?
答:ViT刚出现的时候做的也不过就是图像分类,连目标检测和语义分割都不好做,被广泛评价为“难以处理下游任务,部署困难,训练昂贵,建议手上没有TPU的玩家敬而远之”。
One More Thing
除了提出一种在图像上非常强力的backbone之外,本文所报告的这些发现似乎表明,大核CNN的潜力还没有得到完全开发。
即便在Transformer的理论强项——“大一统建模能力”上,大核CNN也比我们所想象的更为强大。
本文也报告了相关的证据:将kernel size从13减为11,这四个模态上的性能都发生了显著降低。
此外,作者已经放出了所有代码,并将所有模型和实验脚本开源。