视觉模型全景:从 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 长上下文视频处理

关键问题

Q1:CNN 和 ViT 的本质区别是什么?什么时候选哪个?
CNN 有归纳偏置(局部性、平移不变性)→ 小数据上泛化好、推理快。
ViT 有全局感受野→ 大数据上精度高、多模态扩展容易。选 CNN:数据少(<100K)、需实时推理、部署环境成熟。
选 ViT:数据多、追求 SOTA、需要和文本/多模态结合、大模型生态。
 
Q2:YOLO 为什么这么快?两阶段检测器为什么更准?
YOLO 把检测变成回归问题——一次性输出所有边界框和类别,没有 RPN、没有逐区域分类。
两阶段检测器先筛选候选(RPN)、再精细分类——两次判断过滤掉了大量误检,但速度慢。
本质是"一次决策 vs 两次验证"的 trade-off。
 
Q3:CLIP 为什么能做零样本分类?
CLIP 训练的不是"猫=class 3",而是"猫的图片向量 ≈ 'a photo of a cat' 的文本向量"。
测试时,把 N 个候选文本标签向量和图片向量算相似度,最高分的就是分类结果。
这意味着你可以随时加新类别而不用重新训练——只要给新类别一个文本描述就行。
 
Q4:多模态大模型(如 Qwen2.5-VL)和 CLIP 的核心区别?
CLIP 只做对齐——判断图文是否匹配,不能生成文本。
多模态大模型可以做理解+生成——看图说话、回答问题、定位物体。
架构上,多模态 LLM 在视觉编码器和 LLM 之间加了一个连接器(投影层/Q-Former),把视觉 token "翻译"成 LLM 能理解的 token,然后 LLM 做自回归生成。
 
Q5:DINOv2 为什么不需要标注就能学到这么好的特征?
自蒸馏+数据增强。
同一张图的两个不同裁剪分别给 Teacher 和 Student,Student 学习预测 Teacher 的输出。
Teacher 用 EMA 更新,不反向传播——避免了"模型坍塌"(所有输出变成同一个向量)。
学到的特征是"一张图里哪些区域应该相似"——这种图片内部的语义一致性天然对应物体分割。

参考文献

# 论文 / 模型 核心贡献
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 高分辨率

 

posted @ 2026-07-23 17:27  黄艺龙  阅读(0)  评论(0)    收藏  举报