当前位置: 首页 > news >正文

Swin Transformer网络模型

文章目录

  • 前言
  • 网络结构
    • 整体架构
    • Swin Transformer Block模块
    • W-MSA
      • 相对位置编码
    • SW-MSA
      • Mask MSA
    • 模型详细配置参数

前言

论文地址:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
论文代码:https://github.com/microsoft/Swin-Transformer

Transformer从NLP迁移到CV(ViT)上没有大放异彩,是由于几点原因

  • 视觉实体规模变化很大,在不同场景下ViT性能未必很好
  • 图像分辨率高像素点多,Transformer基于全局自注意力的计算导致计算量较大,较为耗时

为此提出2个解决方法

1.引入CNN中常用的层次化构建方式构建层次化Transformer。

2.提出滑窗操作,其中滑窗操作包括不重叠的local window,和重叠的cross-window。将注意力计算限制在一个窗口中,一方面能引入CNN卷积操作的局部性,另一方面能节省计算量。

在这里插入图片描述

所提出的Swin Transformer通过合并更深层的图像块(灰色显示)来构建层次特征图,并且由于只在每个局部窗口(红色显示)内计算自注意,因此对输入图像大小具有线性计算复杂度。因此,它可以作为图像分类和密集识别任务的通用骨干

网络结构

整体架构

在这里插入图片描述
上图是Swin Transformer的整体架构。
架构详解
1.首先,和ViT类似,通过patch partition将输入图片HxWx3划分为不重合的patch集合,其中每个patch尺寸为4x4,那么每个patch的特征维度为4x4x3=48patch块的数量为H/4 x W/4
2.Stage1,将分的块先通过一个linear embedding将输划分后的patch特征维度变成C,然后送入Swin Transformer Block;Stage2到Stage4操作相同,先通过一个patch merging,将输入按照2x2的相邻patches合并,这样子patch块的数量就变成了H/8 x W/8,特征维度就变成了4C

Swin Transformer Block模块

在这里插入图片描述
Swin Transformer是通过将变压器块中的标准多头自注意(MSA)模块替换为基于移位窗口的模块,其他层保持不变。一个Swin Transformer由一个基于移位窗口的MSA模块组成,然后是一个中间具有GELU非线性的2层MLP。在每个MSA模块和每个MLP之前应用一个LayerNorm(LN)层,在每个模块之后应用一个残差连接。

W-MSA

W-MSA:Window Multi-headed Self-attention

在这里插入图片描述
之前的Vision Transformer(ViT)是对全局都进行注意力机制的计算(如左图所示)。而在论文中作者建议在局部窗口(如右图所示)内计算自注意。这些窗口是以不重叠的方式均匀地分割图像。假设每个窗口包含M×M图像块,全局MSA模块的计算复杂度和基于窗口的计算复杂度:
在这里插入图片描述

具体公式推导见Swin-Transformer网络结构详解

相对位置编码

在文章的后续实验有证明相对位置编码的加入提升了模型性能。
相对位置编码的详细内容见:Swin-Transformer网络结构详解

SW-MSA

SW-MSA:Shifted Window Multi-headed Self-attention
在这里插入图片描述

红色框的叫做一个patch,灰色框的叫一个local window。我们在每一个local window中计算self-attention。如果是只计算一次self-attention,每个local window之间是没有联系的,但是有关联才对。因此层l+1在层l给出了新的划分关系,可以很好的将未联系的块建立联系。但是,这么划分的话就有9个块了,较为耗时。
因此作者提出了shifted-window进行了第二次self-attention。

在这里插入图片描述
这里,我们将标有数字的列作以下操作(操作部分可以参考SW-MSA):循环上移,在循环左移,最后变成如上所示的上层图片。变化之后的图像块有些是没有联系关系的。图中将具有联系关系的用黄色框标出,紫色框标出那些没有联系的框。
在这里插入图片描述
为了更好得到看出滑窗操作后能将之前未建立联系的图像块之间建立联系,因此用橙色的框标出了移动后所建立的联系,正好对应右图的黄色框部分。这样操作后就可以将原先分隔开的区域进行计算,建立联系。

Mask MSA

由于移动后一些块就不连续了,因此有些地方的注意力不应该计算,因此引入了Mask MSA,论文中也给出了相应的图示。
在这里插入图片描述
但由于论文中的图示较为简单,这里总结一下这块的学习。

首先我们对Shift Window后的每个窗口都给上编号,并且做一个roll操作,如下图所示。
在这里插入图片描述

我们对每个块都计算自注意力(上图右图共4个分块),计算过程如下图所示。

在这里插入图片描述
我们只需要将网格中标有颜色的数字的位置加入注意力计算。其他的灰色方格之间是不存在联系的,因此无需加入计算。

模型详细配置参数

在这里插入图片描述
原论文中给出的关于不同Swin Transformer的配置,T(Tiny),S(Small),B(Base),L(Large)

  • win. sz. 7x7表示使用的窗口(Windows)的大小
  • dim表示feature map的channel深度(或者说token的向量长度)
  • head表示多头注意力模块中head的个数

参考文献
Swin Transformer对CNN的降维打击
SW-MSA
图解swin transformer
Swin-Transformer网络结构详解

相关文章:

  • Spring——Spring基础介绍
  • C语言入门(七)while和do-while循环
  • 猿创征文|算法刷题——哈希
  • 基于阿里云 Serverless 快速部署 function 的极致体验
  • docker 如何查看运行中的容器
  • 数学建模十大算法02—插值与拟合(拉格朗日插值、三次样条插值、线性最小二乘法……)
  • 嵌入式Linux入门-异常与中断(流程+寄存器全解析)
  • java计算机毕业设计-体育新闻网站-源码+系统+数据库+lw文档+mybatis+运行部署
  • 基于QT的opencv照片美颜及背景更换
  • [车联网安全自学篇] Android安全之检测APK中异常处理代码是否暴露敏感信息
  • Java基础语法
  • 谷粒商城 renren-fast pom文件报红
  • A40I工控主板(SBC-X40I)LVDS显示屏测试
  • C语言实现环形缓冲区
  • TCP如何确保可靠传输(确认应答,重传机制,滑动窗口,流量控制)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • ➹使用webpack配置多页面应用(MPA)
  • Android框架之Volley
  • CSS中外联样式表代表的含义
  • JavaScript服务器推送技术之 WebSocket
  • Java面向对象及其三大特征
  • php的插入排序,通过双层for循环
  • scrapy学习之路4(itemloder的使用)
  • SQL 难点解决:记录的引用
  • Vim 折腾记
  • vue-router 实现分析
  • 半理解系列--Promise的进化史
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊redis的数据结构的应用
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前嗅ForeSpider教程:创建模板
  • 实习面试笔记
  • 网络应用优化——时延与带宽
  • 携程小程序初体验
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​io --- 处理流的核心工具​
  • #前后端分离# 头条发布系统
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.ajax()
  • (10)STL算法之搜索(二) 二分查找
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (第二周)效能测试
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分布式缓存)Redis持久化
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)c52学习之旅-中断
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (区间dp) (经典例题) 石子合并
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Framework杂记
  • .NET gRPC 和RESTful简单对比
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)