点击下方卡片,关注“CVer”公众号
AI/CV重磅干货,第一时间送达
本文转载自:丁司图公众号
你有多久没调过kernel size了?
当你在卷积网络(CNN)的深度、宽度、groups、输入分辨率上调参调得不可开交的时候,是否会在不经意间想起,有一个设计维度,kernel size,一直如此显而易见却又总是被忽视,总是被默认设为3x3或5x5?
当你在Transformer上调参调得乐不思蜀的时候,是否希望有一种简单、高效、部署容易、下游任务性能又不弱于Transformer的模型,带给你朴素的快乐?
我们发表于CVPR 2022的工作表明,CNN中的kernel size是一个非常重要但总是被人忽略的设计维度,在现代模型设计的加持下,卷积核越大越暴力,既涨点又高效,甚至大到31x31都非常work(如下表所示,左边一栏表示模型四个stage各自的kernel size)!即便在大体量下游任务上,我们提出的超大卷积核模型RepLKNet与Swin等Transformer相比,性能也更好或相当!
Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
论文: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中应用超大卷积核的五条准则:
a. 用depth-wise超大卷积,最好再加底层优化(已集成进开源框架MegEngine)
b. 加shortcut
c. 用小卷积核做重参数化(即结构重参数化方法论,见我们去年的RepVGG,参考文献[1])
d. 要看下游任务的性能,不能只看ImageNet点数高低
e. 小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的具体形式。例如,下图分别表示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,完成了跨模型量级、跨数据量级的超越。
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相比,这个模型其实并不算很大)。
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(即更像人类)。
上面论文PDF和代码下载
后台回复:RepLKNet,即可下载论文和代码
后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集
后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集
后台回复:Transformer综述,即可下载最新的3篇Transformer综述PDF
CVer-Transfomer交流群成立
扫码添加CVer助手,可申请加入CVer-Transformer微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加小助手微信,进交流群
CVer学术交流群(知识星球)来了!想要了解最新最快最好的CV/DL/ML论文速递、优质开源项目、学习教程和实战训练等资料,欢迎扫描下方二维码,加入CVer学术交流群,已汇集数千人!
▲扫码进群
▲点击上方卡片,关注CVer公众号
整理不易,请点赞和在看