RepLKNet(CVPR 2022, MEGVII)

paper:Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs

official implementation:https://github.com/DingXiaoH/RepLKNet-pytorch

背景

卷积神经网络(CNN)曾经是现代计算机视觉系统中的常见选择。然而,最近视觉变换器(ViT)在许多视觉任务中表现出了领先的性能,这对CNN构成了巨大挑战。研究人员普遍认为,ViT的强大性能部分归功于其多头自注意力机制(MHSA),该机制在建构大感受野方面具有重要作用。

出发点

本文的出发点是探讨在现代CNN中引入大卷积核的设计,试图通过使用大卷积核来缩小CNN与ViT之间的性能差距。

创新点

本文解决了如何设计有效且高性能的大卷积核CNN架构的问题,特别是在与ViTs性能差距的缩小上。具体包括:

  1. 大卷积核设计:提出了使用大深度卷积核(最大为31×31)来构建大感受野的CNN架构,这与传统的使用小卷积核堆叠的方法形成鲜明对比。
  2. 重新参数化技术:通过小卷积核的重新参数化来弥补优化问题,提升了大卷积核CNN的实际效率。
  3. RepLKNet架构:提出了一种纯CNN架构,采用了大卷积核来构建大的感受野(ERFs),并展示了与ViTs相比具有可比性或更优的结果。
  4. 五个设计准则:总结了有效使用大卷积核的五个经验性准则,包括应用重参数化的大核深度卷积、identity shortcut connection的重要性、小卷积核的重参数化帮助优化问题、大卷积核对下游任务的提升远超过ImageNet分类,以及大卷积核即使在小特征图上也是有用的。
  5. 性能提升:RepLKNet在ImageNet分类和一些经典的下游任务上取得了与Swin Transformer相当或更好的结果,同时具有更低的延迟。
  6. 可扩展性:RepLKNet在大型数据集和大型模型上表现出良好的可扩展性,获得了87.8%的ImageNet top-1准确率和56.0%的ADE20K mIoU,这在类似大小的SOTA模型中非常有竞争力。
  7. 形状偏好:研究表明,与小卷积核CNN相比,大卷积核CNN具有更大的有效感受野和更高的形状偏好而非纹理偏好, 这与人类的认知部分一致。

方法介绍

Guidelines of Applying Large Convolutions

作者首先总结了有效使用大核卷积的5个指导方针。

Guideline 1:在实际应用中,大核深度卷积是有效的。大家普遍认为大核卷积在计算上是昂贵的,因为核的大小二次方的增加了参数量和FLOPs。通过应用深度卷积(depthwise convolution, DW)可以极大地克服这个缺点。例如在本文提出的RepLKNet上将不同stage的卷积核从[3, 3, 3, 3]增大到[31, 29, 27, 13]只将FLOPs和参数量分别增加了18.6%和10.4%,这是可以接受的。剩下的1x1卷积实际上占据了大部分的复杂度。

有人可能会担心DW卷积在像GPU这样的现代并行计算设备上非常低效。对于传统的3x3 DW卷积确实如此,因为DW操作使得计算 vs. 内存访问成本的比率较低,这对现代计算结构不友好。但是作者发现,当kernel size变大时计算密度会增加:例如在DW 11x11 kernel中,每次我们从特征图中加载一个值,它最多可以进行121次乘法,而在3x3 kernel中这个数字只有9。所以根据roofline model,当卷积核变大时,实际延迟的增加不会像FLOPs增加的那么多。

Remark 1. 不幸的是现有的深度学习框架(例如Pytorch)对深度卷积的支持很差,如表1所示。因此作者尝试了几种方法来优化CUDA kernel,其中基于FFT的方法在实现大核卷积方面似乎是合理的选择,但实践中作者发现block-wise (inverse) implicit gemm算法是更好的选择,如表1所示,和pytorch baseline相比,本文的实现效率要高得多。

Guideline 2:对于大核卷积的网络,identity shortcut至关重要。为了验证这一点,使用MobileNet v2进行基准测试,因为它大量使用DW卷积,并且有两个版本(有shortcut的和没有shortcut的)。作者用13x13 DW卷积替换所有的3x3 DW卷积,并在ImageNet上训练了100个epoch,结果如表2所示,大核卷积精度提升了0.77%,但如果没有shortcut,精度降低到了53.98%。

