人工智能|手算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新星计划 #抖音年终知识大赏 - 抖音


目录
相关文章
|
11小时前
|
数据采集 机器学习/深度学习 人工智能
人工智能|YOLOv1的损失函数和非极大值抑制
YOLOv1将图像划分为7×7网格,每格预测2个边界框(共98个),含中心点、宽高、置信度及20类概率。损失函数由坐标(加权5)、置信度(含/不含物体分权重)和分类三部分构成,均采用带平衡系数的均方误差,并以IoU为核心匹配与评估依据。(239字)
28 1
|
11小时前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能|大白话GPT
GPT-1是首个基于Transformer解码器的生成式预训练模型,采用自回归方式逐词生成文本:以起始,依上下文预测下一词,循环直至。其核心为12层Decoder-only架构,通过掩码自注意力实现单向语言建模,并支持分类、蕴含等下游任务微调。(239字)
29 0
|
11小时前
|
机器学习/深度学习 自动驾驶 PyTorch
PyTorch深度学习实战 |SegNet
CamVid_11是面向自动驾驶的语义分割数据集,含700+张精准标注图像,划分为训练/验证/测试集。涵盖道路、车辆、行人等11类场景目标(含背景共12类),支持SegNet等模型训练与评估。
31 0
|
12小时前
|
机器学习/深度学习 人工智能 应用服务中间件
别再被误导了!一文讲透 MCP 与 Function Calling 的真实关系
AI圈热议MCP能否取代Function Calling?实则二者定位迥异:Function Calling是大模型的“决策层”,负责选工具、生成参数;MCP是后端与工具间的“执行协议”,统一调用标准。二者分属不同链路环节,非替代关系,而是协同互补的“黄金搭档”。
|
10小时前
|
人工智能 自然语言处理 数据挖掘
AI时代的个人知识管理:从知识库、SOP到OPC一人公司
本文探讨AI时代下的个人知识管理新范式——OPC一人公司:它并非法律意义的单人企业,而是以目标判断为核、AI为辅、知识库为基、SOP为纲、复盘为钥的可复用工作系统。强调经验沉淀、流程自动化与持续优化,助力个体实现部门级任务处理能力。
33 1
|
11小时前
|
人工智能 自然语言处理 Python
人工智能|BERT的简单介绍
BERT(2018年谷歌提出)是基于Transformer编码器的双向预训练语言模型,通过掩码语言建模(MLM)和下一句预测(NSP)任务学习深度上下文语义,在文本分类、问答、NER等理解型任务中表现卓越。
34 1
|
11小时前
|
数据采集 人工智能 计算机视觉
人工智能|YOLOv1的简单介绍
YOLOv1将输入图像划分为7×7网格,每个网格单元预测2个边界框(BBOX)及对应置信度,并输出20类概率。通过中心点归属、相对坐标偏移与归一化,实现端到端实时目标检测。(239字)
35 1
|
11小时前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能 |手算CLIP模型
本文详解CLIP模型原理:突破传统CNN需重新训练的局限,通过4亿图文对联合训练文本与图像编码器,实现零样本迁移。利用对比学习对齐多模态特征,支持图文检索、零样本分类等应用,让AI像人一样理解未见过的概念。(239字)
30 1
|
1天前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch深度学习实战 |手算ViT(Vision Transformer)模型
ViT将图像分块为Patch,经卷积嵌入成Token序列,加入CLS Token和位置编码后输入Transformer Encoder。其核心是让简单分类头依赖Encoder提炼的强特征,凸显Transformer的全局特征提取能力,奠定多模态大模型基础。(239字)
43 0
|
11小时前
|
数据采集 人工智能 数据可视化
人工智能|YOLOv5必须了解的知识
本文详解YOLOv5网络结构(Input/Backbone/Neck/Head)及train.py核心实现:包括模型加载(预训练权重适配)、yaml配置解析、数据集读取与增强、标签格式说明、多尺度特征融合机制,以及推理阶段预处理、NMS过滤与结果可视化全流程。
31 0