ViT(Vision Transformer)
1. 前言:为什么要抛弃卷积?
虽然 CNN 很强,但它有一个天然的局限性:归纳偏置(Inductive Bias)。
- 局部性:卷积核每次只看几个像素,很难直接捕捉图像左上角和右下角之间的联系(即全局信息)。
- 静态权重:卷积核训练好后,对所有图片的过滤方式是一样的。
ViT 的核心思想:利用 自注意力机制(Self-Attention)。它让图像中的每一个区域都去跟其他所有区域“打招呼”,从而自动学习哪些部分是相关的。
2. 网络概述:ViT 的四大步
ViT 并不直接把像素丢进 Transformer,而是经过了精妙的转化:
- 图像分块 (Patch Embedding):将一张 的图片切成 个小方块(Patches)。每个 Patch 就像是一个“单词”。
- 线性投影:把每个 Patch 拉直并映射到一个固定维度的向量。
- 位置编码 (Position Embedding):因为 Transformer 无法感知顺序,必须给每个 Patch 加上一个“坐标”,告诉模型谁在谁旁边。
- CLS Token:专门在序列开头加一个额外的向量,用来汇总整张图的特征,最后用于分类。
3. 详细网络结构:PyTorch 实现
我们手动实现一个简易版的 ViT 核心流程。
4. ViT vs CNN:该选谁?
在你的 daomanpy.com 教程中,可以为学员总结以下对比:
5. 总结与应用建议
ViT 的变体:
- Swin Transformer:引入了层级结构和移动窗口(Shifted Windows),大大降低了计算量,目前在检测和分割领域非常火。
- MAE (Masked Autoencoders):何恺明提出的自监督学习方法,让 ViT 学习如何补全被遮挡的图片,是目前的工业界主流。
你的 daomanpy.com 教程建议: 对于初学者,建议先用 CNN (YOLO/DBNet) 解决实际工程问题。当你的数据集达到十万级以上,且算力充足(比如有 3090/4090 显卡)时,再考虑引入 ViT 来刷高精度。
你已经跑通了这么多经典模型,下一节要不要我带你看看如何用 TensorRT 优化这些模型,让它们在你的 D 盘环境下跑出飞一般的速度?

