目录
在计算机视觉领域,卷积神经网络(CNN)长期占据统治地位。
从经典的:
-
LeNet
-
AlexNet
-
VGG
-
GoogLeNet
-
ResNet
-
EfficientNet
到后来的各种目标检测和图像分割模型。
几乎都建立在 CNN 之上。
然而到了2020年。
Google Research 提出了一篇轰动整个视觉领域的论文:
《An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale》
即:
Vision Transformer
简称:
ViT
这篇论文首次证明:
Transformer 不仅能够处理自然语言,还能够直接用于图像分类任务。
更令人震惊的是:
在足够大的数据集上训练后。
ViT 的性能甚至超越了当时最先进的 CNN 网络。
从此:
计算机视觉正式进入:
Transformer时代
后续诞生的:
-
DeiT
-
Swin Transformer
-
BEiT
-
MAE
-
DINO
-
Segment Anything(SAM)
都建立在 ViT 思想基础之上。
可以说:
理解 ViT,就是理解现代视觉大模型的开始。
二、ViT 出现之前的视觉模型
(一)CNN统治时代
传统图像分类流程:
图片
↓
卷积层
↓
池化层
↓
全连接层
↓
分类结果
例如:
ResNet结构:
Input
↓
Conv
↓
Residual Block
↓
Pooling
↓
FC
↓
Output
(二)CNN的优势
CNN具有:
局部感知
能力。
例如:
3×3卷积核:
只关注局部区域。
同时具备:
参数共享
特点。
大大减少模型参数量。
(三)CNN的局限性
虽然CNN很成功。
但存在一个问题:
感受野扩展缓慢
例如:
图像左上角目标。
与右下角目标。
建立联系需要:
很多层卷积。
因此:
长距离依赖建模能力较弱。
三、Transformer为什么能用于图像
(一)Transformer的优势
Transformer最大的特点:
Self-Attention
能够实现:
全局建模
即:
任何两个位置都能直接建立联系。
例如:
图像:
猫
的耳朵。
与:
尾巴
即使距离很远。
Attention也能直接关联。
(二)问题来了
Transformer原本处理:
文本序列
例如:
我
喜欢
人工智能
而图像是:
二维矩阵
例如:
224×224×3
如何转换?
这就是ViT最大的创新。
四、ViT核心思想
ViT提出一个大胆想法:
把图片当作一句话
处理。
在NLP中:
一句话
=
多个Token
例如:
我
喜欢
AI
ViT认为:
图片
=
多个Patch
例如:
224×224图片
切成:
16×16小块
然后:
每个Patch看作一个Token。
送入Transformer。
五、ViT整体结构
ViT总体流程:
Image
↓
Patch Partition
↓
Patch Embedding
↓
Position Embedding
↓
Transformer Encoder
↓
MLP Head
↓
Classification
这是ViT最核心结构。
六、Patch切分原理
(一)为什么要切分
Transformer只能处理:
序列数据
因此:
必须将图片转成序列。
(二)切分过程
假设输入:
224×224×3
Patch大小:
16×16
那么:
224 ÷ 16 = 14
得到:
14 × 14 = 196
个Patch。
即:
196个Token
(三)结构示意
原图
↓
切分
↓
Patch1
Patch2
Patch3
...
Patch196
七、Patch Embedding原理
(一)Patch无法直接输入Transformer
因为:
每个Patch:
16×16×3
仍然是矩阵。
Transformer需要:
向量
输入。
因此:
需要Embedding。
(二)展开过程
一个Patch:
16×16×3
展开:
768维向量
因为:
16 × 16 × 3
=
768
(三)线性映射
然后:
768
↓
Linear
↓
768
或:
768
↓
768/1024
得到统一维度。
最终形成:
Patch Embedding
八、CLS Token原理
(一)什么是CLS Token
ViT借鉴BERT设计。
增加:
[CLS]
分类Token。
(二)作用
用于收集:
整张图片信息
结构:
CLS
Patch1
Patch2
...
Patch196
(三)分类阶段
最终:
仅取:
CLS Token
输出。
进行分类。
九、位置编码原理
(一)为什么需要位置编码
Patch经过切分后。
Transformer不知道:
谁在左上
谁在右下
因此:
加入:
Position Embedding
(二)输入结构
最终输入:
Patch Embedding
+
Position Embedding
形成:
Token Sequence
进入Transformer。
十、Transformer Encoder结构
ViT采用:
标准Transformer Encoder
结构。
整体流程:
Input
↓
Multi-Head Attention
↓
Add & Norm
↓
MLP
↓
Add & Norm
↓
Output
(一)Multi-Head Attention
负责:
全局信息建模
(二)Feed Forward
负责:
特征变换
(三)LayerNorm
负责:
稳定训练
十一、ViT核心工作流程
完整流程:
Image
↓
Patch Split
↓
Patch Embedding
↓
Add Position
↓
Transformer Encoder
↓
CLS Token
↓
MLP Head
↓
Prediction
这是ViT最经典结构。
十二、ViT为什么有效
(一)全局感受野
CNN:
局部卷积。
ViT:
全局Attention
任意两个Patch:
都能直接通信。
(二)更强长距离建模能力
例如:
猫头。
与:
猫尾巴。
能够直接建立联系。
(三)结构统一
与NLP Transformer保持一致。
方便:
跨模态迁移
十三、ViT存在的问题
(一)数据需求巨大
ViT原论文:
训练数据:
JFT-300M
约:
3亿张图片
远超ImageNet。
(二)小数据集效果一般
数据不足时:
CNN往往更好。
(三)计算量较高
Attention复杂度:
O(N²)
Patch越多:
计算越大。
十四、ViT的重要改进模型
(一)DeiT
Facebook提出。
解决:
ViT依赖大数据
问题。
(二)Swin Transformer
微软提出。
引入:
Window Attention
机制。
大幅降低计算量。
(三)BEiT
借鉴BERT思想。
实现:
视觉预训练
(四)MAE
Meta提出。
实现:
自监督学习
(五)SAM
Segment Anything。
其核心骨干网络:
仍然基于ViT。
十五、PyTorch实现ViT核心思想
Patch Embedding示例:
import torch
import torch.nn as nn
class PatchEmbedding(nn.Module):
def __init__(
self,
img_size=224,
patch_size=16,
in_channels=3,
embed_dim=768):
super().__init__()
self.proj = nn.Conv2d(
in_channels,
embed_dim,
kernel_size=patch_size,
stride=patch_size
)
def forward(self,x):
x = self.proj(x)
x = x.flatten(2)
x = x.transpose(1,2)
return x
输出:
(Batch,196,768)
即:
196个Patch Token
十六、ViT与CNN对比
(一)CNN
特点:
局部感知
参数共享
优点:
小数据集表现好
(二)ViT
特点:
全局Attention
优点:
大规模数据优势明显
(三)未来趋势
目前主流视觉模型:
越来越多采用:
CNN + Transformer
混合架构。
例如:
-
ConvNeXt
-
CoAtNet
-
EfficientFormer
十七、ViT对计算机视觉发展的意义
ViT最大的贡献:
首次证明:
Transformer
可以替代CNN
用于图像理解。
其思想推动了:
-
Swin Transformer
-
DINO
-
CLIP
-
SAM
-
GPT-4V
等现代视觉大模型的发展。
可以说:
ViT 是视觉领域从 CNN 时代迈向 Transformer 时代的重要转折点。
十八、总结
Vision Transformer(ViT)是计算机视觉领域最具影响力的模型之一,它成功将 NLP 中的 Transformer 引入图像处理任务,并开启了视觉 Transformer 时代。
本文重点掌握了:
1、ViT提出背景;
2、CNN存在的局限;
3、ViT核心思想;
4、Patch切分机制;
5、Patch Embedding原理;
6、CLS Token作用;
7、Position Embedding原理;
8、Transformer Encoder结构;
9、ViT优势与不足;
10、ViT后续改进模型。
可以将 ViT 理解为:
“把图像切成一个个视觉单词(Patch),然后利用 Transformer 像处理自然语言一样处理图像。”
正是这一思想,让 Transformer 成功突破 NLP 领域边界,进入计算机视觉领域,并最终催生出今天的视觉大模型和多模态大模型生态。对于深度学习开发者而言,ViT 是学习现代视觉 AI 技术必须掌握的重要基础模型。
模型结构——Transformer 如何征服计算机视觉领域&spm=1001.2101.3001.5002&articleId=161850684&d=1&t=3&u=02aae7a336bd4473adcb41356c30493b)
2万+

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



