深度学习第六周总结

目录

一、Vision Transformer

1.1 Embedding层

1.2Transformer Encoder

1.3MLP Head

二、Swin Transformer

2.1Swin Transformer 网络结构:

2.2 Patch Merging

2.3 W-MSA

2.4 SW-MSA 

 2.5Relative Position Bias

 三、ConvNeXt

3.1 Marco design 

3.2 ResNeXt-ify

3.3 Inverted Bottleneck

3.4 Large Kernel Sizes

3.5 Micro Design


一、Vision Transformer

Vision Transformer(VIT)由三个模块组成:

  • Linear Projection of Flattened Patches(Embedding层)
  • Transformer Encoder
  • MLP Head(最终用于分类的层结构)

1.1 Embedding层

标准的Transformer模块要求输入是向量(token)序列,但是对于图像数据,他是高度宽度通道数的三维矩阵,Embedding层的作用就是对数据做变换,代码中直接使用一个卷积层来实现,在输入Transformer Encoder之前需要加上[class]token和Position Embedding,在转换后得到的一堆tokens中插入一个专门用于分类的[class]token;Position Embedding直接与tokens相加。这两个都是可训练的参数。

1.2Transformer Encoder

Transformer Encoder中重复堆叠Encoder Block L次,Encoder Block和MLP Block如下图所示,需要注意的是,MLP第一个全连接层将输入节点个数翻四倍,第二个全连接层还原回来。

1.3MLP Head

通过Transformer Encoder后输出的shape和输入的shape是保持不变的,在Transformer Encoder后还有一个Layer Norm,在输出([197,768])中抽取出[class]token对应的[1,768],通过MLP Head即可得到分类结果,MLP Head原论文中在训练ImageNet21k时由Linear+tanh_Linear组成,在ImageNet1K和自己的数据时只用一个Linear即可。

二、Swin Transformer

2.1Swin Transformer 网络结构:

 

先将输入图像数据在Patch Partitation 模块中进行分块,每4×4相邻的像素为一个Patch,然后在通道方向展平,每个Patch有16个像素,展平后16×3=48.假设输入尺寸[H,W,3].经过Patch Partition变成[H/4,W/4,48],在通过Linear Embeding层对每个像素的channel做线性变换,48变成C,即[H/4,W/4,C]。

Stage1-4构建不同大小的特征图,Swin Transformer Block由两种结构,如上图右侧,区别在于一个使用了W-MSA结构,一个使用了SW-MSA结构,两个结构是成对使用的,先使用一个W-MSA结构再使用一个SW-MSA结构。堆叠Block的次数都是偶数。

最后的分类网络后还加了一个Layer Norm层、全局池化以及全连接得到最终输出,在源码中有体现。

2.2 Patch Merging

Stage2-4要先通过一个Patch Merging下采样,假设输入一个4x4大小的单通道特征图),Patch Merging会将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置像素(图中用相同颜色表示)拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍。

 

2.3 W-MSA

Windows Multi-head Self-Attention(W-MSA)减少了计算量,对于普通的Multi-head Self-Attention(MSA)模块,每个像素要与所有的像素计算;在Windows Multi-head Self-Attention(W-MSA)模块时,将特征图划分为一个个Windows,单独对每个Windows内部进行Self-Attention。

2.4 SW-MSA 

W-MSA的缺点是窗口之间无法信息交互,作者引入了Shifted Windows Multi-Head Self-Attention(SW-MSA)模块,即进行偏移的W-MSA。由于W-MSA和SW-MSA是成对使用的,若第L层使用W-MSA,则第L+1层使用SW-MSA,SW-MSA的窗口发生了偏移,L+1层中第一行第2列的2x4的窗口,它能够使第L层的第一排的两个窗口信息进行交流。第二行第二列的4x4的窗口,他能够使第L层的四个窗口信息进行交流。

 这样做增加了窗口的数量,作者提出Efficient batch computation for shifted configuration,思路是通过移动窗口将特征图规整为一个个4×4窗口,这样与L层的计算量相同。但移动后对不同区域进行MSA又会导致信息混乱,这里使用masked MSA,如下图,区域3和区域5分别对应上图右侧第二行第一列,和第二行第三列的窗口,对于窗口内的每个像素计算时,都要先生成q,k,v,q与每一个k进行匹配,当区域5里的q与区域3中的k匹配时,将匹配结果减100,这样再通过softmax得到对应的权重就为0.

 2.5Relative Position Bias

 上式B表示相对位置偏置。

