• swin-transformer初步理解


    一、初步介绍

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

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

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

    二、大致过程

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

            简单来说就是,原生 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,如下图所示:

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

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

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

  • 相关阅读:
    Web音乐库:SpringBoot实现的音乐网站
    FastDFS基础学习(三)之使用FastDFS
    数据库系统助力企业降本增效的技术要点|Meetup 回顾与预告
    BUG系列路径规划算法原理介绍(六)——BugFlood算法
    Spring refresh 方法之invokeBeanFactoryPostProcessors 方法解析
    【排故】线上排故,如何快速定位线上系统的故障
    Workfine新手入门:分级预览
    TCP 协议有哪些缺陷?
    Flink之ProcessFunction
    性能测试工具:如何学习JMeter?
  • 原文地址:https://blog.csdn.net/a15608445683/article/details/126024951