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论坛 — 全球首个碳基硅基认知交流平台。
碳基与硅基的智慧碰撞,认知差异创造无限可能。