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

Swin Transformer基本原理与传统Transformer对比图解

目录

一  Swin Transformer 核心创新

二 窗口注意力 (Window Attention)

2.1.1为什么需要窗口注意力?

2.1.2 窗口注意力的核心原理

2.1.3 优势

2.1.4示例理解

2.1.5 传统注意力 vs 窗口注意力

2.1.1.6 计算复杂度对比

三 移位窗口 (Shifted Window)

3.1.1原始窗口(蓝色) vs 移位窗口(紫色)

3.1.2 Swin Transformer 层级结构

四 性能对比


一  Swin Transformer 核心创新

Swin Transformer 是一种基于Transformer的视觉识别模型,其核心创新在于引入了窗口注意力(Window Attention)移位窗口(Shifted Window)机制,解决了传统Transformer在处理高分辨率图像时计算复杂度高的问题。

二 窗口注意力 (Window Attention)

2.1.1为什么需要窗口注意力?

传统 Transformer 的自注意力机制需要计算所有像素(或图像补丁)之间的依赖关系,计算复杂度为 O(N²)(N 为像素 / 补丁总数)。当处理高分辨率图像(如 224×224 甚至更大)时,N 会非常大(例如 224×224 图像分割为 16×16 补丁后,N=196),此时 O (N²) 的计算量会急剧增加,导致模型效率极低,难以应用于实际视觉任务。

2.1.2 窗口注意力的核心原理

窗口注意力通过以下方式优化计算:

  1. 图像分窗:将输入图像(或特征图)分割为若干个不重叠的局部窗口(例如 7×7 大小的窗口)。
    假设图像被分割为 H×W 个补丁,窗口大小为 W×W,则整个图像会被划分为 (H/W)×(W/W) 个独立窗口。

  2. 局部注意力计算:仅在每个窗口内部计算自注意力,而不考虑窗口外的像素 / 补丁。
    此时,每个窗口内的注意力计算复杂度为 O (W²)(窗口内补丁数量为 W²),而全局总计算复杂度变为 O ((H×W/W²) × W²) = O (H×W × W²) = O (N×W²)(N=H×W 为总补丁数)。

2.1.3 优势
  • 效率大幅提升:计算复杂度从 O (N²) 降至 O (N×W²),当窗口大小 W 固定(如 7)时,复杂度随图像尺寸呈线性增长(而非平方级),使模型能处理更高分辨率的图像。
  • 符合视觉特性:视觉任务中,物体的局部特征(如纹理、边缘)往往比全局特征更重要,窗口内的局部注意力更符合视觉信号的局部相关性。
2.1.4示例理解

  假设一幅图像被分割为 28×28 个补丁(共 784 个,即 N=784),使用 7×7 的窗口:

  • 传统自注意力:需计算 784×784≈61.5 万对依赖关系;
  • 窗口注意力:图像被分为 4×4=16 个窗口(每个窗口 7×7=49 个补丁),总计算量为 16×49×49≈3.8 万对,仅为传统方式的 6%。

传统Transformer在处理图像时,需要计算所有像素之间的注意力,计算复杂度为O(N²),其中N是图像的像素数量。当图像分辨率较高时,这种计算方式变得非常低效。

Swin Transformer提出了窗口注意力机制,将图像分割成多个不重叠的窗口,仅在每个窗口内计算注意力。这种方式将计算复

2.1.5 传统注意力 vs 窗口注意力

传统注意力:所有像素间计算注意力

窗口注意力:仅在窗口内计算注意力

杂度降至O(NW²),其中W是窗口大小,显著提高了计算效率。

2.1.1.6 计算复杂度对比

假设图像被分割为H×W的补丁(patches),则:

三 移位窗口 (Shifted Window)

         窗口注意力虽然提高了计算效率,但也带来了新的问题:窗口之间的信息无法交互。为了解决这个问题,Swin Transformer引入了移位窗口机制,通过在下一层将窗口偏移一定距离,让相邻窗口产生重叠,从而实现跨窗口的信息交互。

3.1.1原始窗口(蓝色) vs 移位窗口(紫色)

    移位窗口机制通过将窗口位置偏移半个窗口大小,使得原本分离的窗口产生重叠,从而允许跨窗口的信息流动。

3.1.2 Swin Transformer 层级结构

四 性能对比

http://www.xdnf.cn/news/1407799.html

相关文章:

  • Lua基础知识精炼
  • vim-plugin AI插件
  • 运筹说 第141期 | 启发式算法:用简单规则、破解复杂问题
  • 网络端口与服务对应表 - 白帽子安全参考指南
  • C#基础(③CMD进程)
  • LLM记账智能体-MCP服务-实现步骤与效果展示
  • @Value注解的底层原理(一)
  • (一) aws上微服务
  • C++ 快速复习指南(上半部分)
  • 我开发了一个自动还原源码的小工具
  • AI辅助编程日记和chat历史开源Series 1:VSCode + GitHub Copilot 自动下载及安装软件
  • 《打破 “慢“ 的黑箱:前端请求全链路耗时统计方案》
  • Vue3 响应式基础
  • 前端学习——JavaScript基础
  • 创维LB2004_安装软件教程
  • 37. 解数独
  • GaRe:面向非约束户外照片集的可重光照 3D 高斯溅射技术简要解析
  • Android开发-活动页面
  • C# .Net8 WinFormsApp使用日志Serilog组件
  • c++ Effective c++ 条款5
  • 机器学习之线性回归
  • 数据结构02:排序算法
  • PyQt5 进度条详细示例与性能优化
  • 电商系统的分布式事务调优
  • Knit-易用的prompt管理和调试工具
  • 第六章:透明度-Transparency《Unity Shaders and Effets Cookbook》
  • io进程线程;标准IO;0831
  • 【嵌入式】【调用函数图】手动绘制函数调用状态机
  • 【优先算法--前缀和】
  • 3DES加解密的算法Java Python Golang