人工智能|手算Swin Transformer模型

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Swin Transformer是一种高效视觉Transformer,通过移位窗口注意力(Shifted Window)替代全局自注意力,结合分层下采样与局部窗口计算,显著降低计算复杂度,同时保持强大建模能力。其核心包括Patch划分、线性嵌入、W-MSA/SW-MSA交替模块及Patch Merging,构成多尺度特征金字塔,已成为目标检测、分割等任务的主流骨干网络。(239字)

 简单的介绍

原始 ViT(图像 Transformer):

        把整张图片切成一个个小块 Patch,直接当成单词 Token,全局注意力缺点:图片太大 →

Token 太多 → 计算爆炸、很慢、效果差。

Swin Transformer 核心解决:

      局部窗口注意力 + 分层下采样 + 移动窗口   Shift Window变成:小窗口自注意力 → 合并窗口

变大 → 再小窗口注意力,也就是金字塔层级视觉 Transformer,也是现在 YOLO、分割、检测几

乎都在用的底座。

                Swin不是一个单词而是Shifted Window,其实就是滑动的意思。

image.gif


Patch Partition

 首先一张图片要经过一个Patch Partition模块。把整个图片进行图片块的分区,假设我们以4个像

素*4个像素作为一个patch,也就是一个块。那么一张图片横着应该是w/4个patch。竖着也可以分

h/4个patch。彩色图片是3个通道的,所以每个patch应该是4*4*3=48的。所以经过Patch Partition

模块的操作后,本质上就是把一张照片转换成一个向量。假设原始图像是224*224的,所以这个向

量最终会变成56*56*48的。

image.gif


Linear Embedding

Linear Embedding=Patch Embedding(48→96线性投影)+Position Embedding(位置编码相加)

Patch Embedding:对图像分块做线性投影(48 维→96 维)

Patch Embedding 是一个可学习的线性全连接层(Linear Projection)

作用:把展平后的48 维原始像素向量 → 映射为模型主干维度 96 维特征 Token

image.gif

Position Embedding 位置编码

Swin Transformer 采用可学习绝对位置编码,并非通过正弦余弦等数学公式固定计算生成。其完整

计算与更新流程如下:

根据 Patch 特征图尺寸 56×56×96

初始化同形状、服从正态分布的随机参数矩阵作为初始位置编码;

位置编码与 Patch Embedding 输出的内容特征维度一致(均为 96 维),满足逐元素相加条件;

训练阶段,位置编码参数会随着网络反向传播、梯度下降自动学习空间位置语义,逐渐学会区分左

上角、中间、右下角等不同空间位置;

推理阶段,训练完成的位置编码参数固定不再更新,直接与对应位置的 Patch 内容特征逐元素相加

融合:


image.gif

图片 224×224×3

Patch Partition:分 4×4 块展平 → 56×56×48

Patch Embedding 线性投影:48→96 → 56×56×96(内容特征)

Position Embedding:初始化 56×56×96 可学习位置参数,训练学习位置信息

两者相加 = Linear Embedding 最终 Token

送入 W-MSA 窗口注意力


Swin Transformer Block

网络结构

一个标准 Swin Block 单元 = 两层 Transformer 层:

第一层:窗口自注意力 W-MSA(只在窗口内注意力)

第二层:移位窗口自注意力 SW-MSA(窗口移动,实现跨窗口交互)

每层后面都带:LayerNorm + MLP 前馈网络 + 残差连接

image.gif

窗口自注意力 W-MSA

        将图像划分成若干 Patch 之后,W-MSA 会在这些 Patch 基础上进一步划分互不重叠的窗

口,仅在每个窗口内部独立进行多头自注意力计算,不再进行全局注意力交互,从而大幅降低模型

计算量。本文设置窗口大小为 7×7,即每个窗口包含 49 个 Patch Token

      但该方式存在明显缺陷:窗口之间完全相互隔绝、信息互不流通,模型全局建模能力较弱。例

如小猫的两只眼睛分别落在两个不同窗口中,自注意力始终无法建立两只眼睛之间的特征关联与交

互。因此 W-MSA 必须搭配SW-MSA 移位窗口自注意力共同使用。

image.gif

输入:56×56×96

含义:高 56 个 Patch × 宽 56 个 Patch × 特征维度 96

W-MSA 内部窗口划分维度变化(设定窗口 7×7)

56×56×96    划窗口     [64,49,96]  

64:一共 64 个窗口

49:每个窗口 49 个 Patch Token

96:每个 Token 维度不变

W-MSA 输入输出维度

W-MSA 窗口自注意力的输入为 Linear Embedding 输出特征:56×56×96

