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

news2024/11/15 18:19:52

论文地址:https://arxiv.org/pdf/2203.06717.pdf

代码地址:https://github.com/MegEngine/RepLKNet

目录

论文地址:https://arxiv.org/pdf/2203.06717.pdf

代码地址:https://github.com/MegEngine/RepLKNet

Abstract

1. Introduction

2. Guidelines of Applying Large Convolutions

Guideline 1: large depth-wise convolutions can be efficient in practice

Remark 1.

Guideline 2: identity shortcut is vital especially for networks with very large kernels

Remark 2.

Guideline 3: re-parameterizing with small kernels helps to make up the optimization issue.

Remark 3.

Guideline 4: large convolutions boost downstream tasks much more than ImageNet classification

Remark 4.

Guideline 5: large kernel (e.g., 13×13) is useful even on small feature maps (e.g., 7×7).

Remark 5.

 3. RepLKNet: a Large-Kernel Architecture

4. Conclusion


Abstract

作者回顾了现代卷积神经网络(CNNs)中的大型核设计。受ViTs最新进展的启发,在本文中,作者证明了使用几个大的卷积核而不是一堆小的核可能是一个更强大的范式。作者提出了五个指导原则,例如,应用重新参数化的大的深度卷积来设计高效、高性能的大内核cnn。根据指导方针,作者提出了一个纯CNN体系结构RepLKNet,其内核大小与常用的3×3相比大到31×31。RepLKNet在很大程度上缩小了cnn和vit之间的性能差距,例如,与ImageNet上的Swin Transformer和一些典型的下游任务相比,RepLKNet在延迟较低的情况下实现了相当或更好的结果。RepLKNet在大数据和大模型上也表现出良好的可扩展性,在ImageNet上获得87.8%的top 1精度,在ADE20K上获得56.0%的mIoU,在具有类似模型尺寸的先进技术中非常具有竞争力。作者的研究进一步表明,与小核cnn相比,大核cnn具有更大的有效感受野和更高的形状偏差而不是纹理偏差。 

1. Introduction

作者系统地探讨了cnn的大型内核设计。作者遵循一个非常简单的“哲学”:只是将大的深度卷积引入到传统网络中,其规模从3×3到31×31,尽管存在通过单一或入大几层引型接收域的其他替代方案,例如:特征金字塔,膨胀卷积和可变形卷积。通过一系列的实验,作者总结了有效使用大卷积的5条经验准则:1)在实践中,非常大的核仍然可以是有效的;2)大核卷积+残差结构提升性能;3)用小核重新参数化有助于弥补优化问题;4)大卷积对下游任务的促进作用;5)大内核即使在小的特征映射上也很有用。

基于上述准则,作者提出了一种名为RepLKNet的新体系结构,这是一种纯CNN,其中使用重参数化的大卷积来构建大的接受域。网络总体上遵循Swin Transformer的宏观架构,并进行了一些修改,同时用大的深度卷积替换了多头自注意。作者主要对中型和大型模型进行基准测试,因为过去人们认为VIT在大数据和模型方面优于CNN。

2. Guidelines of Applying Large Convolutions

Guideline 1: large depth-wise convolutions can be efficient in practice

人们认为,大核卷积在计算上是昂贵的,因为核的大小会二次增加参数和FLOPs。通过应用深度卷积(DW)可以极大地克服这一缺陷。例如,在作者提出的RepLKNet中,将不同阶段的内核大小从[3,3,3,3]增加到[31,29,27,13],只会分别增加18.6%和10.4%的flop和参数数量,这是可以接受的。剩下的1×1卷积实际上占据了大部分的复杂性。

FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

具体了解可见:CNN 模型所需的计算力flops是什么?怎么计算? - 知乎

Remark 1.

作者发现现成的深度学习工具(如Pytorch)对大型DW卷积的支持很差,如表1所示。因此,作者尝试了几种方法来优化CUDA内核。在实践中,作者发现块(逆)隐式gemm算法是一个更好的选择。该实现已经集成到开源框架MegEngine[1]中,作者还为PyTorch发布了一个高效的实现[2]。 

[1]Megengine:a fast, scalable and easy-to-use deep learning framework. https://github.com/MegEngine/MegEngine, 2020.

[2] Official pytorch implementation of replknet. https://github . com / DingXiaoH / RepLKNet - pytorch,2022. 

