• swin transformer详解


    1.解决问题

    • 图像中像素点太多了,如果需要更多的特征就必须构建很长的序列
    •  越长的序列注意力的计算肯定越慢,这就导致了效率问题
    • 能否用窗口和分层的形式来替代长序列的方法呢?这就是它的本质
    • CNN中经常提到感受野,transformer在分层中进行体现

    2.整体网络架构

    1.   得到各Pathch特征构建序列;
    2. 分层计算attention(逐步下采样过程)

            其中Block是最核心的,对attention的计算方法进行了改进,一个Transformer Blocks包含两个部分,一个是基于窗口的注意力计算——W-MSA,另外一个是窗口滑动后重新计算注意力——SW-MSA,它俩串联在一起就是一个block

     

    Patch Embedding

    输入:图像数据(224,224,3)

    输出:(3136,96)相当于序列长度是3136个,每个的向量是96维特征

    通过卷积得到,Conv2d(3, 96, kernel_size=(4, 4), stride=(4, 4))

    3136也就是 (224/4) * (224/4)得到的,也可以根据需求更改卷积参数

    window_partition

    输入:特征图(56,56,96)

    默认窗口大小为7,所以总共可以分成8*8个窗口

    输出:特征图(64,7,7,96)

    之前的单位是序列,现在的单位是窗口(共64个窗口)         

    W-MSA(Window Multi-head Self Attention)

            对得到的窗口,计算各个窗口自己的自注意力得分

            qkv三个矩阵放在一起了:(3,64,3,49,32)

            3个矩阵,即q,k,v三个矩阵,每个矩阵有64个窗口,heads为3,窗口大小7*7=49(即每个窗口有49个token),每个head特征96/3=32

    window_reverse

            通过得到的attention计算得到新的特征(64,49,96),总共64个窗口,每个窗口7*7的大小,每个点对应96维向量,window_reverse就是通过reshape操作还原回去(56,56,96)

    SW-MSA(Shifted Window) 

            为什么要shift?原来的window都是算自己内部的,这样就会导致只有内部计算,没有它们之间的关系,容易上模型局限在自己的小领地,可以通过shift操作来改善。

            例如:假设我们有8个窗口,分别为1,2,3,4,5,6,7,8

            两两一组合并,第一次(1,2),(3,4),(5,6),(7,8)

            第二次,滑动窗口,假设为strides=1,为(2,3),(4,5),(6,7),(8,1)

            依次滑动

    位移中的细节

            位移就是像素点移动了一下位置 :

            窗口移动后,带来了计算量的问题,例如原来4个,现在9个了,计算量怎么解决呢? 

             

     

    首先得到新窗口,并对其做位移操作

     

            在计算时,只需要计算自己窗口的,其他的都都是无关的,比如说对于7,1,我们只取对角线上自己需要的结果,其他部分全部mask掉,让其值为负无穷即可,最后再经过softmax操作,输出结果同样为(56,56,96),计算完特征后需要对图像进行还原,也就是还原平移

     PatchMerging

    下采样操作,但是不同于池化,这个相当于间接的 (对H和W维度进行间隔采样后拼接在一起,得到H/2,W/2,C*4)

     

     

    分层计算 

            一次下采样后(3136->784也就是56*56->28*28),继续走这两个模块,也就是各个stage的流程,最后根据任务来选择合适的head层即可(分类,分割,检测等)

     

     

            

     

            

  • 相关阅读:
    React@16.x(27)useCallBack
    Springboot美食点评系统gb9o5计算机毕业设计-课程设计-期末作业-毕设程序代做
    AR增强现实在无人机课堂教学中的应用演示
    力扣HOT100 - 994. 腐烂的橘子
    详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题
    【数据结构】B树(B-树)和B+树
    地平线开发板配置网段
    23~49(构造函数+继承+类的本质+ES5中的新增方法)
    Whatsapp是当前很受欢迎的即时聊天软件
    提到Canvas,必须好好唠唠它的图像操作能力
  • 原文地址:https://blog.csdn.net/qq_52053775/article/details/126332357