Transformers在计算机视觉领域中的应用【第3篇:Swin Transformer——多层次的Vision Transformer】

目录

  • 1 介绍
  • 2 摘要
  • 3 模型架构
  • 4 窗口自注意力
  • 5 移动窗口自注意力
    • 5.1 巧妙的掩码方式
    • 5.2 相对位置编码
  • 6 总结

论文:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
代码:https://github.com/microsoft/Swin-Transformer
Huggingface:https://hub.fastgit.org/rwightman/pytorch-image-models/blob/master/timm/models/swin_transformer.py

1 介绍

论文题目是:Swin Transformer是一个用了移动窗口的的层级式Vision Transformer。Swin = Shifted WINdows。移动窗口是这篇论文的主要贡献。Swin Transformer实际上就是想着让ViT像卷积神经网络一样,也能够分成几个block,也能做这种层级式的特征提取,这样提取出来的特征有多尺度的概念。

Swin Transformer相关的模型当年霸榜视觉检测榜前十。

示意图

2 摘要

这篇论文提出来一个新的Vision Transformer,叫做Swin Transformer,可以被用来作为计算机视觉领域通用的骨干网络。如果直接把Transformer从NLP用到Vision领域是有一些挑战的,主要来自于两个方面:

  • 一个是尺度上的问题,例如一张图片上面有大大小小不同的物体,代表同样语义的词比如说行人或者汽车,有不同的尺寸,这种现象在NLP领域是没有的;
  • 另一个挑战是图像的resolution太大了,如果我们以像素点作为基本单位的话,这个序列的长度就会变得高不可攀,所以之前的工作要么就是用后续的特征图来当做Transformer的输入,要么就是把图片打成patch,减少图片的resolution,要么把图片划分成一个个小的窗口,然后在窗口里做自注意力,所有的这些方法都是为了减少序列的长度。

基于这两个挑战,作者就提出多层级的Transformer,特征是通过一种叫做移动窗口的方式学来的。移动窗口的好处不仅带来了更大的效率,因为自注意力是在窗口内计算的,所以序列的长度大大的降低了,同时通过移动的操作,能够让相邻的两个窗口之间有了交互,所以上下层之间可以有cross-window connection,从而变相地达到了全局建模的能力。

这种层级式的结构的好处是:

  • 非常灵活,可以提供各个尺度的特征信息;
  • 自注意力是在小窗口内计算的,计算复杂度是随着图像的大小而线性变化的,而不是平方级变化,从而可以在特别大的分辨率上去预训练模型。

因为Swin Transformer拥有了像卷积神经网络一样的分层的结构,有了多尺度的特征,所以很容易被使用到下游任务中,包括在图像分类、密集预测型的任务上(物体检测、分割)的成绩都遥遥领先。

这种基于Transformer的模型在视觉领域是非常有潜力的,对于MLP的这种架构,用shifted window的方法也有提升。

3 模型架构

下图是模型总览图,Swin Transformer的patch size是4×4,而不是像ViT一样16×16,先不考虑Swin Transformer Block里的移动窗口自注意力操作,前向过程如图所示:

网络架构

如果是图像分类任务,得到最后的7×7×768输出之后,再接上一个global average polling,就是全局池化操作,直接把7×7取平均拉直变成1了,最终变成1×768,再经过一个全连接层之后变成1×1000。这里和ViT使用的cls token不一样。作者没有把这部分画到图里,因为Swin Transformer的本意不只是做分类,还会去做检测和分割,所以这里只画了骨干网络的部分。

4 窗口自注意力

以第一个Swin Transformer block之前的输入举例子,它的尺寸是56×56×96。

窗口自注意力

计算复杂度:

计算复杂度公式

公式(1)的具体计算过程如下:

计算复杂度

对于窗口自注意里的复杂度,首先,对于一个窗口,patch数不是h×w,而是M×M,将 h=M 和 w=M 代入公式(1),就能得到1个窗口的自注意力计算复杂度。我们总共有 h/M×w/M个窗口,乘以1个窗口的自注意力复杂度公式,就能得到公式(2)了。

这两个公式的第一项相同,第二项由hw变成了MM,将h=56、w=56和M=7代入公式,发现结果相差了几十甚至上百倍。

5 移动窗口自注意力

为了能让窗口和窗口之间能够通信起来,作者提出了移动窗口的方法。移动窗口示意图:

移动窗口示意图

最开始的窗口如左图所示,现在把窗口往右下方移动一半,就变成右图这种形式。Swin Transformer Block的安排是有讲究的,每次都是要先做一次基于窗口的多头自注意力(第一个Block),然后再做一次移动窗口的多头自注意力(第二个Block),这样就达到了窗口和窗口之间的互相通信,这两个Block加起来,才算是Swin Transformer的一个基本计算单元。所以模型的配置里,每个stage下面的配置数都是偶数,也就是说Block总是偶数,因为它始终需要两层Block连在一起作为一个基本单元。

5.1 巧妙的掩码方式

原来只有4个窗口,移动窗口后,变成了9个窗口,计算复杂度成倍增加。

为了提高移动窗口的计算效率,作者采取了一种非常巧妙的masking掩码方式,通过循环移位的方式,首先先将上方的A和C移到下面,然后再将左边的B和左下方的A移动到右边,这样就得到了下图中间cyclic shift这种图了,就又变成了4个窗口了,窗口数量固定了,计算复杂度也固定了。经过带掩码的多头注意力之后,再反向循环移动,这样又恢复回原图了。

掩码方式