上表表明作者的实现比Pytorch基线要高效得多。通过作者的优化,在RepLKNet中DW卷积的延迟贡献从49.5%降低到12.3%,这与FLOPs占用大致成比例。

Guideline 2: identity shortcut is vital especially for networks with very large kernels

identity shortcut会干什么:原封不动把x传出去,输入输出一模一样

深入了解identity shortcut可见:CV脱坑指南(一): ResNet重难点理解_马佳的男人的博客-CSDN博客_resnet不足

作者使用MobileNet V2进行基准测试,因为它大量使用DW层,并且有两个已发布的变体(带有或不带有shortcuts)。对于大内核版本,只需用13×13替换所有DW 3×3层。所有模型都在ImageNet上训练,训练配置相同,持续100个课时。表2显示,使用shortcuts的大内核使MobileNet V2的准确性提高了0.77%。但是,如果没有shortcuts,大的内核会将准确率降低到53.98%。

Remark 2.

该指南也适用于ViT。最近的一项研究发现,如果没有shortcuts,注意力的排名会随着深度的增加而成倍下降,从而导致过度平滑的问题。虽然大内核CNN可能以不同于ViT的机制退化,但作者也观察到,如果没有shortcuts,网络很难捕获本地细节。shortcuts使模型成为由许多具有不同接受场(RF)的模型组成的隐式集成,因此它可以从更大的最大RF中获益,同时又不会失去捕获小范围模式的能力。

Guideline 3: re-parameterizing with small kernels helps to make up the optimization issue.

作者将MobileNet V2的3×3层分别替换为9×9和13×13,并可选地采用结构重新参数化方法。具体来说,作者构建了一个与大层并行的3×3层,然后在Batch normalization (BN)层后将它们的输出相加(图2)。训练后,作者将小核和BN参数合并到大核中,因此得到的模型等价于训练模型,但不再有小核。表3显示,直接将内核大小从9增加到13会降低精度,而重新参数化可以解决这个问题。

Remark 3.

众所周知,ViT存在优化问题,尤其是在小型数据集上。一个常见的解决方法是引入卷积先验,例如,为每个自我注意块添加一个DW 3×3卷积,这与作者的方法类似。这些策略在网络之前引入了额外的平移等方差和局部性,使其更容易在小数据集上进行优化而不损失一般性。与ViT的行为类似,当预训练数据集增加到7300万张图像时,可以省略重新参数化而不降级。

Guideline 4: large convolutions boost downstream tasks much more than ImageNet classification

表3(重新参数化后)显示,将MobileNet V2的内核大小从3×3增加到9×9, ImageNet的准确性提高了1.33%,而Cityscapes mIoU提高了3.99%。表5显示了类似的趋势:当内核尺寸从[3,3,3,3]增加到[31,29,27,13]时,ImageNet的精度仅提高了0.96%,而在ADE20K上的mIoU提高了3.12%。这种现象说明,ImageNet评分相似的模型在下游任务中可能具有非常不同的能力(如表5中最下面的3个模型)。

Remark 4.

是什么导致了这种现象?首先,大内核设计显著提高了有效接受场(Effective receiving Fields, ERFs)。大量研究表明,“上下文”信息(隐含着较大的ERF)在许多下游任务(如对象检测和语义分割)中至关重要。其次,作者认为另一个原因可能是大型内核设计对网络造成了更多的形状偏差。简单地说,ImageNet图片可以根据纹理或形状进行正确分类。然而,人类识别物体主要是基于形状线索,而不是纹理,因此具有更强形状偏差的模型可能更好地转移到下游任务。最近的一项研究指出vit具有很强的形状偏差,这部分解释了为什么vit在转移任务中超级强大。相比之下,在ImageNet上训练的传统CNN往往偏向于纹理。作者发现,增大cnn的核尺寸可以有效地改善形状偏差。

Guideline 5: large kernel (e.g., 13×13) is useful even on small feature maps (e.g., 7×7).

为了验证它,作者将MobileNet V2最后阶段的DW卷积放大到7×7或13×13,因此内核大小与特性映射大小(默认情况下为7×7)相同甚至更大。我们将重新参数化应用于准则3所建议的大型核。表4显示,尽管最后一个阶段的卷积已经涉及到非常大的接受域,但进一步增加内核大小仍然会导致性能改进,特别是在诸如Cityscape这样的下游任务上。