Remark 2. 这条准则也适用于ViTs。最近一项研究表明,如果没有identity shortcut,注意力会随着深度呈双指数下降,导致过渡平滑问题。虽然大核CNNs可能以不同的机制退化,但我们也观察到,如果没有identity shortcut,网络很难捕获到局部细节。

Guideline 3:用小核重参数化有助于弥补优化问题。如表3所示,直接将卷积核从9x9增大到13x13精度会下降,但额外增加一个3x3并行分支并在推理时进行重参数化解决了这个问题,如图2所示。

Remark 3. 众所周知ViTs存在优化问题特别是在小数据集上,一个常见的解决方法是引入卷积先验,例如在每个self-attention block中添加一个3x3 DW conv,这和我们的方法类似。这些策略向网络中引入了平移不变性和局部先验,使得网络在小数据集上更容易优化。与ViT类似,我们还发现,当数据量增加到7300万张图片时,重参数化可以省略。

Guideline 4:相比于ImageNet分类,大核卷积更能提升下游任务的性能。如表3所示,卷积核从3x3增大到9x9,ImageNet上提升了1.33%,而Cityscapes上mIoU提升了3.99%。表5也显示出类似的趋势,当卷积核从[3, 3, 3, 3]增大到[31, 29, 28, 13]时,ImageNet上的精度只提升了0.97%,但ADE20K上mIoU提升了3.12%。

Remark 4. 是什么导致了这种现象?首先大卷积核显著增加了有效感受野(ERFs),许多工作已经证明,上下文信息即大ERFs,对目标检测和语义分割等下游任务是至关重要的。其次,作者任务大核卷积让网络有了更多了shape bias,简单地说,ImageNet可以通过纹理或形状进行分类。但人识别物体更多的是基于形状而不是纹理,因此具有较强shape bias的模型可能会更好的转移到下游任务。

Guideline 5:即使在小的特征图(例如7x7)上大核卷积(例如13x13)也是有用的。为了验证这一点,作者将MobileNet v2最后一个stage的卷积扩大到7x7或13x13,这样卷积核就与特征图(默认7x7)相当大小甚至更大。结果如表4所示,即使最后一个stage卷积已经具有很大的感受野了,进一步增大卷积核大小还能提升性能,尤其是在下游任务中。

Remark 5. 注意当kernel size变大时,CNN的平移不变性并不严格成立。如图3所示,相邻位置的两个输出只共享一小部分权重,即它们是通过不同的映射转换得到的。这也符合ViTs的特性,放松对称性以获得更多的容量。

 

RepLKNet:A Large-Kernel Architecture

基于上述准则,作者提出了RepLKNet,一个大核纯CNN结构设计的网络。整体结构如图4所示。

Stem部分首先是一个3x3-s2的普通卷积进行降采样,然后是一个3x3 DW用来捕捉low-level patterns,接着是一个1x1卷积,然后是另一个3x3-s2 DW进行降采样。

Stage 1-4每个都包括若干RepLK Block,其中使用了shortcut(Guideline 2)和大核DW卷积(Guideline 1)。遵循常见做法,在DW conv前后都使用了1x1 conv。注意每个大核DW卷积都使用了一个5x5 kernel用来重参数化(Guideline 3),在图4中没有显示。受Transformers和MLPs中广泛使用的Feed-Forward Network(FFN)的启发,作者也使用了一个类似的CNN-style block,包含shortcut、BN、两个1x1卷积和GELU,称之为ConvFFN Block。和FFN中使用的LN相比,BN的优点是可以融入前面的卷积中从而进行高效的推理。在网络中,每个RepLK Blcok前都有一个ConvFFN。

Transition Blocks位于stage之间,首先通过一个1x1卷积进行升维,然后通过3x3 DW卷积降采样。

总的来说,每个stage有三个结构参数,RepLK Block的数量 \(B\),通道维度 \(C\),kernel大小 \(K\)。所以一个RepLKNet结构通过 \([B_1,B_2,B_3,B_4],[C_1,C_2,C_3,C_4],[K_1,K_2,K_3,K_4]\) 来定义。

作者通过固定 \(\mathbf{B}=[2,2,18,2],\mathbf{C}=[128,256,512,1024]\) 并改变 \(\mathbf{K}\) 的大小来评估不同大小kernel的表现。作者设置kernel sizes分别为 \([13,13,13,13],[25,25,25,13],[31,29,27,13]\) 得到三个模型variants并表示为RepLKNet-13/25/31。此外作者还构建了两个小核baseline卷积核分别为3和7(RepLKNet-3/7)。

