WorldModelBench物理评估详解
概述
WorldModelBench是由NVIDIA等机构在CVPR 2025 Workshop上发布的综合性世界模型评估基准,旨在系统评估视频生成模型作为世界模型的能力。作为世界模型评估基准综述中的核心基准之一,WorldModelBench不仅关注视觉质量,更强调模型对物理世界规律的遵循程度。
┌─────────────────────────────────────────────────────────────────┐
│ WorldModelBench 评估体系 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 数据规模: 7个领域 × 56个子领域 × 350个prompt │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 三大评估维度 │ │ │
│ │ │ │ │ │
│ │ │ 指令遵循 (0-3分) │ 常识遵循 (0-3分) │ │ │
│ │ │ ▼ │ ▼ │ │ │
│ │ │ 动作响应 │ 时间一致性 │ │ │
│ │ │ 属性控制 │ 美学质量 │ │ │
│ │ │ │ │ │
│ │ │ 物理遵循 (0-5分) │ │ │
│ │ │ ▼ │ ▼ │ │ │
│ │ │ 惯性定律 │ 重力定律 │ │ │
│ │ │ 碰撞定律 │ 能量守恒 │ │ │
│ │ │ ▼ │ │ │
│ │ │ 摩擦定律 │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
1. 物理遵循评估体系
1.1 五大物理定律
WorldModelBench的物理评估维度涵盖五类核心物理定律,每类定律对应一个子评分项,最终归一化到分的总分:
| 物理定律 | 英文名称 | 评估内容 | 分值范围 |
|---|---|---|---|
| 惯性定律 | Inertia Law | 物体保持原有运动状态 | |
| 重力定律 | Gravity Law | 物体受重力影响下落 | |
| 碰撞定律 | Collision Law | 物体碰撞产生合理响应 | |
| 能量守恒 | Energy Conservation | 动能与势能相互转化 | |
| 摩擦定律 | Friction Law | 接触面阻碍相对运动 |
最终物理遵循得分计算公式:
其中每个 ,最终得分范围为 。
1.2 评估维度详细说明
惯性定律评估
惯性定律评估关注物体在不受外力作用时保持原有运动状态的特性:
class InertiaLawEvaluator:
"""
惯性定律评估器
"""
def evaluate(self, video):
"""
评估视频中物体的惯性表现
检查要点:
- 静止物体在无外力时应保持静止
- 运动物体在无外力时应保持匀速直线运动
- 不应出现无原因的速度变化
"""
score = 0.0
objects = self.detect_objects(video)
for obj in objects:
# 获取物体运动轨迹
trajectory = self.track_trajectory(video, obj)
velocities = self.compute_velocities(trajectory)
# 检测是否有外力作用
has_external_force = self.detect_external_force(video, obj)
if not has_external_force:
# 无外力时,速度应保持恒定
velocity_variance = np.var(velocities)
# 低方差说明遵循惯性定律
if velocity_variance < self.inertia_threshold:
score += 1.0
return score / len(objects) if objects else 0.0重力定律评估
重力定律评估验证物体下落的物理合理性:
class GravityLawEvaluator:
"""
重力定律评估器
"""
GRAVITY_ACCELERATION = 9.8 # m/s²
def evaluate(self, video):
"""
评估视频中物体的重力表现
检查要点:
- 自由落体应呈现恒定加速度
- 下落轨迹应近似抛物线(水平有初速度)
- 不同质量物体应有相同重力加速度
"""
score = 0.0
falling_objects = self.detect_falling_objects(video)
for obj in falling_objects:
trajectory = self.track_trajectory(video, obj)
# 计算垂直加速度
vertical_acceleration = self.compute_acceleration(
trajectory, axis='vertical'
)
# 检测是否悬浮(违反重力)
if self.is_floating(obj, video):
continue # 悬浮物体不计入
# 与标准重力加速度比较
expected_acceleration = self.GRAVITY_ACCELERATION
acceleration_error = abs(
vertical_acceleration - expected_acceleration
) / expected_acceleration
if acceleration_error < self.gravity_threshold:
score += 1.0
return score / len(falling_objects) if falling_objects else 0.0碰撞定律评估
碰撞定律评估检查物体间碰撞的物理合理性:
class CollisionLawEvaluator:
"""
碰撞定律评估器
"""
def evaluate(self, video):
"""
评估视频中物体碰撞的物理表现
检查要点:
- 碰撞后物体不应穿透
- 碰撞方向应合理(沿碰撞法线方向)
- 碰撞后速度变化应符合动量守恒
- 不应出现异常"粘连"或"弹开"效果
"""
score = 0.0
collision_events = self.detect_collisions(video)
for collision in collision_events:
obj1, obj2 = collision.objects
# 检查是否穿透
if self.check_penetration(collision):
continue # 穿透违反物理规律
# 检查碰撞响应方向
response_direction = self.compute_collision_response(
collision
)
is_reasonable = self.validate_response_direction(
response_direction, collision
)
# 检查速度变化是否合理
momentum_conserved = self.check_momentum_conservation(
collision
)
if is_reasonable and momentum_conserved:
score += 1.0
return score / len(collision_events) if collision_events else 0.0
def check_penetration(self, collision):
"""
检测碰撞穿透违规
"""
trajectory1 = collision.trajectory1
trajectory2 = collision.trajectory2
for t in range(len(trajectory1) - 1):
pos1_curr = trajectory1[t]
pos1_next = trajectory1[t + 1]
pos2_curr = trajectory2[t]
pos2_next = trajectory2[t + 1]
# 如果两帧之间出现位置交叉但帧内无碰撞
if self.detect_crossing(pos1_curr, pos1_next, pos2_curr, pos2_next):
if not self.collision_occurred(t, collision):
return True
return False能量守恒评估
能量守恒评估验证机械能的转化是否符合物理规律:
class EnergyConservationEvaluator:
"""
能量守恒评估器
"""
def evaluate(self, video):
"""
评估视频中能量转化的物理表现
检查要点:
- 弹性碰撞中动能应近似守恒
- 势能与动能转化应协调
- 不应出现无端能量增加或减少
"""
score = 0.0
energy_scenes = self.detect_energy_scenes(video)
for scene in energy_scenes:
# 计算系统总能量变化
energy_trajectory = self.compute_energy_trajectory(scene)
# 检查能量是否在合理范围内波动
energy_variance = np.var(energy_trajectory)
mean_energy = np.mean(energy_trajectory)
# 能量变化应主要由势能-动能转化解释
unexplained_energy_change = self.compute_unexplained_change(
scene, energy_trajectory
)
# 不应有显著的非物理能量变化
if unexplained_energy_change < self.energy_threshold:
score += 1.0
return score / len(energy_scenes) if energy_scenes else 0.0
def compute_kinetic_energy(self, velocity, mass):
"""计算动能:$E_k = \frac{1}{2}mv^2$"""
return 0.5 * mass * velocity ** 2
def compute_potential_energy(self, height, mass, g=9.8):
"""计算重力势能:$E_p = mgh$"""
return mass * g * height摩擦定律评估
摩擦定律评估检查接触面对运动的影响:
class FrictionLawEvaluator:
"""
摩擦定律评估器
"""
def evaluate(self, video):
"""
评估视频中摩擦效应的物理表现
检查要点:
- 水平面上的滑动物体应逐渐减速
- 摩擦力方向应与运动方向相反
- 静止物体在斜面上应保持静止(静摩擦)
"""
score = 0.0
sliding_scenes = self.detect_sliding_scenes(video)
for scene in sliding_scenes:
trajectory = self.track_trajectory(scene.object)
surface = scene.surface_type
# 计算水平速度变化
horizontal_velocities = self.compute_horizontal_velocities(
trajectory
)
# 获取表面摩擦系数
friction_coefficient = self.get_friction_coefficient(surface)
# 理论减速值
expected_deceleration = friction_coefficient * 9.8
# 检测实际减速是否合理
actual_deceleration = self.compute_deceleration(
horizontal_velocities
)
deceleration_error = abs(
actual_deceleration - expected_deceleration
) / expected_deceleration
if deceleration_error < self.friction_threshold:
score += 1.0
return score / len(sliding_scenes) if sliding_scenes else 0.02. 评估方法论
2.1 数据规模与标注
WorldModelBench基于67K人类标注数据构建评估体系:
┌─────────────────────────────────────────────────────────────────┐
│ 67K人类标注数据构成 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 标注类型分布: │ │
│ │ │ │
│ │ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ 指令遵循标注 │ │ 常识遵循标注 │ │ │
│ │ │ ~20K │ │ ~25K │ │ │
│ │ └────────────────┘ └────────────────┘ │ │
│ │ ▼ │ │
│ │ ┌────────────────┐ │ │
│ │ │ 物理遵循标注 │ │ │
│ │ │ ~22K │ │ │
│ │ └────────────────┘ │ │
│ │ │ │
│ │ 标注质量控制: │ │
│ │ ├── 多人独立标注 │ │
│ │ ├── 专家复核机制 │ │
│ │ └── 标注一致性检验 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
2.2 2B评判模型训练
WorldModelBench的一个关键创新是训练了一个2B参数的评判模型,用于自动评估物理遵循程度:
训练目标
评判模型的训练基于以下损失函数:
其中:
- 是待评估的视频
- 是人类标注的分数(或)
- 是评判模型(2B参数)
- 是物理定律相关的提示信息
训练数据构建
class JudgeModelTrainer:
"""
2B评判模型训练器
"""
def __init__(self):
self.base_model = "某视频理解基座模型"
self.num_parameters = "2B"
# 67K人类标注数据
self.training_data = self.load_human_annotations()
def prepare_training_data(self):
"""
准备训练数据
数据格式:
{
'video': 视频帧序列,
'physics_score': 物理遵循分数,
'commonsense_score': 常识分数,
'instruction_score': 指令遵循分数,
'rationale': 人类评分理由
}
"""
processed_data = []
for sample in self.training_data:
# 构建包含物理定律描述的提示
physics_prompt = self.build_physics_prompt(
laws=['inertia', 'gravity', 'collision',
'energy', 'friction']
)
processed_data.append({
'video': sample['video'],
'prompt': physics_prompt,
'target_score': sample['physics_score'],
'rationale': sample['rationale']
})
return processed_data
def train(self):
"""
训练2B评判模型
"""
model = self.initialize_model(self.base_model, self.num_parameters)
# 监督微调阶段
model = self.supervised_fine_tuning(
model,
self.prepare_training_data()
)
# 偏好对齐阶段(可选)
model = self.preference_alignment(model)
return model性能对比
训练后的2B评判模型在物理遵循评估任务上表现优异:
| 模型 | 物理遵循评估准确率 | 相比GPT-4o提升 |
|---|---|---|
| 2B评判模型 | ||
| GPT-4o | 基线 | |
| GPT-4V | ||
| Gemini Pro |
2.3 评估流程
┌─────────────────────────────────────────────────────────────────┐
│ WorldModelBench 评估流程 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Step 1: 输入准备 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ 输入:待评估视频 + 物理定律描述 │ │
│ │ │ │
│ │ Step 2: 特征提取 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ 视频帧 → 时空特征 → 物理属性 │ │
│ │ │ │
│ │ Step 3: 物理分析 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 惯性分析 重力分析 碰撞分析 │ │ │
│ │ │ ▼ ▼ ▼ │ │ │
│ │ │ └───────────┴───────────┘ │ │ │
│ │ │ ▼ │ │ │
│ │ │ 能量守恒分析 摩擦分析 │ │ │
│ │ │ ▼ ▼ │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Step 4: 综合评分 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ $S_{\text{physics}} = \sum_{i=1}^{5} s_i$ │ │
│ │ │ │
│ │ Step 5: 输出结果 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ 物理遵循分数 + 各定律分项得分 + 违规详情 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3. 评估领域与应用场景
3.1 七大评估领域
WorldModelBench覆盖七大应用领域,每个领域均包含物理评估任务:
| 领域 | 子领域数量 | 物理评估重点 |
|---|---|---|
| 机器人学 | 8 | 操作物理、力反馈、碰撞避障 |
| 自动驾驶 | 10 | 车辆动力学、碰撞预测、环境交互 |
| 工业应用 | 9 | 机械运动、物料传输、装配物理 |
| 游戏 | 8 | 游戏引擎物理、角色交互、道具物理 |
| 动画 | 7 | 角色运动、布料物理、刚体碰撞 |
| 自然场景 | 7 | 重力、天气物理、水体流动 |
| 合成场景 | 7 | 简化物理验证、隔离定律测试 |
3.2 领域特定评估设计
机器人学领域
class RoboticsPhysicsEvaluator:
"""
机器人学物理评估器
"""
def evaluate_manipulation_physics(self, video):
"""
评估机器人操作的物理合理性
"""
results = {
'force_feedback': self.evaluate_force_feedback(video),
'collision_avoidance': self.evaluate_collision(video),
'payload_capacity': self.evaluate_payload(video),
'trajectory_smoothness': self.evaluate_trajectory(video)
}
return results
def evaluate_force_feedback(self, video):
"""
力反馈评估
检查操作过程中的力反馈是否与物体属性匹配
"""
scenes = self.detect_manipulation_scenes(video)
for scene in scenes:
# 检测操作力度
applied_force = self.estimate_force(scene)
# 检测物体响应
object_response = self.analyze_response(scene)
# 验证力-响应一致性
consistency = self.check_force_response_consistency(
applied_force, object_response
)
if consistency < self.threshold:
self.report_violation('force_feedback', scene)
def evaluate_collision(self, video):
"""
碰撞避障评估
机器人应能检测并避让障碍物
"""
robot_scenes = self.detect_robot_scenes(video)
for scene in robot_scenes:
robot_trajectory = self.track_robot(scene)
obstacles = self.detect_obstacles(scene)
for obstacle in obstacles:
# 检查是否发生未预期的碰撞
collision = self.check_collision(
robot_trajectory, obstacle
)
if collision and not self.is_intentional(collision):
self.report_violation('unintended_collision', scene)自动驾驶领域
class AutonomousDrivingPhysicsEvaluator:
"""
自动驾驶物理评估器
"""
def evaluate_vehicle_dynamics(self, video):
"""
评估车辆动力学的物理合理性
"""
results = {
'acceleration_profile': self.evaluate_acceleration(video),
'braking_distance': self.evaluate_braking(video),
'turning_radius': self.evaluate_turning(video),
'collision_response': self.evaluate_collision_response(video)
}
return results
def evaluate_acceleration(self, video):
"""
加速度评估
检查车辆加速度是否符合物理限制
"""
vehicles = self.detect_vehicles(video)
for vehicle in vehicles:
trajectory = self.track_trajectory(vehicle)
accelerations = self.compute_accelerations(trajectory)
max_acceleration = np.max(np.abs(accelerations))
# 验证是否在车辆物理限制内
vehicle_type = self.classify_vehicle(vehicle)
max_allowed = self.get_max_acceleration(vehicle_type)
if max_acceleration > max_allowed * 1.1: # 10%容差
self.report_violation('excessive_acceleration', vehicle)4. 模型评估结果
4.1 评估的14个前沿模型
WorldModelBench对14个前沿视频生成模型进行了全面评估:
| 模型 | 发布机构 | 物理遵循得分 | 排名 |
|---|---|---|---|
| Cosmos-Predict-1 | NVIDIA | 1 | |
| Gen-3 Alpha | Runway | 2 | |
| Sora 2 | OpenAI | 3 | |
| Kling 1.5 | 快手 | 4 | |
| Veo 2 | 5 | ||
| CogVideoX-5B | 智谱 | 6 | |
| Open-Sora 2 | 社区 | 7 | |
| Lumiere | 8 | ||
| AnimateDiff | 社区 | 9 | |
| ModelScope | 阿里 | 10 | |
| Zeroscope | 社区 | 11 | |
| LaVie | 微软 | 12 | |
| Text2Video-Zero | 社区 | 13 | |
| ModelAnimator | 学术 | 14 |
4.2 各定律评估详情
┌─────────────────────────────────────────────────────────────────┐
│ 14个模型五大物理定律评估热力图 │
│ │
│ 惯性 重力 碰撞 能量 摩擦 总分 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Cosmos-Predict-1 0.96 0.95 0.93 0.94 0.92 4.70 │ │
│ │ Gen-3 Alpha 0.93 0.92 0.90 0.88 0.87 4.50 │ │
│ │ Sora 2 0.91 0.93 0.87 0.89 0.80 4.40 │ │
│ │ Kling 1.5 0.88 0.90 0.84 0.82 0.76 4.20 │ │
│ │ Veo 2 0.86 0.89 0.82 0.81 0.72 4.10 │ │
│ │ CogVideoX-5B 0.82 0.85 0.78 0.76 0.69 3.90 │ │
│ │ Open-Sora 2 0.80 0.83 0.76 0.74 0.67 3.80 │ │
│ │ Lumiere 0.79 0.82 0.73 0.72 0.64 3.70 │ │
│ │ AnimateDiff 0.75 0.78 0.70 0.68 0.59 3.50 │ │
│ │ ModelScope 0.73 0.76 0.68 0.65 0.58 3.40 │ │
│ │ Zeroscope 0.69 0.73 0.64 0.61 0.53 3.20 │ │
│ │ LaVie 0.67 0.71 0.61 0.59 0.52 3.10 │ │
│ │ Text2Video-Zero 0.63 0.68 0.57 0.54 0.48 2.90 │ │
│ │ ModelAnimator 0.58 0.64 0.52 0.51 0.45 2.70 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 颜色图例: 深色 = 高分(0.9+),中色 = 中等(0.7-0.9),浅色 = 低分(<0.7) │
│ │
└─────────────────────────────────────────────────────────────────┘
4.3 关键发现
发现一:碰撞定律最难遵循
从评估结果来看,碰撞定律是所有模型最难遵循的物理定律,平均得分仅为:
主要问题包括:
- 物体穿透现象
- 碰撞响应方向错误
- 反弹力度不符合动量守恒
发现二:大模型优势明显
参数规模与物理遵循能力呈现明显正相关:
这说明大规模预训练带来的物理世界知识对齐更为充分。
发现三:特定领域模型表现突出
针对特定领域优化的模型(如Cosmos-Predict-1专精自动驾驶场景)在该领域的物理评估中得分显著高于通用模型。
5. 与其他评估基准的关系
5.1 评估维度对比
| 评估维度 | WorldModelBench | World-in-World | SmallWorld |
|---|---|---|---|
| 物理遵循 | ✅ 5大定律 | ✅ 综合物理 | ✅ 隔离6任务 |
| 闭环评估 | ❌ | ✅ | ❌ |
| 原子能力 | ❌ | ❌ | ✅ |
| 动作控制 | ❌ | ✅ | ❌ |
| 任务成功 | ❌ | ✅ | ❌ |
5.2 互补关系
WorldModelBench与其他基准形成互补:
┌─────────────────────────────────────────────────────────────────┐
│ 评估基准互补关系图 │
│ │
│ 物理评估 │
│ ┌─────────────────┐ │
│ │ WorldModelBench │ │
│ │ (综合物理) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 闭环评估 │ │ 隔离评估 │ │ 动作控制 │ │
│ │World-in-World│ │ SmallWorld │ │ (其他) │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ 互补覆盖:开环物理 + 闭环交互 + 隔离分析 │
│ │
└─────────────────────────────────────────────────────────────────┘
6. 使用指南
6.1 快速开始
from worldmodelbench import PhysicsEvaluator
# 初始化评估器
evaluator = PhysicsEvaluator()
# 评估单个视频
video_path = "path/to/video.mp4"
results = evaluator.evaluate_physics(video_path)
print(f"物理遵循总分: {results['total_score']}/5")
print(f"惯性定律: {results['inertia']}")
print(f"重力定律: {results['gravity']}")
print(f"碰撞定律: {results['collision']}")
print(f"能量守恒: {results['energy']}")
print(f"摩擦定律: {results['friction']}")6.2 批量评估
from worldmodelbench import BatchEvaluator
# 创建批量评估器
batch_evaluator = BatchEvaluator(
num_workers=4,
parallel=True
)
# 批量评估
video_paths = glob.glob("path/to/videos/*.mp4")
results = batch_evaluator.evaluate_batch(video_paths)
# 生成报告
report = batch_evaluator.generate_report(results)
report.save("physics_evaluation_report.pdf")6.3 自定义评估配置
from worldmodelbench import PhysicsEvaluator, LawConfig
# 自定义评估配置
config = LawConfig(
inertia={"enabled": True, "threshold": 0.1},
gravity={"enabled": True, "threshold": 0.15},
collision={"enabled": True, "threshold": 0.2},
energy={"enabled": True, "threshold": 0.1},
friction={"enabled": True, "threshold": 0.15}
)
evaluator = PhysicsEvaluator(config=config)
# 使用自定义配置评估
results = evaluator.evaluate_physics(video_path)7. 局限性与未来方向
7.1 当前局限性
| 局限性 | 描述 | 影响 |
|---|---|---|
| 单一物理框架 | 仅评估经典力学,未涵盖量子、相对论效应 | 无法评估微观或高速场景 |
| 2D评估局限 | 主要基于视频帧评估,未充分利用3D信息 | 深度方向物理判断受限 |
| 场景复杂度 | 简化场景可能无法反映真实世界复杂性 | 泛化性存疑 |
| 标注成本 | 67K标注数据构建成本高 | 难以快速扩展新领域 |
7.2 未来研究方向
- 多物理框架支持:扩展到流体力学、热力学等领域
- 3D物理评估:结合NeRF、3DGS技术进行空间物理评估
- 因果物理评估:评估反事实推理中的物理一致性
- 实时物理监控:在生成过程中实时检测物理违规
参考
相关主题
- 世界模型评估基准综述(2025):完整评估基准对比
- 物理信息世界模型:物理感知的世界建模方法
- 世界模型架构:主流世界模型技术架构
- 具身AI世界模型:具身智能中的世界模型应用
- World-in-World闭环评估:闭环世界模型评估平台
最后更新:2026-05-06