| -------------------- | ------------------------------------------------------------ |
| 本实验属于哪门课程? | 中国海洋大学25秋《软件工程原理与实践》 |
| 实验名称? | 实验5:ViT & Swin Transformer |
| 博客链接: | 本链接
一、实验内容
1.第⼀部分:视频学习
1 ViT 学习总结与思考
🌟 核心思想与结构
Vision Transformer(ViT)首次在视觉任务中完全替代卷积,依靠纯 Transformer 结构实现图像识别。主要流程包括:
- Patch 分割与嵌入:将输入图像拆分为固定大小的 patch(如 16×16),展平后线性映射至 d 维,形成 token。
- 位置编码与 [CLS] Token:加入可学习的 [CLS] token 和位置编码,保留空间位置信息。
- Encoder 堆叠结构:由多层
Multi-Head Self-Attention + MLP (FFN)组成,并配合残差连接与 LayerNorm。 - 分类输出:通过 [CLS] token 的输出进行分类。
思考
- 全局建模能力强:ViT 的自注意力可在图像任意位置间建立联系,捕获远程依赖。
- 计算量问题明显:注意力计算复杂度为 O(N²),对高分辨率图像极不友好。
- 数据依赖严重:ViT 缺乏 CNN 的空间归纳偏置,需要大量数据预训练(如 JFT-300M)。
- 设计取舍:Patch 大小影响精度与效率——小 Patch 细节丰富但算力高,大 Patch 反之。
总结
ViT 的提出是视觉界的一次范式革命。它让我们认识到:卷积并非视觉建模的唯一解。然而,它也暴露出 Transformer 的瓶颈——缺乏归纳偏置、计算昂贵、数据需求大。后续的工作(如 Swin、PVT)正是对这些问题的系统性修正。
2 Swin Transformer 学习总结与思考
🌟 核心创新
Swin Transformer 通过“局部注意力 + 层次化结构”实现了 Transformer 在视觉领域的真正落地。
- 窗口多头自注意力(W-MSA):注意力只在局部窗口内计算,将复杂度从 O(N²) 降为近似 O(N)。
- 移位窗口(SW-MSA):在相邻层中平移窗口位置,使不同窗口之间能交流信息。
- 层次化特征金字塔:通过 Patch Merging 逐层降采样,形成多尺度表示,方便下游检测与分割。
- 统一 Backbone:既能替代 ResNet,用于分类、检测、分割等任务。
思考
- “先局部,后整体”:这是 Swin 的核心哲学。先局部聚焦特征,再通过移位扩大感受野,兼顾效率与全局性。
- 归纳偏置的回归:Swin 在纯 Transformer 框架中引入了类似 CNN 的层次化结构,提升了模型稳定性。
- 通用性:Swin 被证明能在视觉多任务中统一架构,成为现代视觉 Transformer 的主流范式。
总结
Swin 的设计体现了结构上的智慧:它以极小的代价让 Transformer 真正适应视觉任务,也为之后的 ConvNeXt、InternImage 等架构提供了基础蓝本。
3 视觉 Transformer 综述与趋势
🌟发展脉络
系统回顾了视觉 Transformer 的发展历程,可归纳为三大阶段:
| 阶段 | 代表模型 | 特点 |
|---|---|---|
| I. 全局注意力阶段 | ViT | 纯 Transformer,强全局建模但昂贵 |
| II. 局部化/层次化阶段 | Swin, PVT, CvT | 引入局部窗口与金字塔结构 |
| III. 高效与多模态阶段 | Linear-Attn, DeiT, CLIP | 轻量化、蒸馏与跨模态融合 |
总结
- 高效注意力:研究重心转向线性/稀疏/分组注意力以降低计算。
- Token 自适应:通过动态 Token 选择与压缩减少计算冗余。
- 多模态融合:视觉-语言、视频、3D 等任务均在 Transformer 框架下统一。
- 轻量化与边端落地:新结构(如 MobileViT、EfficientFormer)探索在移动端的可部署性。
思考
视觉 Transformer 并非彻底抛弃 CNN,而是在逐步吸收 CNN 的结构智慧。**归纳偏置不是落后,而是经验的升华。**未来趋势是融合:CNN 的局部建模 + Transformer 的全局表达 + 图模型的关系建模。
2.第⼆部分:问题总结
思考下⾯的问题:
1、在ViT中要降低 Attention的计算量,有哪些方法?(提示:Swin的 Window attention,PVT的attention)
- 局部化注意力:将全局注意力限制在局部窗口(Swin)。
- 金字塔结构:逐层降采样,减少 token 数量(PVT)。
- 线性注意力:使用核化或低秩近似,使复杂度线性增长。
- Token Pooling / Pruning:动态选取重要 token,减少无效计算。
- 稀疏/混合注意力:仅在关键 token 间保留全局连接。
2、Swin体现了一种什么思路?对后来工作有哪些启发?(提示:先局部再整体
-
核心思路:先局部建模,再整体整合。
- 局部窗口 → 高效建模
- 移位窗口 → 跨窗口信息交互
- 分层金字塔 → 多尺度语义整合
- 统一 Backbone → 通用视觉框架
-
Swin 的启发在于:Transformer 不必全局关注一切,局部化也能通向全局理解。这成为后续设计(如 MViT、CSWin、ConvNeXt)的通用思路。
3、有些网络将CNN和Transformer结合,为什么一般把 CNN block放在面前,Transformer block放在后面?
-
因为 CNN 负责局部低层特征提取与降采样,Transformer 负责高层全局建模与语义整合。两者在结构层面是从局部到全局的自然衔接,在工程上也能实现更高的效率与稳定性。它们的顺序体现了视觉特征从“像素 → 图案 → 语义”的自然递进。
-
同时从以下方面考虑,把 CNN block放在面前,Transformer block放在后面也会更好。
(1)层次结构上的互补
- CNN 前置可以快速提取边缘、纹理、颜色梯度等底层特征,形成稳定的空间表征;
- Transformer 后置通过自注意力机制在高维语义空间建立全局依赖,进行语义整合与模式识别。
这符合人类视觉处理的层级特征分布:先局部感知,再整体认知。
(2)计算效率的考量
- Transformer 的自注意力复杂度为 O(N²),而 CNN 的卷积为 O(N)。
- 若直接在高分辨率输入上使用 Transformer,会导致巨大的计算与显存开销。
- 因此,先由 CNN 进行空间降采样与通道扩展,再输入 Transformer,可显著提升效率。
(3)训练稳定性与归纳偏置
- CNN 天然具有平移不变性与局部平滑性,这是一种强归纳偏置。
- Transformer 则依赖大规模数据学习这种偏置。
- 将 CNN 放前面能帮助模型在有限数据下快速收敛,减少训练不稳定。
(4)迁移性与模块化优势
- 前端 CNN 的底层特征可在不同任务间迁移复用(例如从分类迁移到检测)。
- 后端 Transformer 作为高层语义建模模块,更灵活地适配不同任务需求。
4、阅读并了解Restormer,思考:Transformer的基本结构为 attention+ FFN,这个工作分别做了哪些改进?
-
结论:
Restormer 通过在 Attention 和 FFN 中同时引入 卷积的局部归纳偏置 与 动态门控机制,在保证 Transformer 全局建模优势的前提下,实现了计算高效、结构轻量、细节恢复能力强的图像复原网络。 -
Attention:MDTA(Multi-Dconv Head Transposed Attention)
改进点 传统 Transformer Restormer 的做法 作用与效果 注意力维度 空间维度计算自注意力(复杂度 ∝ HW²) 在通道维度上计算注意力(Transposed Attention) 将复杂度降为线性,适应高分辨率图像 局部上下文融合 无局部卷积结构,仅线性映射生成 Q/K/V 先做 1×1 卷积 + 3×3 depth-wise 卷积 再生成 Q/K/V 融合局部空间特征与全局依赖 可学习缩放参数 固定的 softmax 温度 每个注意力头引入可学习参数 α 稳定训练,控制注意力分布强度 整体特征 仅捕捉长程依赖,忽视局部细节 同时建模局部与全局特征 提升复原任务中的纹理细节表现 总结:
MDTA 通通道注意力 + 卷积局部增强 + 可学习缩放三重机制,让 Transformer 在不分块、不降分辨率的前提下获得高效全局建模能力。 -
FFN:GDFN(Gated-Dconv Feed-Forward Network)
改进点 传统 Transformer Restormer 的做法 作用与效果 结构形式 单纯两层线性层(MLP) 增加门控机制(Gating):两分支逐元素相乘 控制特征流动,抑制冗余特征 局部信息建模 点操作(逐像素),无邻域感知 加入 depth-wise 卷积 融合局部上下文信息 扩张比例 通道扩张通常为 4× 调整为 2× 或 3×,以减小参数量 在保持性能的同时降低计算成本 激活函数 ReLU 或 GELU 使用 GELU 激活 更平滑的梯度与性能提升 总结:
GDFN 让 FFN 不再是纯线性通道变换,而具备了门控选择性与局部卷积感知能力,增强了特征表示的灵活性与空间敏感度。
二、问题总结与体会
这次实验让我真正走近了那个大名鼎鼎的 Transformer。在学习 ViT 的过程中,我感受到一种非常纯粹的思路:把图像分成 patch,当作 token 送入 Transformer,让模型自己去学习全局依赖。这种设计看起来优雅而彻底,但也让我看到了它的代价——巨大的计算复杂度、对数据量的强依赖、以及缺乏局部归纳偏置带来的训练不稳定。Swin Transformer 给了我另一种启发。它没有完全抛弃 ViT 的思想,而是通过窗口注意力和金字塔结构,让模型从局部逐步扩展到全局。 这种先局部、再整体的设计思路让我觉得非常聪明。它不再执着于一次性看全图,而是让模型在可控的计算量下,逐层积累全局信息。Restormer 则让我看到了 Transformer 的另一种成熟。它没有推翻原有框架,而是在 Attention 和 FFN 中做了精细的调整: 用通道注意力(MDTA)替代空间注意力,让复杂度降为线性;在 FFN 中加入门控和深度卷积(GDFN),让网络既有全局感知力,也能捕捉局部细节。这些改变并不夸张,却十分有效。
总的来说,这次实验让我重新认识了 Transformer。Transformer 的强大建立在不断的改进之上,从 ViT 到 Swin,再到 Restormer,每一次优化都在修补它的短板。这其实也体现了计算机的迭代思想,最重要的不是一开始有多惊艳,而是能不断修正、不断进化。希望我也能不断进步,不断优化,越学越好。
658

被折叠的 条评论
为什么被折叠?