表5是不同kernel size的RepLKNet在ImageNet和ADE20K上的性能,卷积核从3增大到13提升了精度,进一步增大并不会带来进一步的提升了。但是在ADE20K上,将卷积核从[13, 13, 13, 13]增大到[31, 29, 27, 13]将mIoU提升了0.82,表明了大核在下游任务中的重要性。

接下来作者用更强的训练配置训练RepLKNet-31来和其它SOTA模型比较,上述的模型称为RepLKNet-31B(Base),并构建了一个更宽的模型 \(\mathbf{C}=[192,384,768,1536]\) 的RepLKNet-31L(Large)和 \(\mathbf{C}=[256,512,1024,2048]\) 的RepLKNet-XL(DW conv的输出通道数是输入的1.5倍)。

实验结果

由于RepLKNet的整体结构和Swin Transformer类似,作者在ImageNet上比较了两者的精度,如表6所示。可以看到尽管大核卷积对ImageNet分类的帮助没有那么大,但RepLKNet显示出了良好的精度/效率的平衡。例如RepLKNet-31B取得了84.8%的精度比Swin-B搞了0.3%,同时快了43%。RepLKNet-XL即使FLOPs大于Swin-L,但推理速度更快。

作者使用在ImageNet上预训练的模型作为backbone,分割模型采用UperNet,然后比较了在Cityscapes和ADE20K上的表现,如表7、8所示。在Cityscapes上,在ImageNet-1K上预训练的RepLKNet-31B的表现远好于Swin-B,甚至比在ImageNet-22K上预训练的Swin-L还要好。而在ADE20K上,同在ImageNet-22K上预训练的RepLKNet-31B和31L也要好于Swin-B和Swin-L。

 

 

表9展示了在COCO数据集上目标检测的表现,可以看到RepLKNet相比于Swin Transformer精度更高同时参数量和FLOPs都更低。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfTwo(n int) bool {const big 1 << 30return n > 0 && big%n 0 }

在 vite+vue3+electron 中使用 express

文章目录 一、Vite Vue3 Electron 项目的搭建二、搭建 express 环境1、安装 express 框架所需依赖2、创建 express 项目3、配置路由4、启动 express 服务5、启动 electron 并获取数据 三、项目打包 一、Vite Vue3 Electron 项目的搭建 详细的项目构建和打包可参考另一篇文…

hung 之 softlockup hardlockup 检测

1. softlockup & hardlockup 的含义 softlockup 指的是这样一种场景&#xff1a;由于内核程序设计问题&#xff0c;导致CPU长时间关闭抢占。 hardlockup 指的是这样一种场景&#xff1a;由于内核程序设计问题&#xff0c;导致CPU时钟中断长时间禁用。 softlockup 或 har…

【UE5.1】NPC人工智能——02 NPC移动到指定位置

效果 步骤 1. 新建一个蓝图&#xff0c;父类选择“AI控制器” 这里命名为“BP_NPC_AIController”&#xff0c;表示专门用于控制NPC的AI控制器 2. 找到我们之前创建的所有NPC的父类“BP_NPC” 打开“BP_NPC”&#xff0c;在类默认值中&#xff0c;将“AI控制器类”一项设置为“…

【Diffusion学习】【生成式AI】淺談圖像生成模型 Diffusion Model 原理

文章目录 Diffusion Model 是如何运作的&#xff1f;吃额外的1个数字&#xff1a;stepDenoise 模组内部实际做的事情&#xff1a;预测noise如何训练 Noise Predictor Text-to-ImageDDPM 算法 from&#xff1a; https://www.youtube.com/watch?vazBugJzmz-o&listPLJV_el3uV…

[HCTF 2018]WarmUp1

进入靶场&#xff0c;检查代码看到有source.php,访问 /source.php 读代码&#xff0c;在参数中传入 file&#xff0c;通过checkFile后&#xff0c;会加载file界面。 再看checkFile&#xff0c; 第一个判断&#xff0c;是非空并且是个字符串&#xff0c;否则返回false 第二个判…

微软研发致胜策略 01:尊定基础

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1994 年发布。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Debugging the Development Process》&#xff0c;这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…

特征映射(机器学习)

