Swin-transformer
Swin Transformer
A Hierarchical Vision Transformer using Shifted Windows
swin-transformer是2021年微软亚洲研究院的相关学者为了尝试构造一种能够同时应用于计算机视觉与自然语言处理领域的通用性基础框架而做出的一种改良性研究并取得了非凡的成就。在swin-transformer之前2020年Google研究院就有相关的研究将自然语言处理领域广泛应用的transformer框架进行一定程度的改写,使其能够应用于计算机视觉领域。不过问题依旧存在。改写后的算法并不能完全胜任所有的计算机视觉任务。在本文中作者分析了其中的困难并提出移动窗口以及分层注意等机制使得改进后的transformer在计算机视觉领域内的各个任务都获得了巨大的成功。
计算机视觉与自然语言处理任务的不同(困难)
- 首先第一个不同就在于输入的规模,与自然语言处理中每个输入token都是一个单词不同在计算机视觉领域(图像分类,目标检测以及实例分割。。)中由于照片拍摄角度以及距离等等因素的影响,每张照片当中包含的实例大小所占像素的多少都是不同的也因此我们需要将照片按各个规格进行划分并分别进行attention计算以此获得其在各个大小的相关性信息。这对于transformer框架的应用是一个不小的挑战。
- 第二,与自然语言处理不同,在计算机视觉领域尤其是目标检测、实力分割或者多目标检测等任务上我们的算法常常要处理高分辨率图像,但是在传统的transform框架中模型计算量的大小往往是图像分辨率大小的平方级水平,这样的计算量无论是在模型训练还是在实际预测中进行应用都是无法接受的。
解决方案
- 面对第一个问题,传统主流的CNN网络往往通过在模型中采用多种不同大小的卷积核实现对图像不同层次的感知。因此本文中的作者同样借鉴了这样的思路,在模型中设置了多个swin-transformer模块并为他们分别设置了多层不同大小的patch作为输入进而达到对不同图像中不同大小的物体进行识别的目的。
- 为了解决第二个问题,减小模型在训练以及预测过程中的计算量,本文的作者舍弃了在传统transformer中所使用的全局注意而改用局部注意力进行计算。因此被处理图像在刚刚进入模型并分割为patch之后各个petch又进一步分组与相邻的patch组成了各自的窗口分区,之后的attention计算就发生在各个窗口分区内部。这样的做法使得自注意计算操作的复杂度由之前的平方级转化成为了线性级大大降低了注意力计算的复杂度。
- 局部注意力机制完美地解决了计算复杂度的问题但是由于注意力计算仅仅作用于每个窗口分区内部而不能跨越窗口分区进行计算,我们所能获取的相关性信息也仅仅局限于每个窗口内部而无法跨域窗口进行信息的获取,为了进一步解决这一问题作者提出了变换窗口的方案。我们将在下文详细介绍这一方案。
上图是一个简单的swin-tranformer模型在这一模型中包含不同大小的共四层swin-tranformer框架,他们将帮助我们获取图像中不同大小的各种物体实例信息,在这些层次中所有的窗口分区都包含有相同数量的patch不同的在于patch的大小从上图可以看出这四层框架从低到高每次深入patch的面积都会变为之前的4倍(n^2 -> (2*n)^2)。最终经过四层的扩大最终的patch所占面积的大小将变为最开始的64倍从而实现模型对各个大小层面的特征感知。
评论
发表评论