Paper note:A ConvNet for the 2020s

ConvNets:卷积神经网络

目录

1.Introduction

CV的重要策略:“Sliding window"strategy

Transformer 的崛起:

Multi-head self-attention:

先来总结一下Self-attention:

2.Modernizing a ConvNet: a Roadmap

1.Changing stage compute ratio.

2.Changing stem to “Patchify”.

3.ResNeXt-ify.

4.Inverted Bottleneck 

5.Large Kernel Sizes

6.Micro design


Motivation:

在2020年,视觉Transformers,尤其是Swin Transformers等分层Transformers开始取代ConvNets,成为通用视觉主干的首选。人们普遍认为,视觉Transformers比ConvNets更准确、更高效、更易扩展。但是大量的工作其实是将之前运用在CNN网络结构上的思路改进到Transformers结构当中去。而且现在有更多的数据,更好的数据增强,以及更加合理的优化器等.所以vision Transformers能够取得SOTA的效果,会不会是这些其他因素影响了网络。Transformers到底是厉害在哪了?
[Q:Transformers 究竟是胜在了模型本身 还是其他外界因素?]

Target:
如果把这些用在transformer上的技巧用在CNN上之后,进而重新设计ConvNet,卷积能达到的效果的极限是在哪里?是否也能得到相似的结果呢?

ConvNeXt在ResNet50模型的基础上仿照Swin Transformers的结构进行改进而得到的纯卷积模型

1.Introduction

CV的重要策略:“Sliding window"strategy

ConvNet有一个重要的特性:平移同变性(这是目标检测等任务的理想属性)

由于当以滑动窗口方式使用时,计算是共享的,因此ConvNets本质上也是高效的

A Sliding window:

类似于该图片中的下面包围起来的这个窗口,卷积和池化的操作窗口

窗口的两个影响卷积池化操作的参数:stride & padding

平移不变性:
对于图像分类等任务来说,图像中的目标不管被移动到图片的哪个位置,得到的结果(Tag)应该是相同的,这就是CNN中的平移不变性。(无论输入如何,系统产生完全相同的响应)