有时数据的分类并不像我们想象的那么简单&#xff0c;需要高次曲线才能分类。 就像下面的数据&#xff1a; 数据集最后给出&#xff1a; 我们这样看&#xff0c;至少需要达到2次以及以上的曲线才可以进行比较准确的分类。 比如如果已知数据有3列(两列特征) x1x2y-1-110.50.…

Axolotl

文章目录 一、关于 Axolotl特点Axolotl支持 二、快速入门⚡用法 三、环境设置1、Docker2、Conda/Pip venv3、Cloud GPU4、Bare Metal Cloud GPULambdaLabsGCP 5、Windows6、Mac7、Google Colab8、通过SkyPilot在公共云上启动9、通过 dstack 在公共云上启动 四、其他高级设置1、…

网站成长时间轴页面,网站发展记录页源码

一、源码描述 这是一款网站时间轴HTML源码&#xff0c;样式设计精美并且使用简单&#xff0c;主要用于记录你的网站发展历程&#xff0c;或者可以用于发布心情动态等&#xff0c;左侧年份可以折叠起来&#xff0c;页面底部是导航区域&#xff0c;可以自定义文本和链接。 二、…

Azure Repos 仓库管理

从远端仓库克隆到本地 前提:本地要安装git,并且登录了账户 1.在要放这个远程仓库的路径下,打git 然后 git clone https://.. 如果要登录验证,那就验证下 克隆完后,cd 到克隆的路径, 可以用 git branch -a //查看分支名 git status //查看代码状态 删除…

对于GPT-5在一年半后发布的期待!

首先&#xff0c;如果GPT-5真如OpenAI首席技术官米拉穆拉蒂&#xff08;Mira Murati&#xff09;在采访中所透露的那样&#xff0c;在一年半后发布&#xff0c;并在某些领域达到博士级的智能&#xff0c;这无疑将是一个令人振奋的消息。这一预测不仅反映了AI技术的快速发展&…

MPAS跨尺度、可变分辨率模式实践技术

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…

python实例练习00001:打开文件输出文件内容

try:file input(enter the file :)with open(file, r) as f:data f.read()print(data) except FileNotFoundError:print(fthe file {file} does not exists:) 打开windows的cmd运行程序&#xff0c;效果如下&#xff1a;

vscode常用组件

1.vue-helper 启用后点击右下角注册&#xff0c;可以通过vue组件点击到源码里面 2.【Auto Close Tag】和【Auto Rename Tag】 3.setting---Auto Reveal Exclude vscode跳转node_modules下文件&#xff0c;没有切换定位到左侧菜单目录> 打开VSCode的setting配置&#xff…

非法闯入智能监测摄像机:安全守护的新利器

在当今社会&#xff0c;安全问题愈发受到重视。随着科技的进步&#xff0c;非法闯入智能监测摄像机应运而生&#xff0c;成为保护家庭和财产安全的重要工具。这种摄像机不仅具备监控功能&#xff0c;还集成了智能识别和报警系统&#xff0c;能够在第一时间内检测到潜在的入侵行…

第七天 SpringBoot与SpringCloud微服务项目交付

Spring Cloud微服务项目交付 微服务扫盲篇 微服务并没有一个官方的定义&#xff0c;想要直接描述微服务比较困难&#xff0c;我们可以通过对比传统WEB应用&#xff0c;来理解什么是微服务。 单体应用架构 如下是传统打车软件架构图&#xff1a; 这种单体应用比较适合于小项…

图像处理中的Scharr算子的原理,并附OpenCV和MATLAB示例代码

Scharr算子是图像处理中的一种边缘检测算子&#xff0c;主要用于计算图像梯度的边缘检测。与Sobel算子类似&#xff0c;Scharr算子也使用卷积核来计算图像的导数&#xff0c;但Scharr算子在精度和抗噪性方面表现更优。其原理如下&#xff1a; 原理 梯度计算 在图像处理中&…

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列&#xff08;包含一块热备盘&#xff09;。 服务器存储故障&#xff1a; 该存储中的RAID5阵列1块硬盘由于未知原因离线&#xff0c;热备盘上线并开始同步数据&#xff0c;数据同步到…

Android C++系列:Linux文件系统(二)

1. VFS虚拟文件系统 Linux支持各种各样的文件系统格式&#xff0c;如ext2、ext3、reiserfs、FAT、NTFS、iso9660 等等&#xff0c;不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式&#xff0c;然而这些文件系统 都可以mount到某个目录下&#xff0c;使我们看到一个…