[ICCV2021]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

本文主要是介绍[ICCV2021]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标题:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
链接:https://arxiv.org/pdf/2103.14030

动机

现在在CV中使用transformer的最大问题是运算量太大,因为图片的信息量远远大过NLP中文本的信息量,然后再做self attention会导致N平方的复杂度,这是不可以接受的,因此如何减少运算量是很重要的。而这篇文章就是提出了一个线性计算量的transformer结构

方法

之前的ViT考虑的是直接将一个图片分割,然后每个小块做embedding取到局部特征(?),然后再对所有分割的块做self attention取到全局特征。这样的计算复杂度是随着图片增大而呈平方增大的。
而这篇文章提出的Swin Transformer是按照hierarchical的方式来一层层做transformer的。
大体结构就是先将图片分成小区,然后针对每个小区块做embedding,之后输入一个swing transformer block,然后将相邻区块合并,成为稍微大点的区,再输入另一个swing transformer block,之后类似的操作还会做两次,从而得到最终的输出。
其中最主要的点就是swing transformer block是啥。swing transformer block实际上是由两层组成的,第一层就是一个简单的transformer block(self attention+feedforward),第二层结构类似第一层,只不过attention层变成了shift window multihead self attention,本质上就是比前面的那个self attention多了一个shift功能。
这个shift功能是用来处理边界问题的。因为在将图片分成不同区域之后,区域与区域之间的交互信息就丢失了,而这个shift就是说将原本的2*2的窗口变成3*3个窗口,就像下面这个图这样:

微信截图_20211013225745.png


然后再对每个小窗口内部做self attention,从而获得了边界上的交互信息。但是由于这么划分之后区域变多
了,反而增加了运算量,因此本文使用了mask attention,结合他们提出的cyclic shift来简化运算。如下图所示:

微信截图_20211013230626.png


也就是说划分完九块之后,正中间的大方块和右上,左下的小方块不动,然后将左上角的A,B,C三个块移动到右下角,从而重新拼成一个正方形。之后再对四个方块里的每部分做masked self attention就可以得到原来九个区域的self attention结果了。计算完后再将A,B,C移动回去就可以继续下一步操作。

结果

结果来说,swin transformer不仅减少了运算量,而且在众多CV任务上都取得了很大的进步,之后的衍生文章打破了很多SOTA。

这篇关于[ICCV2021]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706574

相关文章

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效