具体的计算方式,作者在issue38里做了一个掩码的可视化如下图所示。整体思路是,把每个窗口里的元素拉直,和自己转置后的矩阵相乘,例如windows2,结果是33和66的保留,结果是36和63的置成-100,这样计算softmax的时候就能把36和63的值给掩盖掉了。

详细的视频介绍可以参考:Swin Transformer论文精读,移动窗口自注意力这一节。

掩码可视化

5.2 相对位置编码

论文没有使用绝对位置编码,而是使用相对位置编码的方式。

相对位置编码

6 总结

Swin Transformer的几种变体:

模型变体

这篇论文提出了Swin Transformer,是一个层级式的Transformer,计算复杂度是跟输入图像的大小呈线性增长的。Swin Transformer在COCO和ADE20K上的效果都非常好,远远超越了之前最好的方法。这篇论文最关键的贡献是基于shifted window的自注意力,对很多视觉任务尤其是下游任务例如密集预测型任务非常有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/928626.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

江南大学《2024年807自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《江南大学807自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

Cursor+Devbox AI开发快速入门

1. 前言 今天无意间了解到 Cursor 和 Devbox 两大开发神器,初步尝试以后发现确实能够大幅度提升开发效率,特此想要整理成博客以供大家快速入门. 简单理解 Cursor 就是一款结合AI大模型的代码编辑器,你可以将自己的思路告诉AI,剩下的目录结构的搭建以及项目代码的实现均由AI帮…

【开源】A060-基于Spring Boot的游戏交易系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…

【笔记】离散数学 1-3 章

1. 数理逻辑 1.1 命题逻辑的基本概念 1.1.1 命题的概念 命题(Proposition):是一个陈述句,它要么是真的(true),要么是假的(false),但不能同时为真和假。例如…

JAVA 架构师面试 100套含答案:JVM+spring+ 分布式 + 并发编程》...

今年的行情,让招聘面试变得雪上加霜。已经有不少大厂,如腾讯、字节跳动的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言,甚至失去了难得的机会。 现如今,…

架构10-可观测性

零、文章目录 架构10-可观测性 1、可观测性 (1)可观测性的背景 **历史沿革:**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出,用于线性动态控制系统。后来,该概念被引入到计算机科学中。**现代意义:**在分…

Halcon 瑕疵检测原理及应用

摘要: 本文详细阐述了 Halcon 在瑕疵检测领域的原理、相关技术以及广泛的应用场景。首先介绍了 Halcon 软件的基本概况及其在机器视觉领域的重要地位,接着深入剖析了瑕疵检测所涉及的图像采集、预处理、特征提取与分析以及分类与判定等核心原理&#xff…

开发手札:Win+Mac下工程多开联调

最近完成一个Windows/Android/IOS三端多人网络协同项目V1.0版本,进入测试流程了。为了方便自测,需要用unity将一个工程打开多次,分别是Win/IOS/Android版本,进行多角色联调。 在Win开发机上,以Windows版本为主版…

云原生数据库 PolarDB

PolarDB 是阿里云推出的一款云原生数据库,旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计,特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库(RDS)和分布式数据库特性的新型数据…

状态模式的理解和实践

在软件开发中,我们经常遇到需要根据对象的不同状态执行不同行为的情况。如果直接将这些状态判断和行为逻辑写在同一个类中,会导致该类变得臃肿且难以维护。为了解决这个问题,状态模式(State Pattern)应运而生。状态模式…

【Linux篇】权限管理 - 用户与组权限详解

一. 什么是权限? 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员,几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#,普通用…

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

前言 相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可…

cgo内存泄漏排查

示例程序&#xff1a; package main/* #include <stdlib.h> #include <string.h> #include <stdio.h> char* cMalloc() {char *mem (char*)malloc(1024 * 1024 * 16);return mem; } void cMemset(char* mem) {memset(mem, -, 1024 * 1024 * 16); } int arr…

【算法】【优选算法】位运算(下)

目录 一、&#xff1a;⾯试题 01.01.判定字符是否唯⼀1.1 位图1.2 hash思路1.3 暴力枚举 二、268.丢失的数字2.1 位运算&#xff0c;异或2.2 数学求和 三、371.两整数之和四、137.只出现⼀次的数字 II五、⾯试题 17.19.消失的两个数字 一、&#xff1a;⾯试题 01.01.判定字符是…

Tomcat 都有哪些核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Server&#xff1a;Server元素在最顶层&#xff0c;代表整个 Tomcat容器&#xff0c;因此他必须是 server.xml中唯一一个最外层的元素。一个 Server元素可以有一个或多个 Service元素。 <Server port"8005" shutdown"…

前端开发 之 15个页面加载特效中【附完整源码】

前端开发 之 15个页面加载特效中【附完整源码】 文章目录 前端开发 之 15个页面加载特效中【附完整源码】八&#xff1a;圆环百分比加载特效1.效果展示2.HTML完整代码 九&#xff1a;毒药罐加载特效1.效果展示2.HTML完整代码 十&#xff1a;无限圆环加载特效1.效果展示2.HTML完…

单张照片生成3D互动场景:李飞飞团队AI 3D技术引领未来

近日,由斯坦福大学教授李飞飞领导的团队推出了一项革命性的AI 3D重建技术,该技术能够从多张未知姿态的照片中自动生成高质量的3D互动场景。这项技术不仅标志着计算机视觉领域的一大进步,也为元宇宙虚拟空间、沉浸式看房、XR(扩展现实)+文旅等应用带来了新的可能性。 技术…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…

【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)

CART&#xff08;Classification and Regression Tree&#xff09; CART&#xff08;分类与回归树&#xff09;是一种用于分类和回归任务的决策树算法&#xff0c;提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集&#xff0c;从而构建一棵树。CART …