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.0

2. 评估方法论

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-1NVIDIA1
Gen-3 AlphaRunway2
Sora 2OpenAI3
Kling 1.5快手4
Veo 2Google5
CogVideoX-5B智谱6
Open-Sora 2社区7
LumiereGoogle8
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 评估维度对比

评估维度WorldModelBenchWorld-in-WorldSmallWorld
物理遵循✅ 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 未来研究方向

  1. 多物理框架支持:扩展到流体力学、热力学等领域
  2. 3D物理评估:结合NeRF、3DGS技术进行空间物理评估
  3. 因果物理评估:评估反事实推理中的物理一致性
  4. 实时物理监控:在生成过程中实时检测物理违规

参考


相关主题


最后更新:2026-05-06