Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

丁霄汉作者

大到31x31的超大卷积核,涨点又高效,一作解读RepLKNet

你有多久没调过 kernel size 了?虽然常常被人忽略,但只要将其简单加大,就能给人惊喜。


当你在卷积网络(CNN)的深度、宽度、groups、输入分辨率上调参调得不可开交的时候,是否会在不经意间想起,有一个设计维度 kernel size,一直如此显而易见却又总是被忽视,总是被默认设为 3x3 或 5x5?

当你在 Transformer 上调参调得乐不思蜀的时候,是否希望有一种简单、高效、部署容易、下游任务性能又不弱于 Transformer 的模型,带给你朴素的快乐?

近日,清华大学旷视科技等机构的研究者发表于 CVPR 2022 的工作表明,CNN 中的 kernel size 是一个非常重要但总是被人忽略的设计维度。在现代模型设计的加持下,卷积核越大越暴力,既涨点又高效,甚至大到 31x31 都非常 work(如下表 5 所示,左边一栏表示模型四个 stage 各自的 kernel size)!

即便在大体量下游任务上,我们提出的超大卷积核模型 RepLKNet 与 Swin 等 Transformer 相比,性能也更好或相当!

图片

  • 论文地址:https://arxiv.org/abs/2203.06717

  • MegEngine 代码和模型:https://github.com/megvii-research/RepLKNet

  • PyTorch 代码和模型:https://github.com/DingXiaoH/RepLKNet-pytorch


图片


太长不看版

以下是两分钟内可以看完的内容总结。

A. 我们对业界关于 CNN 和 Transformer 的知识和理解有何贡献?

我们挑战了以下习惯认知:

1. 超大卷积不但不涨点,而且还掉点?我们证明,超大卷积在过去没人用,不代表其现在不能用。人类对科学的认知总是螺旋上升的,在现代 CNN 设计(shortcut、重参数化等)的加持下,kernel size 越大越涨点!

2. 超大卷积效率很差?我们发现,超大 depth-wise 卷积并不会增加多少 FLOPs。如果再加点底层优化,速度会更快,31x31 的计算密度最高可达 3x3 的 70 倍

3. 大卷积只能用在大 feature map 上?我们发现,在 7x7 的 feature map 上用 13x13 卷积都能涨点

4. ImageNet 点数说明一切?我们发现,下游(目标检测语义分割等)任务的性能可能跟 ImageNet 关系不大。

5. 超深 CNN(如 ResNet-152)堆叠大量 3x3,所以感受野很大?我们发现,深层小 kernel 模型有效感受野其实很小。反而少量超大卷积核的有效感受野非常大

6. Transformers(ViT、Swin 等)在下游任务上性能强悍,是因为 self-attention(Query-Key-Value 的设计形式)本质更强?我们用超大卷积核验证,发现 kernel size 可能才是下游涨点的关键

B. 我们做了哪些具体的工作?

