swin-transformer初步理解

一、初步介绍

近期 Transformer 在 CV 领域掀起了一股热潮,从图像分类的 ViT, 到目标检测的 DETR,再到图像分割的SETR 以及 3D 人体姿态的 METRO,预计在未来所有 CNN 能干的事情,都会涌现出一大批论文。虽然灌水总是存在的,但客观上的确也一定程度上推进了AI 领域技术和方法的融合与发展。

回到正题,虽然这些针对不同任务设计的 Transformer 的确把 CNN 的活儿给干了,但其原生Self-Attention 的计算复杂度问题一直没有得到解决,Self-Attention 需要对输入的所有N个 token 计算 N2 大小的相互关系矩阵,考虑到视觉信息本来就就是二维(图像)甚至三维(视频),分辨率稍微高一点这计算量就很难低得下来。

Swin Transformer 想要解决的就是这个计算复杂度的问题。

二、大致过程

swin-transformer初步理解_第1张图片

        Swin Transformer 之所以爆火,外部因素是 Transformer 在 CV 领域已掀起一波浪潮,内部因素是它本身的确用了很合理的方式解决了 Transformer 中计算复杂度的问题。Swin Transformer 的核心思想其实在人类社会结构、树的分形、以及快速排序算法等等中都有体现,即分而治之:

swin-transformer初步理解_第2张图片

        简单来说就是,原生 Transformer 对 N 个 token 做 Self-Attention ,复杂度为 O(N2) ,Swin Transformer 将 N 个 token 拆为 N/n 组, 每组 n (n设为常数)个token 进行计算,复杂度降为 O(N∗n2) ,考虑到 n 是常数,那么复杂度其实为 O(N) 。

        分组计算的方式虽然大大降低了 Self-Attention 的复杂度,但与此同时,有两个问题需要解决,其一是分组后 Transformer 的视野局限于 n 个token,看不到全局信息,其二是组与组之间的信息缺乏交互。

        对于问题一,Swin Transformer 的解决方案即 Hierarchical,每个 stage 后对 2x2 组的特征向量进行融合和压缩(空间尺寸 H×W→H2×W2 ,特征维度 C→4C→2C ),这样视野就和 CNN-based 的结构一样,随着 stage 逐渐变大。

对于问题二,Swin Transformer 的解决方法是 Shifted Windows,如下图所示:

swin-transformer初步理解_第3张图片

        通过 Shifted Windows 的方式,使相邻的组(patch)进行信息交互,思想上其实和shufflenet 类似,不过这里是空间邻接上的shuffle,而shufflenet是通道维度的shuffle。

此外还有一个细节就是在计算 Self-Attention 时,使用了 Relative position bias, 

        B 为可学习的参数,作用与 Local Relation Networks for Image Recognition中的Geometry Prior 类似。

你可能感兴趣的:(Deeplearn,深度学习,人工智能)