Remark 5.

当核尺寸变大时,注意CNN的平动等值方差并不严格成立。如图3所示,相邻空间位置的两个输出仅共享部分核权,即通过不同的映射进行转换。该特性也符合ViTs的“哲学”——在获得更多容量之前放松对称。有趣的是,作者发现在变压器领域广泛使用的二维相对位置嵌入(2D Relative Position Embedding, RPE)也可以被视为一个大小为(2H−1)×(2W−1)的大深度核,其中H和W分别为特征图高度和宽度。大的核不仅有助于学习概念之间的相对位置,而且由于填充效应,可以编码绝对位置信息。

 3. RepLKNet: a Large-Kernel Architecture

RepLKNet的架构如上图所示。

Stem 指的是起始层。由于目标是下游密集预测任务的高性能,在开始时通过几个转换层捕获更多细节。在第一个带有2×下采样的3×3层之后,安排一个DW 3×3层捕获底层模式,一个1×1 conv层,另一个DW 3×3层进行下采样。

Stages 1-4每个都包含几个RepLK块,它们使用shortcuts(指南2)和DW大内核(指南1)。在DW conv前后使用1×1 conv作为一种常见的实践。注意,每个DW大转换使用5×5内核进行重新参数化(指南3),这在图4中没有显示。除了提供了足够的接受域和聚合空间信息能力的大转换层外,模型的表征能力也与深度密切相关。为了提供更多的非线性和跨通道的信息通信,我们希望使用1×1层来增加深度。受ViT和MLP中广泛使用的前馈网络(FFN)的启发,作者使用了类似的由shortcut、BN、两个1×1层和GELU组成的cnn风格的块,因此称为ConvFFN块。与经典FFN在全连接层之前使用层归一化相比,BN的优点是可以融合到conv中进行高效推理。通常的做法是,ConvFFN Block的内部通道数是4×作为输入。简单地遵循ViT和Swin,它们交错了注意力和FFN块,作者在每个RepLK块后面放置一个ConvFFN。

Transition Blocks放置在stages之间,首先通过1×1 conv增加通道维度并使用DW 3×3 conv进行2×下采样。

4. Conclusion

本文重新讨论了在设计CNN体系结构时长期被忽略的大型卷积核。

作者证明了使用几个大内核而不是许多小内核可以更有效地产生更大的有效接受域,大大提高了CNN的性能,特别是在下游任务上,并在数据和模型扩展时大大缩小了CNN和ViT之间的性能差距。作者希望他们的工作能够促进CNN和ViT的研究。一方面,对于CNN,作者的研究结果表明我们应该特别关注ERFs,这可能是高性能的关键。

另一方面,对于ViT来说,由于大卷积可以替代具有相似行为的多头自注意,这可能有助于理解自注意的内在机制。

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

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

相关文章

MySQL架构MMM

官网地址: Multi-Master Replication Manager for MySQL [MMM for MySQL Wiki] 简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和…

Kafka - 14 Kafka分区的分配策略及再平衡 | Range | RoundRobin | Sticky | CooperativeSticky

文章目录1. 分区的分配以及再平衡2. Range 分区分配以及再平衡3. RoundRobin 分区分配以及再平衡4. Sticky 分区分配以及再平衡1. 分区的分配以及再平衡 一个consumer group中有多个consumer组成,一个 topic有多个partition组成,现在的问题是&#xff0…

[Windows驱动开发] BlackBone介绍

▒ 目录 ▒🛫 导读需求开发环境1️⃣ 名词解释2️⃣ 介绍3️⃣ 库包含内容4️⃣ 编译问题总结常见问题fatal error LNK1104非类型模板参数中的 "auto" 📖 参考资料🛫 导读 需求 作为Windows开发人员,经常遇到枚举进程、…

dojo中的类

使用arcgis api for js 4.*进行地图的web前端开发,就不得不与dojo打交道。dojo是一个框架,自成体系,比如它对类的支持,有自己的一套。众所周知,js不是面向对象语言,没有类这一说,都是用函数来模…

人工智能轨道交通行业周刊-第25期(2022.11.28-12.4)

本期关键词:液体安检仪、智慧车站、大机作业、动车打温、实时人体姿态估计、图像压缩 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟V…

