VLM 架构演进

视觉语言模型(Vision-Language Model, VLM)的发展经历了三个主要阶段:

第一代:对齐架构(CLIP/BLIP)

图像 → 视觉编码器(ViT) ──┐
                          ├── 对比学习/交叉注意力 → 相似度/描述
文本 → 文本编码器(BERT) ──┘

CLIP 和 BLIP 采用双编码器架构,主要用于图文检索和零样本分类,不具备生成能力。

第二代:桥接架构(LLaVA/MiniGPT-4)

图像 → ViT → 投影层(MLP/Q-Former) → 视觉Token → 拼接到文本Token → LLM → 生成

LLaVA 开创了"视觉编码器 + 投影层 + LLM"的范式,成为开源 VLM 的事实标准。

第三代:原生多模态(GPT-4V/Gemini/Qwen2-VL)

图像 → 自适应分辨率编码 → 视觉Token(动态数量) → 与文本统一处理 → LLM → 生成
                                              训练时即融合多模态

原生多模态模型从训练初期就同时处理文本和图像,而非后期拼接。

主流 VLM 对比

模型 参数量 视觉编码器 上下文 分辨率 视频 开源
GPT-4o ~200B 内置 128K 2048×2048
Claude 4 Opus ~200B 内置 200K 2048×2048
Gemini 2.5 ~300B 内置 1M 4096×4096
Qwen2.5-VL-72B 72B ViT(675M) 128K 原生4K
InternVL2.5-78B 78B InternViT(6B) 128K 4K
LLaVA-OneVision-72B 72B SigLIP(0.4B) 32K 768px
GLM-4V-Plus ~130B ViT-H 128K 1344px
Pixtral 12B 12B Pixtral-ViT 128K 1024px
Gemma-3-27B 27B SigLIP-L 128K 896px

架构深度解析

LLaVA 架构(开源标杆)

class LLaVA(nn.Module):
    def __init__(self, llm, vision_tower, mm_projector):
        self.llm = llm                    # 任意 LLM (Llama/Qwen/Mistral)
        self.vision_tower = vision_tower  # 通常是 CLIP-ViT-L/14
        self.mm_projector = mm_projector  # MLP 投影层

    def forward(self, images, input_ids):
        # 1. 视觉编码
        image_features = self.vision_tower(images)  # [batch, n_patches, 1024]
        # 2. 投影到 LLM 空间
        image_embeds = self.mm_projector(image_features)  # [batch, n_patches, 4096]
        # 3. 替换 <image> 占位符
        text_embeds = self.llm.embed_tokens(input_ids)
        # 找到 <image> token 位置,替换为 image_embeds
        merge_indices = (input_ids == IMAGE_TOKEN_ID).nonzero()
        final_embeds = scatter_replace(text_embeds, image_embeds, merge_indices)
        # 4. LLM 处理
        return self.llm(inputs_embeds=final_embeds)

Qwen2.5-VL 的动态分辨率

Qwen2.5-VL 引入了原生动态分辨率(NaViD),这是相比 LLaVA 固定分辨率的重要改进:

# 传统 LLaVA:固定 336×336,高分辨率信息丢失
# Qwen2.5-VL:动态调整 patch 数量

def dynamic_resolution(image, max_tokens=16384):
    h, w = image.size
    # 根据图像尺寸动态计算 patch 数
    # 保持长宽比,限制总 token 数
    ratio = min(max_tokens / (h * w / (28*28)), 1.0)
    new_h = int(h * ratio ** 0.5) // 28 * 28
    new_w = int(w * ratio ** 0.5) // 28 * 28
    return image.resize((new_w, new_h))

# 一张 4K 图片可能产生 ~2000 个视觉 token
# 一张小图标可能只产生 ~50 个 token
# 按需分配,避免浪费

InternVL2 的像素洗牌

InternVL2 使用 Pixel Shuffle 技术减少视觉 token 数量:

def pixel_shuffle(image_features, scale=0.5):
    # 将 4 个相邻 patch 合并为 1 个
    # [batch, h, w, dim] → [batch, h/2, w/2, dim*4]
    # 然后用线性层降维回 dim
    # 效果:视觉 token 减少 75%
    pass

性能基准

MMMU(大学级多学科视觉理解)

模型 MMMU(val) MMMU(test) 备注
Gemini 2.5 Pro 82.2 78.5 闭源最强
GPT-4o 69.1 66.3
Claude 4 Opus 73.5 70.2
Qwen2.5-VL-72B 70.2 67.8 开源最强
InternVL2.5-78B 68.1 65.3
LLaVA-OV-72B 56.8 54.1
GLM-4V-Plus 63.5 60.7

OCR 能力

