VLM 评估维度#
VLM 评估需同时考察视觉感知和语言推理两条链路。
┌──────────┬──────────┬──────────┐
│ 感知层 │ 推理层 │ 生成层 │
图像理解 │ 对象识别 │ 因果推理 │ 描述生成 │
视频理解 │ 动作识别 │ 时序推理 │ 摘要生成 │
3D 理解 │ 空间感知 │ 交互推理 │ 场景描述 │
└──────────┴──────────┴──────────┘
感知层#
| 能力 | 测试方法 |
|---|
| 对象识别 | “图中有哪些物体” |
| 属性识别 | 颜色、大小、材质 |
| 空间关系 | 物体间位置关系 |
| 细粒度识别 | 区分相似物体 |
| OCR | 识别图中文字 |
推理层#
| 能力 | 示例 |
|---|
| 物理推理 | “杯子从桌边掉落会怎样” |
| 社会推理 | “图中的人为什么生气” |
| 多步推理 | “根据路标该往哪走” |
生成层#
| 能力 | 示例 |
|---|
| 图像描述 | 无障碍 alt text |
| 视觉问答 | “图中时钟显示几点” |
| 图文创作 | 看图写故事 |
核心基准#
| 基准 | 规模 | 核心能力 | 特点 |
|---|
| MMBench | 2943题 | 20维度综合 | 中英双语,细粒度分类 |
| MMMU | 11.5K | 学科知识+视觉 | 30学科,大学水平 |
| SEED-Bench | 19K | 多模态理解 | 覆盖图像/视频/3D |
| MME | 2394 | 感知+认知 | 是/否问答 |
| GQA | 22M | 场景图推理 | 结构化推理 |
MMBench 能力维度#
├── 粗粒度感知 (对象存在/计数/场景分类)
├── 细粒度感知 (属性/空间关系/OCR)
├── 推理 (物理/社会/逻辑)
└── 关系 (图内/跨图)
MME 评估#
# Yes/No 问答,避免开放式生成的评分问题
def evaluate_mme(model, dataset):
correct = 0
for item in dataset:
for question, answer in item['questions']:
pred = model.answer(item['image'], question)
if normalize(pred) == answer.lower():
correct += 1
return correct / len(dataset)
视频理解评估#
| 维度 | 基准 |
|---|
| 时序理解 | MVBench, TempCompass |
| 动作识别 | Kinetics |
| 视频问答 | NExT-QA, EgoSchema |
| 长视频理解 | LongVideoBench |
视频评估策略#
def evaluate_video(model, video_path, questions):
for q in questions:
if q['type'] == 'temporal':
frames = sample_frames(video_path, fps=2) # 密集采帧
elif q['type'] == 'action':
frames = sample_keyframes(video_path, n=16) # 关键帧
else:
frames = sample_uniform(video_path, n=8) # 均匀采样
answer = model.answer(frames, q['question'])
视频评估挑战#
- 帧采样偏差:均匀采帧可能错过关键事件
- 时序长度:短视频和长视频需不同策略
- 计算成本:视频编码比图像贵 100x+
3D 理解评估#
| 基准 | 任务 | 数据形式 |
|---|
| ScanQA | 3D场景问答 | 点云+RGB-D |
| 3D-LLM | 3D场景对话 | 点云+语义标注 |
| SpatialBench | 空间关系推理 | 合成3D场景 |
评估陷阱#
1. 数据泄露#
def check_contamination(train_data, test_data):
from imagehash import phash
train_hashes = {phash(img) for img in train_data}
leaked = sum(1 for img in test_data if phash(img) in train_hashes)
return leaked / len(test_data)
2. 位置偏差#
| 偏差 | 规避方法 |
|---|
| 位置A偏好 | 随机化选项顺序 |
| 末位偏好 | 选项排列组合测试 |
| 长度偏好 | 控制选项长度一致 |
3. 语言先验作弊#
def test_vision_dependency(model, questions):
with_image = [model.answer(q['image'], q['question']) for q in questions]
without_image = [model.answer(None, q['question']) for q in questions]
gap = accuracy(with_image) - accuracy(without_image)
if gap < 0.1:
print("警告:模型可能未有效利用视觉信息")
4. 指标陷阱#
| 陷阱 | 解决方案 |
|---|
| 精确匹配过严 | 用语义相似度或LLM裁判 |
| BLEU/ROUGE不适用 | 用 CIDEr 或 SPICE |
| 多选准确率虚高 | 报告随机基线+normalized gain |
实战建议#
- 多基准组合:至少 3 个基准交叉评估
- 分维度报告:按感知/推理/生成分维度
- 做数据泄露检查:网络图片基准尤其注意
- 控制推理成本:视频和3D评估预算大
- 中英文分别评估:VLM 中英文能力差异可能很大
- 关注长尾能力:平均分高的模型可能特定维度很差
- 人工校验:抽 5-10% 人工复核确保指标可信
多模态评估仍在快速发展,保持对新方法和基准的关注,定期更新评估体系。#
加入讨论#
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
碳基与硅基的智慧碰撞,认知差异创造无限可能。