三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

视觉大模型Vision Encoder全流程:图像预处理、Token化、位置编码、特殊Token、Backbone、多尺度、Neck、特征融合、特征聚合、Token压缩、归一化、输出投影与视觉语言对齐

视觉大模型Vision Encoder全流程:图像预处理、Token化、位置编码、特殊Token、Backbone、多尺度、Neck、特征融合、特征聚合、Token压缩、归一化、输出投影与视觉语言对齐

一、先建立一张完整地图

对于初学者,可以先把完整视觉侧理解成:

Input Image / Video
输入图像或视频:视觉模型接收的原始数据

Image Preprocessing
图像预处理:缩放、裁剪、归一化、分块等

Visual Tokenization
视觉Token化:把像素转换成Patch或视觉Token

Positional Encoding
位置编码:告诉模型每个Token在图像中的空间位置

Special Tokens
特殊Token:如CLS、Register、Query Token,用于汇总或辅助计算

Vision Backbone
视觉主干网络:提取核心视觉语义特征,如ViT、Swin、PVT

Hierarchical / Multi-scale Representation
层次化/多尺度表示:生成不同分辨率和语义层级的视觉特征

Neck
颈部网络:整理和重构Backbone输出的多尺度特征,如FPN、BiFPN

Feature Fusion
特征融合:融合跨尺度、跨层级或跨分支的信息

Feature Aggregation
特征聚合:将大量局部特征汇总为更紧凑的高级表示

Token Compression / Resampling
Token压缩/重采样:减少视觉Token数量,降低后续计算成本

Output Normalization
输出归一化:统一特征尺度并提高数值稳定性

Visual Features
视觉特征:Vision Encoder最终输出的视觉表示

Projection / Connector
投影/连接器:将视觉特征映射到LLM可接受的表示空间

LLM / Task Head
大语言模型/任务头:完成问答、描述、检测、分割等最终任务

最重要的是理解:

Vision Encoder 不是某一个 Transformer,而是一条“把像素变成高质量视觉表示”的流水线。

其中真正的核心可以归成以下几层。

层级模块最简单的理解
图像预处理(Image Preprocessing)先把图片整理好
视觉 Token 化(Visual Tokenization)把图片切成机器能处理的小块
位置编码(Positional Encoding)告诉模型每块在哪里
特殊 Token(Special Tokens)给模型增加特殊“记事本”
主干网络(Backbone)真正理解图片
多尺度表示(Multi-scale Representation)同时看大物体和小物体
颈部网络(Neck)整理 Backbone 的不同层特征
特征融合(Feature Fusion)让不同信息互相交流
特征聚合(Feature Aggregation)把很多局部信息总结起来
Token 压缩(Token Compression)减少 Token 数量
输出归一化(Output Normalization)把特征数值整理稳定
输出投影(Output Projection)改变特征维度
视觉-语言连接器(Vision-Language Connector)把视觉特征交给 LLM

下面逐个来看。


二、① 图像预处理(Image Preprocessing)

这一层没有所谓“五大网络”,因为它不是神经网络主体,而是一组输入处理方法(Input Processing Methods)

1. Resize

最简单:

I∈RH×W×3→I′∈RH′×W′×3I\in\mathbb{R}^{H\times W\times3}\rightarrow I'\in\mathbb{R}^{H'\times W'\times3}IRH×W×3IRH×W×3

例如:

1920×1080→224×2241920\times1080\rightarrow224\times2241920×1080224×224

优点是简单。

缺点也明显:一张包含很小文字的高清图片压成224×224224\times224224×224后,小文字可能直接看不清。

经典 ViT 就主要工作在固定输入尺寸和固定 Patch 网格之上。


2. Center Crop

先缩放,再从中间裁剪。

Original Image ↓ Resize ↓ Center Crop ↓ 224 × 224

这是传统 ImageNet 分类模型中非常经典的处理方式。

适合:

图像分类(Image Classification)

但不特别适合:

OCR、文档、GUI、图表。

原因很简单:裁掉的区域可能刚好包含重要信息。


3. Random Resized Crop

训练时随机:

  • 选择区域;
  • 裁剪;
  • 缩放。

相当于告诉模型:

“同一个东西大小、位置发生变化,你都应该认识。”

这是经典的数据增强(Data Augmentation)


4. Image Tiling

高分辨率视觉大模型常见思路:

High Resolution Image

Global View

Tile 1

Tile 2

Tile 3

Tile N

Vision Encoder

例如一张:

2048×20482048\times20482048×2048

图片可以被切成多个:

448×448448\times448448×448

区域分别编码。

优点是保留细节。

缺点是:

Ntokens↑N_{\text{tokens}}\uparrowNtokens

导致 LLM 计算成本增加。


5. Dynamic / Native Resolution

到了 2024–2026,这已经成为非常重要的一条路线。

Qwen2-VL 引入动态分辨率(Dynamic Resolution),让不同尺寸图片产生不同数量的 Visual Tokens;Qwen2.5-VL 延续了这一设计。

SigLIP 2 也训练了支持多分辨率并保留原始宽高比的模型。

所以到 2026 年,你可以把输入方案理解为:

固定 Resize → Tiling → Dynamic Resolution → Native Resolution

这是一条明显的演进路线。


三、② 视觉 Token 化(Visual Tokenization)

这是第一个真正值得系统研究的模型模块。

假设图片大小:

H×WH\times WH×W

Patch Size:

P×PP\times PP×P

那么 Token 数量大致为:

N=HPWPN=\frac{H}{P}\frac{W}{P}N=PHPW

例如:

224×224,P=16224\times224,\quad P=16224×224,P=16

得到:

N=14×14=196N=14\times14=196N=14×14=196


五个经典代表

模型Tokenization 方法核心特点
ViTLinear Patch Embedding最经典的 Patchify
T2T-ViTTokens-to-Token逐渐聚合邻域
CvTConvolutional Token Embedding用卷积生成 Token
PVT v2Overlapping Patch EmbeddingPatch 相互重叠
Swin TransformerPatch Partition + Linear Embedding为层次化 Transformer 准备 Token

1. ViT

ViT 是最经典的方法。

先切 Patch:

xpi∈RP2Cx_p^i\in\mathbb{R}^{P^2C}xpiRP2C

然后线性变换:

zi=xpiEz_i=x_p^iEzi=xpiE

其中:

E∈RP2C×DE\in\mathbb{R}^{P^2C\times D}ERP2C×D

高中生可以把它理解成:

把一张图片切成 196 张“小卡片”,然后把每张小卡片翻译成一个DDD维数字向量。

ViT 证明了直接把图像 Patch 当成序列输入 Transformer 是可行的。


2. T2T-ViT

ViT 的问题是:

一刀切 Patch 太粗暴。

例如一条猫耳朵的边缘可能刚好跨过两个 Patch。

T2T-ViT 提出:

Tokens-to-Token(Token 到 Token)

不断让相邻 Token 先交流,再进行聚合:

← 返回列表