移位窗口自注意力 SW-MSA

只需要将窗口整体移动,就能把原本分属两个窗口的小猫双眼,重新划分到同一个窗口内。那么具

体需要移动多少个 Patch 呢?移位距离由窗口大小超参数 M 决定,取 M//2(向下取整) 即可。我

们窗口大小为 7,因此 7//2 = 3,只需要将窗口向下、向右各移动 3 个 Patch即可。

这时又会出现一个新问题:窗口移位后会移出图片边界怎么办?Swin 采用 循环移位(Cyclic

Shift) 的方式处理:把图片上方、左侧移出边界的区域,循环填补到图片下方、右侧空缺的对应

位置,也就是左上角区域填补到右下角,左侧与顶边区域循环移动到对侧。完成循环移位填补重组

后,再在各个新窗口内部正常执行自注意力计算即可。

image.gif

image.gif

image.gif

对特征图执行窗口移位操作(Shift Window)

移位后重新划分不规则窗口

每个窗口内部依然独立做多头自注意力(和 W-MSA 计算方式一模一样)

加上移位窗口掩码(cyclic shift mask),防止跨无效区域注意力

计算完成后逆移位还原,拼回原图形状

image.gif


Patch Merging

ViT 是一直保持原图尺寸不变,没有下采样;Swin Transformer 用 Patch Merging 做下采样,作

用:把相邻 4 个小 Patch 合并成 1 个大 Patch,尺寸减半、通道翻倍,实现多尺度特征提取。

它就是 Swin 的池化 / 下采样层,比卷积池化更强、更平滑。

我们可以把它类比为 CNN 中的池化层,但二者原理与实现方式完全不同。

我们先展开 Patch Merging 具体逻辑与维度变化,假设前一层输入的 Token 网格尺寸为

H×W×C。Patch Merging 核心操作:将特征图上每相邻 2×2 个 Patch 合并为 1 个新 Token。第一

步:把这 4 个 Patch 的特征在通道维度直接拼接 Concat,特征维度变为原来的 4 倍。对整个

Token 网格执行该操作后,空间宽高尺寸直接减半。

拼接得到的高维特征并不会直接使用,Swin 会在拼接后再接一层线性投影层,对特征维度进行压

缩调整。最终输出 Token 网格尺寸为:空间宽高继续保持减半,特征通道维度变为原来的 2 倍。

到这里可以明显看出 Swin 融入了经典 CNN 的分层思想:网络前向传播过程中,空间分辨率逐渐

降低,通道维度逐渐增大,特征信息密度不断提升,感受野从局部逐步扩散到全局,形成完整的多

尺度特征金字塔结构。

image.gif

image.gif


整体网络结构

随着网络层数不断加深,各个阶段对应的 Patch 感受野在不断变大。初始阶段每个 Patch 对应原

图4×4 像素,经过多次下采样后,后期单个 Patch 可以对应原图32×32 像素。也就是说模型提取

的图像块越来越大、感受野越来越广,以此实现多尺度特征提取。与此同时,特征通道数也在逐层

加倍增长。

模型最终输出特征为7×7×768,经过全局平均池化后压缩为单个 768 维特征向量,再送入全连接

分类层, 分类层权重矩阵维度为768×1000(1000 代表数据集总类别数量),计算得到 1000 维类

别得分向量,经过 Softmax 归一化转换为类别概率,概率最高的类别即为模型最终分类预测结

果。

image.gif

Swin Transformer更像是解码器

    很多人会误以为 Swin Transformer 更像解码器,其实并不是。Swin 虽然使用了掩码多头注意

,但和 Transformer 解码器的掩码完全不同。

在 SW-MSA 移位窗口中,我们通过循环移位把图像不同区域填充到同一个窗口内,如果直接计算

注意力,原本空间不相邻、远距离的区域会产生无意义的注意力交互。因此在注意力分数计算阶

段,我们需要通过循环移位掩码,将这些不属于相邻区域、无意义的灰色部分注意力分数全部遮

挡,赋值为负无穷。屏蔽完成后,再将有效注意力分数送入 Softmax 计算归一化权重,只保留真

实相邻区域的有效注意力交互。

image.gif

参考

【1】深度学习进阶(八)Swin Transformer - 哥布林学者 - 博客园

【2】大白话讲明白 Swin Transformer #SwinTransformer #Transformer #Swin #ai新星计划 #抖音年终知识大赏 - 抖音


目录
相关文章
|
8天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
3677 16
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
16天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3602 13
|
10天前
|
人工智能 自然语言处理 供应链
|
12天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2995 7
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
19天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3727 25
|
10天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1470 3
|
3天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
498 0
|
17天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)