1. 通过一系列探索性的实验,总结了在现代 CNN 中应用超大卷积核的五条准则

  • 用 depth-wise 超大卷积,最好再加底层优化(已集成进开源框架 MegEngine

  • 加 shortcut

  • 用小卷积核做重参数化(即结构重参数化方法论,见我们去年的 RepVGG,参考文献 [1])

  • 要看下游任务的性能,不能只看 ImageNet 点数高低

  • 小 feature map 上也可以用大卷积,常规分辨率就能训大 kernel 模型


2. 基于以上准则,简单借鉴 Swin Transformer 的宏观架构,我们提出了一种架构 RepLKNet,其中大量使用超大卷积,如 27x27、31x31 等。这一架构的其他部分非常简单,都是 1x1 卷积、Batch Norm 等喜闻乐见的简单结构,不用任何 attention。

3. 基于超大卷积核,对有效感受野、shape bias(模型做决定的时候到底是看物体的形状还是看局部的纹理?)、Transformers 之所以性能强悍的原因等话题的讨论和分析。我们发现,ResNet-152 等传统深层小 kernel 模型的有效感受野其实不大,大 kernel 模型不但有效感受野更大而且更像人类(shape bias 高),Transformer 可能关键在于大 kernel 而不在于 self-attention 的具体形式。

例如,下图 1 分别表示 ResNet-101、ResNet-152、全为 13x13 的 RepLKNet、kernel 大到 31x31 的 RepLKNet 的有效感受野,可见较浅的大 kernel 模型的有效感受野非常大。

图片

有效感受野

C. 提出的架构 RepLKNet 效果如何?

1. ImageNet 上,与 Swin-Base 相当。在额外数据训练下,超大量级模型最高达到 87.8% 的正确率。超大卷积核本来不是为刷 ImageNet 设计的,这个点数也算是可以让人满意。

2. Cityscapes 语义分割上,仅用 ImageNet-1K pretrain 的 RepLKNet-Base,甚至超过了 ImageNet-22K pretrain 的 Swin-Large。这是跨模型量级、跨数据量级的超越

3. ADE20K 语义分割上,ImageNet-1K pretrain 的模型大幅超过 ResNet、ResNeSt 等小 kernel 传统 CNN。Base 级别模型显著超过 Swin,Large 模型与 Swin 相当。超大量级模型达到 56% 的 mIoU

4. COCO 目标检测上,大幅超过同量级的传统模型 ResNeXt-101(超了 4.4 的 mAP),与 Swin 相当,在超大量级上达到 55.5% 的 mAP

下面是详细介绍。

初衷:我们为什么需要超大 kernel size?

在当今这个时代,我们再去研究听起来就很复古的大 kernel,是为什么呢?

1. 复兴被「错杀」的设计元素,为大 kernel 正名。在历史上,AlexNet 曾经用过 11x11 卷积,但在 VGG 出现后,大 kernel 逐渐被淘汰了,这标志着从浅而 kernel 大到深而 kernel 小的模型设计范式的转变。这一转变的原因包括大家发现大 kernel 的效率差(卷积的参数量和计算量与 kernel size 的平方成正比)、加大 kernel size 反而精度变差等。但是时代变了,在历史上不 work 的大 kernel,在现代技术的加持下能不能 work 呢?

2. 克服传统的深层小 kernel 的 CNN 的固有缺陷。我们曾经相信大 kernel 可以用若干小 kernel 来替换,比如一个 7x7 可以换成三个 3x3,这样速度更快(3x3x3< 1x7x7),效果更好(更深,非线性更多)。有的同学会想到,虽然深层小 kernel 的堆叠容易产生优化问题,但这个问题已经被 ResNet 解决了(ResNet-152 有 50 层 3x3 卷积),那么这种做法还有什么缺陷呢?——ResNet 解决这个问题的代价是,模型即便理论上的最大感受野很大,实质上的有效深度其实并不深(参考文献 2),所以有效感受野并不大。这也可能是传统 CNN 虽然在 ImageNet 上跟 Transformer 差不多,但在下游任务上普遍不如 Transformer 的原因。也就是说,ResNet 实质上帮助我们回避了「深层模型难以优化」的问题,而并没有真正解决它。既然深而 kernel 小的模型有这样的本质问题,浅而 kernel 大的设计范式效果会如何呢

3. 理解 Transformer 之所以 work 的原因。已知 Transformer 性能拔群,特别是在检测、分割等下游任务上。Transformer 的基本组件是 self-attention,而 self-attention 的实质是在全局尺度或较大的窗口内进行 Query-Key-Value 运算。那么 Transformer 性能强悍的原因是什么,是 Query-Key-Value 的设计形式吗?我们猜测,会不会「全局尺度或较大的窗口」才是关键?对应到 CNN 中,这就需要用超大卷积核来验证。

探索实验

为了搞明白大 kernel 到底应该怎么用,我们在 MobileNet V2 上进行了一系列探索实验,总结出五条准则。这里略去细节只说结论:

1. 用 depth-wise 大 kernel,完全可以做到相当高效。在我们的优化(已经集成进开源框架 MegEngine)下,31x31 depth-wise 卷积的用时最低可达 3x3 卷积的 1.5 倍,而前者的 FLOPs 是后者的 106 倍(31x31/9),这意味着前者的效率是后者的 71 倍!

2. 不带 identity shortcut,增大 kernel 会大幅掉点(ImageNet 掉了 15%);带 shortcut,增大 kernel 才会涨点。

3. 如果要想进一步加大 kernel size,从大 kernel 到超大 kernel,可以用小 kernel 做结构重参数(参考文献 1)。也就是说,在训练的时候并行地加一个 3x3 或 5x5 卷积,训练完成后将小 kernel 等价合并到大 kernel 里面去。这样,模型就可以有效捕捉到不同尺度的特征。不过我们发现,数据集越小、模型越小,重参数化越重要。反之,在我们的超大规模数据集 MegData73M 上,重参数化提升很小(0.1%)。这一发现跟 ViT 类似:数据规模越大,inductive bias 越不重要。

4. 我们要的是在目标任务上涨点,而不是 ImageNet 上涨点,ImageNet 的精度跟下游任务不一定相关。随着 kernel size 越来越大,ImageNet 上不再涨点,但是 Cityscapes、ADE20K 语义分割上还能涨一到两个点,而增大 kernel 带来的额外的参数量和计算量很少,性价比极高!

5. 有点反直觉的是,在 7x7 的小 feature map 上用 13x13 也可以涨点!也就是说,大 kernel 模型不一定需要大分辨率来训,跟小 kernel 模型差不多的训练方法就可以,又快又省!

RepLKNet:超大卷积核架构

我们以 Swin 作为主要的对比对象,并无意去刷 SOTA,所以简单借鉴 Swin 的宏观架构设计了一种超大卷积核架构。这一架构主要在于把 attention 换成超大卷积和与之配套的结构,再加一点 CNN 风格的改动。根据以上五条准则,RepLKNet 的设计元素包括 shortcut、depth-wise 超大 kernel、小 kernel 重参数化等。

图片

整体架构图。

增大 kernel size:越大越暴力!

我们给 RepLKNet 的四个 stage 设定不同的 kernel size,在 ImageNet 和 ADE20K 语义分割数据集上进行实验,结果颇为有趣:ImageNet 上从 7x7 增大到 13x13 还能涨点,但从 13x13 以后不再涨点;但是在 ADE20K 上,从四个 stage 均为 13 增大到四个 stage 分别为 31-29-27-13,涨了 0.82 的 mIoU,参数量只涨了 5.3%,FLOPs 只涨了 3.5%。

所以,后面的实验主要用 31-29-27-13 的 kernel size,称为 RepLKNet-31B,并将其整体加宽为 1.5 倍,称为 RepLKNet-31L。

图片


Cityscapes 语义分割

RepLKNet-31B 的体量略小于 Swin-Base,在仅仅用 ImageNet-1K pretrain 前提下,mIoU 超过 Swin-Large + ImageNet-22K,完成了跨模型量级、跨数据量级的超越

图片

Cityscapes 结果。

ADE20K 语义分割

RepLKNet 相当能打,特别是 Base 级别。跟量级差不多的 ResNet 相比,mIoU 高了 6.1,体现出了少量大 kernel 相对于大量小 kernel 的显著优势。(COCO 目标检测上也有相同结论,RepLKNet-31B 的 mAP 比体量相当的 ResNeXt-101 高了 4.4)RepLKNet-XL 是更大级别的模型,用私有数据集 MegData-73M 进行预训练,达到了 56.0 的 mIoU(跟 ViT-L 相比,这个模型其实并不算很大)。

图片

ADE20K 结果。

ImageNet 分类、COCO 目标检测结果参见「太长不看」部分或论文。

讨论与分析

有效感受野:大 kernel 模型远超深层小 kernel 模型

我们可视化了 RepLKNet-31、RepLKNet-13(前文所说的每个 stage 都是 13x13 的模型)、ResNet-101、ResNet-152 的有效感受野(方法详见论文)发现 ResNet-101 的有效感受野其实很小,而且 ResNet-152 相对于 101 的提升也很小;RepLKNet-13 的有效感受野很大,而 RepLKNet-31 通过增大 kernel size 进一步将有效感受野变得非常大

图片


Shape bias:大 kernel 模型更像人类

我们又研究了模型的 shape bias(即模型有多少比例的预测是基于形状而非纹理做出的),人类的 shape bias 在 90% 左右,见下图左边的菱形点。我们选用的模型包括 Swin、ResNet152、RepLKNet-31 和 RepLKNet-3(前文提到的每个 stage 都是 3x3 的小 kernel baseline),发现 RepLKNet-3 和 ResNet-152 的 kernel size 一样大(3x3),shape bias 也非常接近(图中的两条竖直实线几乎重合)。

有意思的是,关于 shape bias 的一项工作提到 ViT(全局 attention)的 shapebias 很高(参见参考文献 3 中的图),而我们发现 Swin(窗口内局部 attention)的 shape bias 其实不高(下图),这似乎说明 attention 的形式不是关键,作用的范围才是关键,这也解释了 RepLKNet-31 的高 shape bias(即更像人类)

图片

shape bias 对比

MegEngine 对大 kernel 的强力优化

以往大家不喜欢用大 kernel 的其中一个原因是其较低的运行效率。但旷视开源的深度学习框架 MegEngine 通过分析和实验发现大 kernel depth-wise 卷积仍有很大的优化潜力,其运行时间可能不会显著慢于小 kernel(延展阅读 https://zhuanlan.zhihu.com/p/479182218)。

MegEngine 针对大 kernel depthwise 卷积做了多种深度优化,优化后的 MegEngine 性能比 PyTorch 最高快 10 倍,31x31 大小卷积核上的运行时间几乎和 9x9 大小卷积核的运行时间差不多,可以打满设备的浮点理论峰值。MegEngine 用实际数据在一定意义上打消了大家对大 kernel 卷积运行效率的疑虑。这些优化已经集成到了 MegEngine 中,欢迎使用~

知乎原文:https://zhuanlan.zhihu.com/p/481445076?utm_source=wechat_session&utm_medium=social&utm_oi=56560353017856&utm_campaign=shareopn
理论卷积神经网络
相关数据
清华大学机构

清华大学(Tsinghua University),简称“清华”,由中华人民共和国教育部直属,中央直管副部级建制,位列“211工程”、“985工程”、“世界一流大学和一流学科”,入选“基础学科拔尖学生培养试验计划”、“高等学校创新能力提升计划”、“高等学校学科创新引智计划”,为九校联盟、中国大学校长联谊会、东亚研究型大学协会、亚洲大学联盟、环太平洋大学联盟、清华—剑桥—MIT低碳大学联盟成员,被誉为“红色工程师的摇篮”。 清华大学的前身清华学堂始建于1911年,因水木清华而得名,是清政府设立的留美预备学校,其建校的资金源于1908年美国退还的部分庚子赔款。1912年更名为清华学校。1928年更名为国立清华大学。1937年抗日战争全面爆发后南迁长沙,与北京大学、南开大学组建国立长沙临时大学,1938年迁至昆明改名为国立西南联合大学。1946年迁回清华园。1949年中华人民共和国成立,清华大学进入了新的发展阶段。1952年全国高等学校院系调整后成为多科性工业大学。1978年以来逐步恢复和发展为综合性的研究型大学。

http://www.tsinghua.edu.cn/
相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

旷视科技机构

旷视成立于2011年,是全球领先的人工智能产品和解决方案公司。深度学习是旷视的核心竞争力,我们打造出自研的AI生产力平台Brain++并开源其核心——深度学习框架“天元”,实现了算法的高效开发与部署。在持续引领技术进步的同时,我们推动AI产业的商业化落地,聚焦个人物联网、城市物联网、供应链物联网三大赛道,为个人用户带来更出色的美学体验与安全保障、让城市空间更有序、并帮助企业实现工业、仓储数字化升级。我们提供包括算法、软件和硬件产品在内的全栈式、一体化解决方案。

https://www.megvii.com
知乎机构

知乎,中文互联网综合性内容平台,自 2010 年成立以来,知乎凭借认真、专业、友善的社区氛围,独特的产品机制,以及结构化、易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类,在诸多领域具有关键影响力的内容平台。知乎将AI广泛应用与社区,构建了人、内容之间的多元连接,提升了社区的运转效率和用户体验。知乎通过内容生产、分发,社区治理等领域的AI应用,也创造了独有的技术优势和社区AI创新样本。

zhihu.com
目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

感受野技术

一个感觉神经元的感受野是指这个位置里适当的刺激能够引起该神经元反应的区域。感受野一词主要是指听觉系统、本体感觉系统和视觉系统中神经元的一些性质。

推荐文章
暂无评论
暂无评论~