swin transformer解读

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows --论文解读

论文信息、概要

Swin transformer是微软今年三月25日公布的一篇利用transformer架构处理计算机视觉任务的论文。源码仅仅公布两天就在github上收获了2.2k个stars。它是我个人认为迄今为止用tranformer架构处理计算机视觉任务最有实用价值的一篇文章,在图像分割,目标检测各个领域已经霸榜,让很多人看到了transformer完全替代卷积的可能。而且它的设计思想吸取了resnet的精华,从局部到全局,将transformer设计成逐步扩大感受野的工具,它的成功背后绝不是偶然,而是厚厚的积累与沉淀。
论文链接https://arxiv.org/abs/2103.14030

总体结构

输入的图像先经过一层卷积进行patch映射,我有看过源代码,具体是将图像先分割成 4 × 4 4\times4 4×4的小块,然后将每一个小块通过映射成一个像素点,进行了通道上的扩充。以swin-s为例,输入的 224 × 224 224\times224 224×224图像经过这一步操作就变成了 56 × 56 56\times56 56×56的特征图。特征图一开始开始输入到stage1,stage1由两层transformer组成,这两层transformer的核心一个是普通的window attention, 另一个是shift window attention。可以将window attention 和shift window attention视为两个模块,在每一个stage内部就是直接堆积这两个模块。然后在stage与stage之间要有一个pooling操作来降低要处理的数据的尺寸,也就是为了从一开始的局部信息搜索到全局信息的提取。当然这个pooling操作与传统卷积里面的pooling也不太一样,它是将特征图先经过一个space to depth变为 1 4 \frac{1}{4} 41,通道数变为原来的4倍,再又一个MLP缩减一半。也就是说没经过一个stage,总的数据量变为原来的 1 2 \frac{1}{2} 21
此时可以很容易的看出,swin transformer和resnet一样设计的是一个层次结果很明显的网络,底部的结构处理的数据更多也更局部,顶部的网络处理的数据更少但是语义信息是更加丰富的。不同的是swin主要提取信息的方式是采用transformer,而resnet是卷积核。
swin transformer解读_第1张图片

window attention 和 shift window attention

如图,window attention就是按照一定的尺寸将图像划分为不同的window,每次transformer的attention只在window内部进行计算。那么如果只有window attention就会带来每一个像素点的感受野得不到提升的问题,所以它又设计了一个shift window attention的方法,就是换一下window划分的方式,让每一个像素点做attention计算的window块处于变化之中。那么就起到了提升感受野的作用。

swin transformer解读_第2张图片

存在的问题

在同尺寸通计算量的前提下,swin确实效果远好于resnet。但是有几个问题:
1. 受缚于shift操作,对不同尺寸的输入要设计不同的网络,而且也要重新开始训练,这是很难接受的。
2. 和Detr一样训练的时候收敛的太慢。我自己有训练了一下最小的swin-tiny版本,大概训练了一百多轮的时候也才到72~73左右。有这方面改进的想法的朋友可以和我交流,整一篇B类应该没问题。
3. shift操作其实主要是为了提升感受野,可以换一种更好的方式。在这个方面我也有一点思路,可以交流。

你可能感兴趣的:(人工智能,计算机视觉,深度学习,python)