模型 OCRBench 中文 OCR 表格识别 手写体
Qwen2.5-VL-72B 88.3 92.1 85.4 78.6
InternVL2.5-78B 85.7 86.3 82.1 74.3
GLM-4V-Plus 85.7 90.5 80.2 72.1
GPT-4o 87.2 85.4 88.1 81.2
Gemma-3-27B 85.7 78.3 75.6 68.5

中文 OCR 场景下 Qwen2.5-VL 和 GLM-4V-Plus 明显优于 GPT-4o。

视频理解(Video-MME)

模型 短视频(<2min) 中视频(4-15min) 长视频(30-60min)
Gemini 2.5 Pro 85.2 78.3 72.1
GPT-4o 80.3 73.5 65.4
Qwen2.5-VL-72B 76.8 70.1 62.3
InternVL2.5-78B 74.3 67.8 58.6

实战:构建文档分析系统

from openai import OpenAI
import base64

client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")

def analyze_document(image_path, task="提取所有文字内容"):
    with open(image_path, "rb") as f:
        img_b64 = base64.b64encode(f.read()).decode()

    response = client.chat.completions.create(
        model="Qwen/Qwen2.5-VL-72B-Instruct",
        messages=[{
            "role": "user",
            "content": [
                {"type": "image_url", "image_url": {
                    "url": f"data:image/png;base64,{img_b64}"
                }},
                {"type": "text", "text": f"""请执行以下任务:{task}

要求:
1. 保持原文结构
2. 表格用 Markdown 格式输出
3. 标注不确定的内容
"""}
            ]
        }],
        temperature=0.1,
        max_tokens=4096
    )
    return response.choices[0].message.content

# 复杂图表分析
chart_result = analyze_document(
    "revenue_chart.png",
    "分析这张营收图表,提取各季度数据,计算增长率,预测下季度趋势"
)

部署成本分析

开源模型部署

模型 显存(FP16) 显存(INT4) 推荐硬件 吞吐(img/s)
LLaVA-OV-7B ~14 GB ~5 GB RTX 4090 ~8
Gemma-3-4B ~8 GB ~3 GB RTX 3060 ~12
Qwen2.5-VL-7B ~16 GB ~6 GB RTX 4090 ~7
InternVL2-8B ~18 GB ~6 GB RTX 4090 ~6
Qwen2.5-VL-72B ~150 GB ~42 GB 2×A100 80GB ~2
InternVL2.5-78B ~165 GB ~45 GB 4×A100 80GB ~1.5

API 调用成本

服务商 模型 图像价格 输入 输出
OpenAI GPT-4o 1500 token/图 2.75$/M 11$/M
Google Gemini 2.5 Flash 按分辨率 0.3$/M 2.4$/M
阿里 Qwen-VL-Plus 0.8分/张 8元/M 8元/M
智谱 GLM-4V-Plus 按 token 50元/M 50元/M

Gemini 2.5 Flash 在 API 调用成本上具有压倒性优势。

选型决策树

需要视频理解?
├── 是 → 预算充足?
│        ├── 是 → Gemini 2.5 Pro API(最强视频)
│        └── 否 → Qwen2.5-VL-72B(开源最强视频)
└── 否 → 主要语言?
         ├── 中文为主 → Qwen2.5-VL-72B 或 GLM-4V-Plus
         ├── 英文为主 → GPT-4o API 或 InternVL2.5-78B
         └── 多语言 → Gemini 2.5 或 GPT-4o
              └── 需要本地部署?
                   ├── 消费级 GPU → Gemma-3-4B 或 Qwen2.5-VL-7B
                   ├── 工作站 → Qwen2.5-VL-72B (INT4)
                   └── 服务器 → InternVL2.5-78B

场景推荐

场景 最佳选择 次选
OCR/文档数字化 Qwen2.5-VL-72B GLM-4V-Plus
医疗影像分析 GPT-4o Qwen2.5-VL-72B
安防监控/视频分析 Gemini 2.5 Pro Qwen2.5-VL-72B
图表数据提取 GPT-4o Qwen2.5-VL-72B
UI 自动化 Qwen2.5-VL-72B GPT-4o
低成本部署 Gemma-3-4B Qwen2.5-VL-7B

总结

VLM 领域在 2025 年已趋于成熟。开源模型中,Qwen2.5-VL-72B 凭借原生动态分辨率和强中文 OCR 能力占据综合最优位置;InternVL2.5-78B 在英文场景表现更强;Gemma-3-4B 是轻量级部署的最佳选择。闭源模型中,Gemini 2.5 Pro 在视频理解和长文档处理上领先,GPT-4o 在通用视觉推理上依然强劲。选型的核心在于:中文场景优先选国产模型,成本敏感场景优先考虑 Gemini Flash API 或本地部署 Gemma-3。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。