视觉模型全景:从 CNN 到多模态大模型
视觉模型全景图
视觉模型已从单一的分类器演化为完整的感知—理解—生成体系:CNN 骨架 → Transformer 革命 → 多模态大模型统一视觉与语言
| 层级 | 代表模型 | 核心能力 | 典型场景 |
|---|---|---|---|
| 骨干网络 | ResNet, EfficientNet, ConvNeXt | 图像特征提取 | 所有视觉任务的基座 |
| 目标检测 | YOLO, Faster R-CNN, DETR | 定位 + 分类 | 自动驾驶、安防、工业质检 |
| 语义分割 | UNet, DeepLab, SAM | 像素级分类 | 医学影像、遥感、自动驾驶 |
| 视觉预训练 | ViT, DINOv2, MAE | 通用视觉表征 | 下游任务微调基座 |
| 视觉-语言对齐 | CLIP, BLIP, SigLIP | 图文匹配 | 零样本分类、图文检索 |
| 多模态大模型 | GPT-4V, Qwen2.5-VL, InternVL | 看图理解+对话 | VQA、文档理解、GUI Agent |
CNN 骨干网络(backbone) — 视觉特征提取的基石
ResNet(残差网络)
核心创新:残差连接(Skip Connection)
深层网络面临梯度消失/爆炸——层数增加反而效果下降。ResNet 的解法:让输出 = F(x) + x,即学习"残差"而非直接映射。这样即使 F(x) 学不到东西,至少还有 x 本身(恒等映射),网络不会比浅层更差。
# ResNet 的核心结构
# Bottleneck Block: 1×1降维 → 3×3卷积 → 1×1升维 + Skip Connection
class Bottleneck(nn.Module):
def forward(self, x):
identity = x # 旁路:直接 copy 输入
out = self.conv1(x) # 1×1, 降维到 64
out = self.conv2(out) # 3×3, 特征提取
out = self.conv3(out) # 1×1, 升维回 256
out += identity # 残差相加
out = self.relu(out)
return out
✅ 优点:简单有效、训练稳定、预训练权重丰富、几乎所有视觉任务的首选骨干。
❌ 缺点:计算量不小(尤其深层版本);感受野受限于卷积核大小;对大尺寸输入效率下降。
EfficientNet
核心创新:复合缩放(Compound Scaling)
不是单纯加深或加宽网络,而是深度、宽度、分辨率三者同步缩放:
depth = αφ # 网络深度系数
width = βφ # 每层通道数系数
resolution = γφ # 输入分辨率系数
# 约束: α·β²·γ² ≈ 2,保证每次升级 FLOPs 翻倍
EfficientNet-B0 到 B7 七个版本,精度从 77.1% 到 84.3%,参数从 5.3M 到 66M。B0 用 ResNet-50 1/5 的参数达到了相同的精度。
✅ 优点:精度/效率比极高;NAS 搜索出的结构;移动端友好。
❌ 缺点:深度可分离卷积在某些硬件上优化不充分;小 batch 训练不稳定。
ConvNeXt — 让 CNN 现代化
"A ConvNet for the 2020s"
ConvNeXt 把 Swin Transformer 的成功设计"逆向移植"回 CNN:GELU 激活、LayerNorm 替代 BatchNorm、更大的 kernel(7×7)、倒置瓶颈结构。
结果:纯 CNN 达到了和 Swin Transformer 同等的精度,但推理更快、部署更成熟。
✅ 优点:精度追平 ViT;纯 CNN 推理成熟;无需位置编码等额外复杂度。
❌ 缺点:没有 Transformer 的动态感受野优势;不如 ViT 容易做多模态扩展。
目标检测
YOLO 系列 — 实时检测之王
| 版本 | 年份 | 核心改进 | mAP (COCO) | 速度 (FPS) |
|---|---|---|---|---|
| YOLOv5 | 2020 | CSPDarknet + PANet 颈部 | 50.7% | ~140 |
| YOLOv8 | 2023 | Anchor-Free + C2f 模块 + 解耦头 | 53.9% | ~280 |
| YOLOv9 | 2024 | GELAN + PGI(可编程梯度信息) | 55.6% | 快 |
| YOLOv10 | 2024 | 无 NMS 端到端 + 双标签分配 | 54.4% | 最快 |
| YOLOv11 | 2024 | C3k2 模块 + 多任务统一架构 | ~55% | 更快 |
YOLOv8的使用示例:
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt') # n/s/m/l/x 五种尺寸
# 推理
results = model('image.jpg')
# 训练(仅需 3 行)
model = YOLO('yolov8n.yaml')
results = model.train(data='coco128.yaml', epochs=100)
# 导出
model.export(format='onnx') # ONNX / TensorRT / CoreML / TFLite
✅ 优点:极快(实时)、API 简洁(三行训练)、多尺寸覆盖所有场景、导出格式全。
❌ 缺点:小物体检测弱于两阶段方法;密集场景(人群)精度下降。
Faster R-CNN — 两阶段检测标杆
核心创新:RPN(Region Proposal Network)
两阶段:
① RPN 生成候选区域(可能包含物体的框);
② 对这些候选区域做精细分类和边界框回归。
相比 YOLO 的单阶段(一步出结果),Faster R-CNN 更准但更慢。
✅ 优点:精度高(尤其小物体);框架灵活,可换各种骨干。
❌ 缺点:速度慢(10~20 FPS vs YOLO 的 100+);工程实现复杂。
DETR — Transformer 检测
核心创新:用 Transformer 取代 Anchor + NMS
传统检测依赖预定义的 anchor box(数千个不同尺寸/比例的参考框),模型预测相对 anchor 的偏移量,再用 NMS 去除重叠框。
DETR 把这个过程变成了一个集合预测问题:N 个可学习的 object query 向量 → Transformer Encoder-Decoder → 直接输出绝对坐标——没有 anchor 作为中间参考,没有 NMS 做后处理。
输出也是边界框(x,y,w,h),但它是"凭空"生成的,不是基于某个预定义的参考框微调出来的。
✅ 优点:架构简洁、不需要 NMS、自然支持多类别。
❌ 缺点:小物体检测弱、训练收敛慢(需 500 epochs)。RT-DETR 解决了速度问题,实时运行。
语义/实例分割
UNet — 医学影像的标配
核心创新:对称编码器-解码器 + Skip Connection
编码器(下采样)提取多尺度特征,解码器(上采样)恢复分辨率。每层编码器通过 skip connection 直接拼接到对应解码器层——高层的语义信息和低层的空间细节同时保留。
✅ 优点:小样本效果好、结构简单、医学影像分割标准工具。
❌ 缺点:感受野有限(纯 CNN)、大目标分割不如 Transformer 方法。
SAM(Segment Anything Model)
Meta 开源的通才分割模型 · ViT-H 骨干 · 11M 图像 1.1B mask 训练
SAM 的独特之处:通过 Prompt 控制分割。输入一张图 + 一个 Prompt(点/框/掩码/纯文本),输出该区域的分割 mask。不需要任何微调就能在任意图片上做分割——真正的零样本分割。
# SAM 使用示例
from segment_anything import SamPredictor, sam_model_registry
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)
predictor.set_image(image)
# 用点 Prompt 分割
masks, scores, _ = predictor.predict(
point_coords=np.array([[500, 375]]),
point_labels=np.array([1]), # 1 = 前景点
)
✅ 优点:零样本通才、Prompt 灵活、万物皆可分割。
❌ 缺点:模型巨大(ViT-H 632M)、推理慢(GPU 也要几百毫秒)、精细边缘不如专用模型。
Mask R-CNN 与 YOLOv8-seg
Mask R-CNN:在 Faster R-CNN 上加一个 mask 分支——检测 + 分割同时做。实例分割的事实标准,但速度慢。
YOLOv8-seg:YOLOv8 的分割版本,在检测头旁加 mask 预测分支。实时性极好,适合需要同时检测+分割的场景(如自动驾驶中识别可行驶区域+车辆)。
Vision Transformer(ViT)— 图像的 Transformer 化
把图像切成 Patch,当成"视觉单词",用和 NLP 完全相同的 Transformer 处理——这是 ViT 的核心思想,也是视觉领域近五年最大的范式转移。
ViT 架构
# ViT 的处理流程
输入图像 (224×224×3)
│
▼ 切成 14×14 个 patch,每个 16×16
196 个 patch + 1 个 [CLS] token
│
▼ 线性投影到 768 维 + 位置编码
197 × 768 的序列
│
▼ 12 层标准 Transformer Encoder
│ 每层:Multi-Head Self-Attention + MLP
▼
取 [CLS] token → 分类头 → 类别输出
[CLS] token 到底是什么?
它就是一个随机初始化的 768 维向量,和 patch embedding 尺寸一样,训练过程中它的数值会被梯度不断调整。
它是怎么工作的?在 Self-Attention 里,每个 token(包括 [CLS] 和所有 patch)都会生成自己的 Query、Key、Value。以 [CLS] 为例:
① [CLS] 的 Query 去和 所有 patch 的 Key 算相似度 → 决定"我该关注哪些 patch";
② 按相似度加权聚合所有 patch 的 Value → 得到 [CLS] 在这一层的新表示。
每层都重复这个过程。12 层下来,[CLS] 已经学会了"什么时候关注左下角、什么时候关注右上角"——它在主动筛选哪些图像区域对分类有用。
打个比方:[CLS] 像一个拿着笔记本的调查员,坐在会议桌的首位。196 个 patch 是 196 个目击者,每人只看到图片的一小块。[CLS] 挨个问每个目击者——不是一次,是 12 轮(12 层),每轮都可以追问更深入的问题。最后 [CLS] 在笔记本上写下结论——这个结论就是分类结果。笔记本上写的东西就是 [CLS] 最终输出的那个 768 维向量。
为什么不用全局平均池化(GAP)?
ViT 论文对比了 [CLS] 和 GAP(对所有 patch 输出取平均),两者精度几乎一样。选 [CLS] 纯粹是为了和 BERT 保持一致的风格。后续很多 ViT 变体(如 Swin)反而用 GAP——因为更简单、对 patch 数量变化更鲁棒。
为什么是 768 维?——两处"768"不是同一回事:
① 每个 patch 的原始像素值刚好是 16×16×3=768 个(纯属巧合,patch 尺寸和人设计出来的);
② 线性投影后变成Transformer 内部的 768 维向量
这是沿袭 BERT-Base 的超参选择(12 层 × 768 维 × 12 头),和原始像素数无关。换成 ViT-Large 就是 1024 维,但输入 patch 仍然是 768 个像素值——线性投影做的是 768 → 1024 的映射。两个"768"撞数字了,但逻辑上完全独立。
关键特性
全局感受野——ViT 最本质的优势
CNN 的卷积核只看局部(3×3/7×7),要靠堆叠层数来扩大感受野。ViT 的第二层就已经看到整张图——Self-Attention 天然具有全局感受野。这让 ViT 在需要全局上下文的任务上(如场景理解、多物体关系推理)有显著优势。
数据饥渴——ViT 最大的短板
CNN 有卷积的归纳偏置(局部性、平移不变性),在小数据集上天然泛化好。
ViT 没有这些偏置——它需要从数据中自己学。所以 ViT 在 ImageNet-21K(1400万张)上预训练后才能超越 ResNet;直接用 ImageNet-1K(120万张)训练 ViT,效果不如 ResNet。
| 模型 | 参数量 | ImageNet Top-1 | 特点 |
|---|---|---|---|
| ViT-B/16 | 86M | 77.9% | 标准 ViT |
| ViT-L/16 | 307M | 76.5% | 需要大规模预训练 |
| DeiT-B | 86M | 83.1% | 知识蒸馏训练,不需大数据 |
| Swin-B | 88M | 84.5% | 层次化窗口 Attention |
Swin Transformer — 层次化视觉 Transformer
核心创新:Shifted Window Attention
ViT 的全局 Attention 计算量是 O(N²)(N 为 patch 数)。Swin 把 Attention 限制在局部窗口内,通过窗口偏移(Shifted Window)实现跨窗口信息交互。配合层次化结构(像 CNN 一样逐层缩小分辨率、增加通道),计算量降到 O(N),同时在密集预测任务(检测/分割)上远超 ViT。
✅ 优点:线性复杂度、层次化特征天然适配检测/分割、精度相当于SOTA。
❌ 缺点:窗口偏移增加工程复杂度;相比 ConvNeXt 推理优化不如纯 CNN 成熟。
自监督视觉预训练 — 不靠标签学特征
DINO / DINOv2(自蒸馏)
核心思路:学生网络模仿教师网络
同一张图做不同裁剪给 Teacher(全局视图)和 Student(局部视图),Student 学习预测 Teacher 的输出。Teacher 不反向传播——用 Student 参数的指数移动平均(EMA)更新。这种"无需标签的自蒸馏"学出的特征包含清晰的语义分割信息——甚至不需要任何标注就能做物体分割!
DINOv2:Meta 在 1.42 亿张图上训练的通用视觉骨干,在分类/分割/深度估计/检索等任务上超越了有监督模型。是目前最强的通用视觉特征提取器。
✅ 优点:零标注、特征质量极高、通用性强。
❌ 缺点:训练成本高、模型大(ViT-g/14 1.1B 参数)。
MAE(Masked Autoencoder)
BERT 的视觉版:随机遮住 75% 的图像 patch,让模型重建
关键设计:① 遮住 75%(远高于 BERT 的 15%),逼模型学全局理解;② 编码器只处理未遮挡的 patch(25%),大幅降低计算量;③ 解码器轻量,只用于重建任务,下游任务时丢弃。
✅ 优点:训练高效(只算 25% token)、扩展到 ViT-H/ViT-L 效果极好。
❌ 缺点:重建目标是像素级(低级特征),不如对比学习学的语义特征好。
视觉-语言对齐模型
CLIP(Contrastive Language-Image Pre-training)
CLIP = 图像编码器 + 文本编码器 + 对比学习 → 图文共享同一向量空间。
工作原理
4 亿图文对训练。正样本:图文匹配;负样本:同一 batch 内其他组合。
图像编码器(ViT)和文本编码器(Transformer)各自输出向量,通过对比 loss 拉近匹配图文对、推远不匹配的。
# CLIP 零样本分类——不需要任何微调
import clip
model, preprocess = clip.load("ViT-B/32")
image = preprocess(Image.open("cat.jpg")).unsqueeze(0)
text = clip.tokenize([
"a photo of a cat",
"a photo of a dog",
"a photo of a bird"
])
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits = image_features @ text_features.T # 相似度矩阵
# 最高分的文本标签 = 分类结果
pred = logits.softmax(dim=-1) # [0.89, 0.07, 0.04] → cat!
✅ 优点:零样本分类(不需要训练数据);图文检索;Stable Diffusion 等生成模型的基础。
❌ 缺点:细粒度分类弱(哈士奇 vs 阿拉斯加);不能生成文本描述。
BLIP-2 — Q-Former 桥接视觉与语言
核心创新:Q-Former(Querying Transformer)
CLIP 是对齐但不是生成。BLIP-2 引入 Q-Former——一组可学习的 query token,在冻结的图像编码器和冻结的 LLM 之间做"翻译"。
不训图像编码器、不训 LLM,只训轻量 Q-Former——用最小的代价把视觉特征接入任意 LLM。
✅ 优点:高效(只训小模块);可插拔任意 LLM(LLaMA/OPT/FlanT5)。
❌ 缺点:Q-Former 是信息瓶颈;复杂推理比端到端训练的弱。
SigLIP — 更高效的 CLIP 替代
CLIP 用对比 softmax loss(需要全局 batch),SigLIP 改用逐对 sigmoid loss——每个图文对独立判断是否匹配。
消除了 CLIP 对超大 batch size 的依赖,训练更稳定、更高效。Google 的 PaliGemma 系列就用的 SigLIP 做视觉编码器。
多模态大模型 — 看图、理解、对话
多模态大模型 = 视觉编码器 + 连接器 + LLM。
输入图片,输出文字——看图说话、视觉问答、图表理解、GUI 操作。
主流多模态大模型对比
| 模型 | 视觉编码器 | LLM | 连接方式 | 亮点 |
|---|---|---|---|---|
| GPT-4V / 4o | 未公开 | GPT-4 | 原生多模态 | 综合能力最强 |
| Gemini 2.5 Pro | 未公开 | Gemini | 原生多模态 | 超长上下文、视频理解 |
| Qwen2.5-VL | ViT (SigLIP 对齐) | Qwen2.5 | MLP 投影 | 动态分辨率、OCR 强、中文最优 |
| InternVL2.5 | InternViT | InternLM | Pixel Shuffle | 开源最强之一,多尺寸可选 |
| LLaVA-NeXT | CLIP-ViT | LLaMA/Qwen | MLP 投影 | AnyRes 动态高分辨率 |
| DeepSeek-VL2 | SigLIP + SAM | DeepSeek | Hybrid | MoE+多模态、成本低 |
Qwen2.5-VL — 中文多模态标杆
三大特色
① 动态分辨率:不把图压缩成固定大小——根据原图比例动态调整 patch 数量,细节不丢失。文档扫描、发票识别精度极高。
② 定位能力:可以输出边界框坐标——"把图中红色汽车框出来"。
③ 视频理解:支持视频输入,逐帧分析后综合回答。
# Qwen2.5-VL 调用示例(OpenAI 兼容 API)
from openai import OpenAI
client = OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = client.chat.completions.create(
model="qwen-vl-max",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://..."}},
{"type": "text", "text": "这张图片里有什么?"}
]
}]
)
✅ 优点:中文 OCR 极强、动态分辨率、开源、API 便宜。
❌ 缺点:复杂的多物体空间推理不如 Gemini;英文场景逊于 GPT-4V。
LLaVA 架构 — 开源多模态的标准范式
最小可行的多模态大模型
LLaVA 证明了一个简洁的事实:冻结的 CLIP 视觉编码器 + 一个线性投影层 + 冻结的 LLaMA → 就能实现看图对话。
训练两阶段:
① 预训练投影层(对齐视觉和语言空间);
② 指令微调(让模型学会看图回答问题)。
整个流程开源、可复现、成本低。
✅ 优点:架构极简、训练成本低、学术友好。
❌ 缺点:简单投影层是信息瓶颈;复杂视觉推理不如原生多模态模型。
多模态大模型的局限性
⚠ 幻觉:看图编造
和 LLM 一样,视觉大模型也会"编"——图中没有的东西被描述出来。这是目前多模态 LLM 最严重的可靠性问题。
⚠ 细粒度定位弱
"图片左下角第三个人的手表是什么牌子"——这种精细的空间定位问题,目前所有模型都很难准确回答。视觉 token 化过程中丢弃了精确的位置信息。
⚠ 分辨率 vs 成本的矛盾
高分辨率图像 = 更多 patch = 更长的输入序列 = 更高成本。一张 4K 图切成 patch 可能产生上万个 token,LLM 处理成本成倍增长。
模型选型指南
| 任务场景 | 推荐模型 | 理由 |
|---|---|---|
| 图像分类(小数据) | ResNet-50 预训练 + 微调 | 成熟、稳定、社区资源丰富 |
| 图像分类(大数据) | ViT-B/16 或 ConvNeXt-B | 精度更高 |
| 实时目标检测 | YOLOv8/v11 | 速度最快、部署最简单 |
| 高精度目标检测 | RT-DETR 或 Faster R-CNN | 小物体更好 |
| 通用特征提取 | DINOv2 | 零样本泛化最强 |
| 医学影像分割 | UNet + 变体 | 小样本效果好、可解释 |
| 通用分割(Prompt) | SAM 2 | 零样本万物分割 |
| 图文检索 / 零样本分类 | CLIP (ViT-L/14) | 标准方案 |
| 看图对话(中文) | Qwen2.5-VL | 中文 OCR 最强、成本低 |
| 看图对话(英文/综合) | GPT-4o 或 Gemini 2.5 Pro | 综合能力最强 |
| 文档/发票/表格理解 | Qwen2.5-VL 或 InternVL2.5 | 高分辨率、OCR 优秀 |
| 视频理解 | Gemini 2.5 Pro 或 Qwen2.5-VL | 长上下文视频处理 |
关键问题
参考文献
| # | 论文 / 模型 | 核心贡献 |
|---|---|---|
| 1 | Deep Residual Learning for Image Recognition (ResNet, He et al., 2015) | 残差连接解决深层网络退化,成为视觉模型标准骨干 |
| 2 | An Image is Worth 16x16 Words (ViT, Dosovitskiy et al., 2020) | 将 Transformer 引入视觉,证明纯 Transformer 在大数据下超越 CNN |
| 3 | YOLOv8/YOLOv11 (Ultralytics, 2023-2024) | 实时目标检测工业标准,Anchor-Free + 多任务统一架构 |
| 4 | Segment Anything (SAM, Kirillov et al., Meta, 2023) | Prompt-driven 通才分割模型,11M 图像 1.1B mask 训练 |
| 5 | CLIP (Radford et al., OpenAI, 2021) | 对比学习对齐视觉和语言,零样本分类 + 图文检索标准方案 |
| 6 | DINOv2 (Oquab et al., Meta, 2023) | 自监督视觉预训练,142M 图像训练,通用特征提取最强 |
| 7 | BLIP-2 (Li et al., Salesforce, 2023) | Q-Former 桥接冻结视觉编码器与冻结 LLM,高效多模态训练 |
| 8 | Qwen2.5-VL (Alibaba, 2025) | 动态分辨率 + 中文 OCR 最强开源多模态大模型 |
| 9 | LLaVA / LLaVA-NeXT (Liu et al., 2023-2024) | 开源多模态范式:CLIP+投影层+LLM,AnyRes 高分辨率 |

浙公网安备 33010602011771号