平移同变性:(translation equivariance
系统在不同位置的工作原理相同,但是它的响应随着目标位置的变化而变化,例如实例分割任务,就需要translation equivariance,目标如果被平移,那么输出的实例也应该相应变化。
也就是说,一个像素在某一个实例中可能是前景,但是在相邻的另一个实例中可能就是背景了,同一个像素在不同的相对位置,具有不同的语义,对应着不同的响应。

Transformer 的崛起:

Vision Transformers(ViT)的引入,使得语言和视觉两个不同的方向发生了汇合。
除了最开始的“patchify”层将图像分割成一系列图像块之外,ViT没有引入图像特定的归纳偏置,并且对原始NLP Transformers进行了最小的更改。ViT的一个主要关注点是缩放行为:借助更大的模型和数据集大小,Transformers明显优于标准ResNet。

但计算机视觉不仅限于图像分类。如前所述,过去十年中众多计算机视觉任务的解决方案在很大程度上依赖于滑动窗口、全卷积范式。在没有ConvNet归纳偏置的情况下,普通ViT模型在被用作通用视觉主干时面临许多挑战。最大的挑战是ViT的全局注意力设计,它在输入大小方面具有二次复杂度。对于ImageNet分类这是可以接受的,但在处理更高分辨率的输入图像时就会变得非常难以对付。
分层Transformer的solution:
引入“滑动窗口”(局部窗口内的注意力),将卷积加入到Tranformer的模型中(Swin Transformers)。
得出结论:Transformer在近年来获得的成就,本质原因都是因为他在不断地恢复卷积,但滑动窗口自注意力的实现代价非常昂贵,系统设计也更加复杂,我们不禁开始思考:既然Transformer在学习ConvNet的过程中遇到了困难,那么为什么不直接使用原来的ConvNet模型呢?
事实上,ConvNet失去热度的唯一原因也许就是在某些视觉任务中的处理效率不及Transformer,这个性能差异的原因就是Transformer的缩放能力,尤其是multi-head self-attention

Multi-head self-attention:

接受三个序列query、key、value,其中key与value两个序列长度一定相同,query序列长度可以与key、value长度不同。multi-head attention的输出序列长度与输入的query序列长度一致

先来总结一下Self-attention:

self-attention与传统注意力机制的不同:
传统的注意力机制发生在Target的元素和source中的所有元素之间,即在encoder-decoder模型中,attention权值的计算不仅需要encoder中的隐状态,而且还需要decoder中的隐状态。
而self-attention则是输入语句内部元素之间或者输出语句内部元素之间发生的注意力机制,例如在transformer中计算权重参数,将文字向量转为对应的KQV,只需要在source处进行对应的矩阵操作,而用不到target中的信息。
自注意力机制实际上是想让机器注意到整个输入中不同部分之间的相关性

上图中有四个输入向量,也会产生四个输出向量,我们以b1的生成为例,b1的生成要考虑所有的ai对于a1所产生的影响,计算各向量对于a1的关联程度的方法:

Tranformer中使用了dot-product的方法,将两个向量乘上不同的矩阵Wq与Wk(权重矩阵),需要学习来进行更新,得到q和k,再将qk做内积,得到α,也就是a1和a2之间的关联程度。α:attention score,q:query,k:key

之后将各向量与a1的关联程度共同进行计算,借助softmax函数得到归一化后的结果。

Attention function:

其中矩阵形式的得到:


Softmax:计算出来的是Q和K对应行向量的内积,内积用以表征Qi在Ki上的投影;投影量越大,就说明两个向量的相关度越高;
而softmax的作用是归一化,也就是重新赋权,让总权值为1,ex:

对Self-attention做一个全面的整理总结:

回到multi-head self-attention。
Motivation:相关性有很多种不同的形式,有很多种不同的定义,所以有时不能只有一个q,要有多个q,不同的q负责不同种类的相关性。
图例:

此时qi所乘的两个W矩阵并不相同

梳理过后我们看到,multi-head self-attention实际上之所以有较为显著的效果,其原因在于提取了多个特征向量,并且很好的分析计算得出了不同输入向量之间的内在关联。

2.Modernizing a ConvNet: a Roadmap

在单纯的ConvNet模型上进行修改,而不引入任何基于注意力的模块。

Training techniques:
数据增强技术,Stochastic Depth,平滑标签等正则化方案 提升ResNet模型的性能

Macro design:

1.Changing stage compute ratio.

调整Resnet中各阶段所需要使用的block数量

2.Changing stem to “Patchify”.

stem cell是将输入图像进行下采样,到适当的特征图像大小,而在这里采用“Patchify”层,可以将stride加大,同时使用更大的kernal size,卷积层大小缩小,观察到产生了类似的性能

3.ResNeXt-ify.

分组卷积,深度卷积:类似于自注意力中的加权求和,有效降低了网络的FLOPs
FLOP:网络的浮点计算量

4.Inverted Bottleneck 

5.Large Kernel Sizes

ViT最显著的特点之一是它们的非局部自注意力,使每一层都具有全局感受野
现代GPU上高效的硬件实现:堆叠(stacked)小核尺寸的卷积层
首先要向上移动深度卷积层,让复杂低效的模块(大核卷积)拥有更少的通道,而高效密集的1*1层放在下面,完成更繁重的工作,这个步骤让FLOP大大减少
之后就可以增加卷积核的尺寸了,经过实验选择了7*7深度卷积。

6.Micro design

用GELU代替ReLU:GELU是RELU的更平滑变体
更少的激活函数:Transformer相比于ResNet拥有更少的激活函数,所以在每个块中只使用单个GELU激活函数
更少的归一化层:去掉两个BN层,在每个块的开头添加一个额外的BN层并不能提高性能
用LN代替BN
单独的下采样层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值