Java项目:SSM医院挂号预约管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员与医生两种角色; 管理员角色包含以下功能: 管理员登录,添加科室,科室增删改查,医生管理,查看预约信息,…

Redis03:Redis基础知识以及数据类型

Redis基础知识以及数据类型基础知识Redis-key基本数据类型String(字符串)三种特殊的数据类型geospatialhyperloglogbitmaps基础知识 redis默认有16个数据库,默认使用的时第0个,可以使用select进行切换数据库 清除当前数据库 清除全部数据库的内容 Red…

Cmake升级与软链接

记录cmake升级版本的记录,主要参考文章:Unbuntu安装Ros后Cmake变成3.10_向日葵骑士Faraday的博客-CSDN博客 cmake升级、更新(ubuntu18.04)_Doctor_Wu_的博客-CSDN博客_cmake升级 设计安装ros后cmake版本出现问题,且卸…

[附源码]Python计算机毕业设计Django基于Java的员工管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Windows 文件共享功能使用方法,局域网多台电脑之间传送文件

设想一下,家里或者公司有多台电脑,连接同一个Wifi,也就是处于同一个局域网中。 在不能使用微信、网盘的文件传输功能的情况下,这多台电脑之间,就只能用U盘传送数据吗? 不。Windows系统中已经提供了文件共享…

ZMQ之克隆模式的可靠性

克隆服务器的可靠性 克隆模型1至5相对比较简单,下面我们会探讨一个非常复杂的模型。可以发现,为了构建可靠的消息队列,我们需要花费非常多的精力。所以我们经常会问:有必要这么做吗?如果说你能够接受可靠性不够高的、或…

Docker三大核心概念(镜像、容器和仓库)与虚拟化

目录 1. Docker是什么 2. Docker与虚拟化 3. Docker虚拟化的好处 4. Docker核心概念 4.1.镜像 4.2.容器 4.3.仓库 5. CentOS7 安装docker(在线方式) 5.1.内核版本信息检查 5.2 卸载可能存在的旧版本 5.3 安装必要的系统工具 5.4 添加docker-ce安装源 5.5 更新yum缓存 5.…

web前端期末大作业:个人网站设计——响应式个人小站网站HTML+CSS+JavaScript

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

STC 51单片机54——气压水压计HX710B 串口显示均值滤波+滑窗滤波

//气压模块为红色模块,传感器型号未知,其信号放大器型号为HX710B // STC15W408AS 11.0592MHz 波特率9600,串口输出大气压强值 // STC15W408AS没有定时器1,所以用定时器2做波特率发生器 // 采用电脑USB供电会有很大的干扰&#xff…

Unity工具 - 工具聚合页(UEWindow)

随着项目工程的推进,开发者们会根据工作内容的需要在Unity内开发众多的工具。随着工具的增多,Unity 的Menu菜单也会逐渐臃肿,过于分散,工具代码也难以查找。在此问题的基础上,开发了工具聚合页(UEWindow) 这一功能来管…

R绘图案例|基于分面的面积图

简介 最近参加一个统计建模的比赛。模型建模后,需要展示不同模型的性能指标,数据如下所示: 其中,第 1 列是不同样本,共376条。第 2-4 列是随机森林得到的结果,第 5-7 列是XGBoost的结果。一共使用了三种评…

数字验证学习笔记——UVM学习3 核心基类

一、核心基类 UVM世界中的类最初都是从一个uvm_void根类(root class)继承来的,而实际上这个类并没有成员变量和方法。 uvm_void只是一个虚类(virtual class),还在等待将来继承于它的子类去开垦。在继承与u…

适合新手的Pytorch的中文文档

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

牛客练习赛106

牛客练习赛106 C D 脑筋急转弯的构造题 E 染色法判断二分图 结论,这个图是二分图说明不存在奇环 设左边是x,右边是y 则有xyn,xyn, xyn,且x∗y>边数n∗(n−1)/2−mx*y>边数n*(n-1)/2-m x∗y>边数n∗(n−1)/2−m 也就是说左式最大是n∗n/4(xn/…

【1774. 最接近目标价格的甜点成本】

来源:力扣(LeetCode) 描述: 你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则: 必须选择 一种 冰激凌基料。可以添加 一种或多种 配料&…