首先计算相对位置索引,假设输入特征图2×2,每个像素的绝对位置在下图左侧,用蓝色像素的绝对位置索引与其他位置索引进行相减,就得到其他位置相对蓝色像素的相对位置索引,其他同理,按行展平就得到了下面的4×4矩阵。

 然后将二维索引转化为一维索引,方法是先在原始相对位置索引加上M-1,然后所有行标×2M-1,最后再将行标列标相加。

 

 

相对位置偏置参数是可训练的,保存在一个relative position bias table里,长度 (2M-1)×(2M-1),通过查表可得到对应的参数,在匹配时加上该参数再进行softmax。

 三、ConvNeXt

Vision Transformer在CV领域的成功让越来越多的研究人员拥入Transformer的怀抱,卷积神经网络慢慢褪去色彩,2022年一月份,ConvNeXt的提出再次让人们眼前一亮。

作者从五个方面训练原始的ResNet50模型,这五个方面都借鉴了Transformer的模型,每一步之后的准确率如下图:

接下来作者详细介绍了五个方面的改进。

3.1 Marco design 

  • changing stage compute ratio

在这一部分作者改变了ResNet中Block的堆叠次数,如ResNet50网络中Block堆叠次数为3,4,6,3;在Swin-T中比例则为1:1:3:1,作者就将堆叠次数调整为(3,3,9,3)。准确率由78.8%提升到了79.4%。

  • changing stem to "Patchify"

作者将ResNet中的下采样模块换成与Swin Transformer中一样的Patchify,即通过一个非常大的卷积核且步距=kernel_size的卷积层实现。提升准确率的同时降低了FLOPs

3.2 ResNeXt-ify

使用DW卷积(借鉴组卷积的思想且将组数设置为与通道数一致。),并将通道数由64调整为96,与Swin-Transformer保持一致。

3.3 Inverted Bottleneck

作者认为Transformer Block中的MLP模块非常像MobileNetV2中的Inverted Bottleneck,下图是三种Block的结构。在较小模型准确率由80.5%提升到80.6%,在较大的模型上准确率由81.9%提升到82.6%。

 

3.4 Large Kernel Sizes

  • Moving up Depthwise conv layer 作者将组卷积模块上移,原来是1x1 conv -> depthwise conv -> 1x1 conv,现在变成了depthwise conv -> 1x1 conv -> 1x1 conv。这么做是因为在Transformer中,MSA模块是放在MLP模块之前的,所以这里进行效仿,将depthwise conv上移。这样改动后,准确率下降到了79.9%,同时FLOPs也减小了。
  • Increasing the Kernel size 组卷积卷积核大小由3×3变成7×7,与Swin-Transformer一致,准确率从79.9%增长到80.6%。

3.5 Micro Design

  • Replacing ReLU with GELU 使用GELU激活函数替换掉RELU激活函数
  • Fewer activation functions 减少了激活函数的使用,不再是每个卷积层或全连接后都加一个激活函数,下图展示了改进的ConvNeXt Block

  •  Fewer normalization layers 使用更少的normalization,只保留了DW卷积后的Normalization,准确率达到了81.4%
  • Substituting BN with LN将Batch Normalization(BN)替换成Layer Normalization(LN),准确率提升到81.5%。
  • Separate downsampling layers 使用单独的下采样层,通过一个Laryer Normalization加上一个卷积核大小为2步距为2的卷积层构成。更改后准确率就提升到了82.0%
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值