赞
踩
该模型将Transformer结构直接应用到图像上,即将一张图像分割成多个patches,这些patches看作是NLP的tokens (words),然后对每个patches做一系列linear embedding操作之后作为Transformer的input。
Vision Transformer 模型由三个模块组成:
对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim],如下图,token0-9对应的都是向量,以ViT-B/16为例,每个token向量长度为768。
左边是一个个被切分好的图片块,假设原始输入的图片数据是 H x W x C,我们需要对图片进行块切割,假设图片块大小为S1 x S2,则最终的块数量N为:N = ( H / S1) * (W / S2)。然后将切分好的图片块展平为一维,那么每一个向量的长度为:Patch_dim = S1 * S2 * C,从而得到了一个N x Patch_dim的输入序列。
Vision Transformer Encoder 有层归一化,多头注意力机制,残差连接和线性变换这四个操作
结束了Transformer Encoder,就到了最终的分类处理部分,在之前进行Encoder的时候通过concat的方式多加了一个用于分类的可学习向量,这时把这个向量取出来输入到MLP Head中,即经过Layer Normal --> 全连接 --> GELU --> 全连接,得到了最终的输出。
目前Transformer应用到图像领域主要有两大挑战:
针对上述两个问题,提出了一种包含滑窗操作,具有层级设计的Swin Transformer。
其中滑窗操作包括不重叠的local window,和重叠的cross-window。将注意力计算限制在一个窗口中,一方面能引入CNN卷积操作的局部性,另一方面能节省计算量。
Swin Transformer的最大贡献是提出了一个可以广泛应用到所有计算机视觉领域的backbone,并且大多数在CNN网络中常见的超参数在Swin Transformer中也是可以人工调整的,例如可以调整的网络块数,每一块的层数,输入图像的大小等等。
通过与CNN相似的分层结构来处理图片,使得模型能够灵活处理不同尺度的图片
接下来,简单看下原论文中给出的关于Swin Transformer(Swin-T)网络的架构图,可以看出整个框架的基本流程如下:
整个模型采取层次化的设计,一共包含4个Stage,每个stage都会缩小输入特征图的分辨率,像CNN一样逐层扩大感受野。
class SwinTransformer(nn.Module):
def __init__(.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。