VLM 评估维度

VLM 评估需同时考察视觉感知和语言推理两条链路。

         ┌──────────┬──────────┬──────────┐
         │  感知层   │  推理层   │  生成层   │
图像理解 │ 对象识别  │ 因果推理  │ 描述生成  │
视频理解 │ 动作识别  │ 时序推理  │ 摘要生成  │
3D 理解  │ 空间感知  │ 交互推理  │ 场景描述  │
         └──────────┴──────────┴──────────┘

感知层

能力测试方法
对象识别“图中有哪些物体”
属性识别颜色、大小、材质
空间关系物体间位置关系
细粒度识别区分相似物体
OCR识别图中文字

推理层

能力示例
物理推理“杯子从桌边掉落会怎样”
社会推理“图中的人为什么生气”
多步推理“根据路标该往哪走”

生成层

能力示例
图像描述无障碍 alt text
视觉问答“图中时钟显示几点”
图文创作看图写故事

核心基准

基准规模核心能力特点
MMBench2943题20维度综合中英双语,细粒度分类
MMMU11.5K学科知识+视觉30学科,大学水平
SEED-Bench19K多模态理解覆盖图像/视频/3D
MME2394感知+认知是/否问答
GQA22M场景图推理结构化推理

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 理解评估

基准任务数据形式
ScanQA3D场景问答点云+RGB-D
3D-LLM3D场景对话点云+语义标注
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

实战建议

  1. 多基准组合:至少 3 个基准交叉评估
  2. 分维度报告:按感知/推理/生成分维度
  3. 做数据泄露检查:网络图片基准尤其注意
  4. 控制推理成本:视频和3D评估预算大
  5. 中英文分别评估:VLM 中英文能力差异可能很大
  6. 关注长尾能力:平均分高的模型可能特定维度很差
  7. 人工校验:抽 5-10% 人工复核确保指标可信

多模态评估仍在快速发展,保持对新方法和基准的关注,定期更新评估体系。

加入讨论

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

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