视觉Transformer和Swin Transformer

视觉Transformer概述

ViT的基本结构:

①输入图片首先被切分为固定尺寸的切片;

②对展平的切片进行线性映射(通过矩阵乘法对维度进行变换);

③为了保留切片的位置信息,在切片送入Transformer编码器之前,对每个切片加入位置编码信息;

④Transformer编码器由L个Transformer模块组成,每个模块由层归一化(LN)、多头自注意力模块(MHSA)、多层感知机(MLP)及残差连接等构成;

多层感知机(MLP)https://blog.****.net/JasonH2021/article/details/131021534

其中,z_{l}^{'} 和z_{l} 分别表示第 l 个模块中MHSA和MLP的输出特征

z_{l}^{'}=MSA(LN(z_{l-1}))+z_{l-1}

z_{l}=MLP(LN(z_{l}^{'}))+z_{l}^{'}

由于ViT关注分类问题,编码器的输出只关注最后一个Transformer模块的MLP头部信息,y=LN(z_{L}^{0})。只有在大规模数据集上进行预训练再迁移到中小规模数据集的条件下,ViT才能取得与当时最新卷积结构媲美的性能。

Swin Transformer

最大的贡献在于降低了self-attention的计算复杂度。

Swin Transformer在视觉Transformer的基础上引入了移动窗口(shifted windows)机制,采用“分而治之”的思想,将自注意力的计算限制在各个窗口内从而使得模型只有和输入图片尺寸相关的线性复杂度。

连续Swin Transformer块

其在Transformer编码器基础上,将对头自注意力模块(MHSA)替换为常规窗口多头自注意力(W-MHSA)和移动窗口多头自注意力(SW-MHSA)模块。

\hat{z}^{l}=W-MHSA(LN(z^{l-1}))+z^{l-1}

z^{l}=MLP(LN(\hat{z}^{l}))+\hat{z}^{l}

\hat{z}^{l+1}=SW-MHSA(LN(z^{l}))+z^{l}

z^{l+1}=MLP(LN(\hat{z}^{l+1}))+\hat{z}^{l+1}

其中,\hat{z}^{l}z^{l}分别表示第l个模块中(S)W-MSA和MLP的输出特征

上一篇:Docker学习指南


下一篇:Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(二)项目实现-第五篇-核心功能车票预定开发及nacos集成