前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swin Transformer介绍

Swin Transformer介绍

作者头像
算法之名
发布2022-05-23 10:38:39
2.5K0
发布2022-05-23 10:38:39
举报
文章被收录于专栏:算法之名算法之名

Swin Transformer发表于ICCV 2021,获得最佳论文,其作者都来自微软亚洲研究院。

Transformer最初是处理NLP(自然语言处理)领域的任务,获得了巨大的成功。逐渐向计算机视觉领域进行拓展,有DETR、ViT以及ViT的变种,使得Transformer在计算机视觉领域大放异彩。

Transformer架构图

Transformer由Encoder和Decoder组成,它是文本语句转化为词向量的一系列处理。

因为语句中的词是有先后顺序的,在计算机视觉领域,为了使用Transformer,需要将一张图片进行切分成若干Patch,再加上一个额外可学习的分类编码。送入Transformer Encoder(多层堆叠),再加上位置编码。再进入MLP Head(多层感知机),最后进行具体的分类。在ViT中只是使用了Transformer的Encoder而没有使用Decoder。ViT的问题:它没有考虑文本和视觉信号的不同,它只能做图像分类,对于目标检测和图像分割没有相应的尝试。

Swin Transformer提供了更加通用的基于Transformer的计算机视觉任务的主干网络,并且能应用到多种计算机视觉任务中,如图像分类、目标检测、语义分割、实例分割等任务。甚至在某些方面性能超过了传统的CNN。

Swin Transformer是根据ViT发展而来的,在ViT中只用了16倍的下采样,经过Transformer Block中,它的形状保持不变,并且主要用于图像的分类。而Swin Transformer开始的时候是使用4倍的下采样,也就是4*4的patch下采样后变成1个像素点。然后还可以做8倍、16倍下采样,可以达到多尺度的特征图的提取效果,它不仅可以用于图像分类,还可以用于目标检测和图像分割。

其实Swin Transformer的很多思想和CNN有异曲同工之处,它利用了视觉信号的好的先验,它的网络架构中也采用了层次化(hierarchy)、局部化(locality)、平移不变性(translation invariance)。我们知道CNN可以进行多尺度,层级化的特征提取,主要代表为YOLOV3的FPN网络。在Swin Transformer中,我们也可以看到不同的下采样尺度,它的特征提取的颗粒度在不断的变大,由浅层到深层,它的感受野相比于浅层也是逐渐的扩大。局部性主要体现在它的注意力的计算主要是在窗口中进行的,而ViT是在整个特征图上进行注意力的计算,这样Swin Transformer计算的复杂度就会大大的降低。

主要技术创新

Swin Transformer的主要技术创新就是采用了局部化和偏移窗口(Shifted windows)。它是采用非重叠的窗口进行自注意力计算,有关自注意力机制可以参考计算机视觉中的注意力机制 。这种非重叠窗口是在每个尺度的feature map的窗口中进行局部化的自注意力的计算,但是在不同的尺度(层)之间一直是局部化的计算,就缺少窗口之间的信息的交互,所以它还采用了不同层级的窗口的偏移,不仅包含了W_MSA(窗口自注意力机制),还有SW_MSA(偏移窗口自注意力机制)。

Shifted windows技术

在上图的Layer l中有四个蓝色的窗口,自注意计算就是在这种局部非重叠窗口进行的。不同query会共享同样key集合,减少计算量,从而对硬件友好。在Layer l+1中,在前后两层的Transformer模块中,非重叠窗口的配置相比前一层做了半个窗口的移位,也就是蓝色窗口发生了移动,使得上一层中不同窗口信息进行了交换。图中灰色的格子就是一个patch(小块),它是一个4*4像素的大小;红色的格子是一个局部窗口,它是进行自注意的计算,一般包含7*7个patch大小(这里跟图上不同)。我们看到从Layer l到Layer l+1的过程中,蓝色窗口向右下移动了半个窗口的距离,从而使得layer l+1的第一个蓝色窗口有原先4个窗口的信息,这样Layer l+1层相对Layer l层就有相邻窗口之间的信息交互。

Swin Transformer网络架构

首先图片送入网络,先经过块状分区(Patch Partition),再经过线性嵌入(Linear Embedding),再送入Swin Transformer Block。每个Swin Transformer Block是由两个连续的Swin Transformer Blocks所组成(见最右边),也就是我们上面说的Layer l和Layeer l+1层,其中Layer l层包含的是W-MSA(窗口自注意力机制),而layer l+1层包含的是SW-MSA(偏移窗口自注意力机制)。然后第一个Stage的输出再送到块状拼接(Patch Merging),再送到Swin Transformer Block,这是Stage 2,后面的Stage跟Stage 2是一样的了,只不过Stage 3的Swin Transformer Block不是2个而是6个,表示有三个成对的Layer l和Layer l+1层。

我们再从图片尺寸的角度来看一下整个过程,我们假设送入网络的图片是224*224*3,由于每个patch是4*4像素的大小,那么经过块状分区(Patch Partition)后,就变成了(224/4)*(224/4)*(4*4*3)=56*56*48的尺寸。再经过线性嵌入(Linear Embedding)后,通道数翻倍,就变成了56*56*96=3136*96的尺寸。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档