Driver-WM 论文解读:L2/L3 接管时间预测的世界模型新范式

Driver-WM 论文解读:L2/L3 接管时间预测的世界模型新范式

论文信息


核心创新

Driver-WM 是首个驾驶员中心的潜在世界模型

  • 双流架构: 外部交通流 + 内部驾驶员状态
  • 因果注入: 外部环境动态调制内部驾驶员状态
  • 多步预测: 5 帧观测 → 5 帧未来骨骼轨迹
  • 统一解码: 几何轨迹 + 语义标签(行为/情绪)

问题定义

传统方法的局限

方法 问题
DMS 识别 仅识别当前状态,无法预测未来响应
环境世界模型 仅预测外部环境,忽略驾驶员动态
接管时间预测 单一标量,无法解释驾驶员行为多样性

Driver-WM 的解决方案

预测驾驶员结构化响应:

  • 姿态轨迹
  • 手部运动
  • 注意力语义
  • 响应时序

方法详解

1. 整体架构

graph TD
    A[输入] --> B[冻结 Qwen3-VL 编码器]
    B --> C[双流潜在状态]
    
    C --> D[外部交通流 z_ext]
    C --> E[内部驾驶员流 z_int]
    
    D --> F[因果注入模块]
    E --> F
    
    F --> G[内部状态更新]
    G --> H[骨骼轨迹解码]
    G --> I[语义标签解码]
    
    H --> J[未来驾驶员轨迹]
    I --> K[行为/情绪预测]

2. 因果注入机制

核心创新:门控因果注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
"""
Driver-WM 门控因果注入机制

核心思想:
外部环境信号不均匀影响驾驶员,通过门控调节注入强度
"""

import torch
import torch.nn as nn
import torch.nn.functional as F

class GatedCausalInjection(nn.Module):
"""
门控因果注入模块

Args:
hidden_dim: 潜在空间维度(默认2048)

Driver-WM 方法:
内部状态更新 = (1 - gate) * 内部预测 + gate * 外部上下文
gate 由外部状态动态学习,时间变化
"""

def __init__(self, hidden_dim: int = 2048):
super().__init__()

# 门控网络(学习注入强度)
self.gate_mlp = nn.Sequential(
nn.Linear(hidden_dim, hidden_dim // 4),
nn.ReLU(),
nn.Linear(hidden_dim // 4, hidden_dim),
nn.Sigmoid() # gate ∈ (0, 1)
)

# 上下文交叉注意力
self.context_cross_attn = nn.MultiheadAttention(
embed_dim=hidden_dim,
num_heads=8,
batch_first=True
)

# 内部状态预测器
self.internal_transition = nn.Sequential(
nn.Linear(hidden_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, hidden_dim)
)

def forward(
self,
z_int_history: torch.Tensor, # 内部历史, shape=(B, T, D)
z_ext_history: torch.Tensor # 外部历史, shape=(B, T, D)
) -> torch.Tensor:
"""
因果注入前向传播

Args:
z_int_history: 内部状态历史
z_ext_history: 外部状态历史

Returns:
z_int_next: 下一步内部状态

Driver-WM 因果注入:
1. 从外部历史计算上下文摘要
2. 从内部历史预测下一状态
3. 学习门控调节注入强度
4. 组合得到更新状态
"""
# 1. 上下文摘要(交叉注意力)
# 外部 → 内部 方向
context_summary, _ = self.context_cross_attn(
query=z_int_history, # 内部查询
key=z_ext_history, # 外部键
value=z_ext_history # 外部值
)

# 取最后时刻的上下文
m_t = context_summary[:, -1, :] # shape=(B, D)

# 2. 内部状态预测
z_int_last = z_int_history[:, -1, :] # 最后时刻内部状态
z_int_pred = self.internal_transition(z_int_last)

# 3. 门控学习(基于外部状态)
z_ext_last = z_ext_history[:, -1, :]
gate = self.gate_mlp(z_ext_last) # shape=(B, D), ∈ (0, 1)

# 4. 因果注入更新
# z_{t+1} = (1 - g) * z_pred + g * m
z_int_next = (1 - gate) * z_int_pred + gate * m_t

return z_int_next

# 实际测试代码
if __name__ == "__main__":
# 模拟输入
batch_size = 4
seq_len = 5 # 观测5帧
hidden_dim = 2048

# 模拟潜在状态
z_int_history = torch.randn(batch_size, seq_len, hidden_dim)
z_ext_history = torch.randn(batch_size, seq_len, hidden_dim)

# 因果注入
injection_module = GatedCausalInjection(hidden_dim)
z_int_next = injection_module(z_int_history, z_ext_history)

print(f"内部状态更新: {z_int_next.shape}")
print(f"门控范围: [{injection_module.gate_mlp(z_ext_history[:, -1, :]).min():.3f}, {injection_module.gate_mlp(z_ext_history[:, -1, :]).max():.3f}]")

3. 骨骼轨迹解码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
Driver-WM 骨骼轨迹解码器

使用 ST-GCN(时空图卷积网络)解码骨骼轨迹
"""

import torch
import torch.nn as nn

class SkeletonDecoder(nn.Module):
"""
骨骼轨迹解码器(ST-GCN)

Args:
latent_dim: 潜在空间维度(2048)
num_joints: 骨骼关键点数(HALPE-136)

Driver-WM 方法:
从内部潜在状态解码为 136 个 2D 骨骼关键点
"""

def __init__(self, latent_dim: int = 2048, num_joints: int = 136):
super().__init__()

self.num_joints = num_joints

# 潜在状态 → 骨骼坐标
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 1024),
nn.ReLU(),
nn.Linear(1024, 512),
nn.ReLU(),
nn.Linear(512, num_joints * 2), # 2D坐标
nn.Sigmoid() # 归一化到 [0, 1]
)

def forward(self, z_int: torch.Tensor) -> torch.Tensor:
"""
解码骨骼轨迹

Args:
z_int: 内部潜在状态, shape=(B, D)

Returns:
skeleton: 骨骼关键点, shape=(B, K, 2)
"""
# 解码
skeleton_flat = self.decoder(z_int) # shape=(B, K*2)

# 重塑为 (B, K, 2)
skeleton = skeleton_flat.view(-1, self.num_joints, 2)

return skeleton

实验结果

1. AIDE 数据集性能

模型 MPJPE ↓ d-nMPJPE ↓ PCK@0.05 DBR F1 ↑ TCR F1 ↑
Zero-Velocity 52.89px 2.40% 85.95% 8.27% -
MotionBERT 73.51px 3.34% 78.01% 56.70% -
Driver-WM(主模型) 71.47px 3.24% 71.66% 68.07% 90.15%

2. 高运动场景性能

High-Motion 子集(Top 10% 高动态片段):

模型 h=1 MPJPE h=3 MPJPE h=5 MPJPE
Zero-Velocity 52px 89px 178.62px
MotionBERT 48px 75px 155.82px
Driver-WM 45px 68px 138.03px

关键发现:

  • Zero-Velocity 在高运动场景长时预测严重退化
  • Driver-WM 显著降低长时预测误差(h=5: 138 vs 178px)

3. 干预实验

干预方式 ΔAll ΔHM 说明
无外部上下文 +12.95px +8.69px 外部上下文必需
禁用注入(gate=0) +89.64px +62.23px 注入路径关键
强制注入(gate=1) +26.73px +11.48px 需学习门控

核心洞察

1. 为什么预测骨骼轨迹而非接管时间?

作者回答:

“两个驾驶员可能具有相同的接管时间,但行为截然不同:一个平滑恢复控制,另一个犹豫或过度修正。Driver-WM 预测响应的结构:姿态、手部运动、注意力语义及其时序。”

2. Driver-WM 解锁的能力

  • 风险感知规划: 比较候选操作的驾驶员响应
  • 接管时序分析: 预测驾驶员何时、如何响应
  • HMI 自适应: 根据预测响应调整界面

与中国 L3 标准对接

10 秒接管规则的挑战

中国 L3 标准(2027)要求:

  • 系统必须预留 ≥10秒 接管时间
  • 驾驶员必须在 10秒内 恢复控制

Driver-WM 的应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Driver-WM + L3 接管时间预测

结合骨骼轨迹预测和接管就绪评估
"""

def predict_takeover_readiness(
skeleton_trajectory: np.ndarray, # Driver-WM 输出
behavior_prob: Dict[str, float], # Driver-WM 输出
threshold_time: float = 10.0
) -> Tuple[float, str]:
"""
预测接管就绪时间

Args:
skeleton_trajectory: 预测的骨骼轨迹
behavior_prob: 行为概率分布
threshold_time: 接管时间阈值(秒)

Returns:
takeover_time: 预测接管时间
readiness: 就绪状态

L3 应用:
如果预测接管时间 >10s,系统应提前警告
"""
# 骨骼轨迹分析
hand_motion = np.std(skeleton_trajectory[:, 20:30, :]) # 手部运动
head_motion = np.std(skeleton_trajectory[:, 0:5, :]) # 头部运动

# 行为分析
normal_prob = behavior_prob.get('normal', 0.0)
distraction_prob = behavior_prob.get('distraction', 0.0)

# 接管时间预测(简化模型)
base_time = 2.5 # 基线

# 手部运动增加 → 接管时间减少
hand_bonus = max(0, 2.0 - hand_motion * 10)

# 分心概率增加 → 接管时间增加
distraction_penalty = distraction_prob * 5.0

takeover_time = base_time + hand_bonus + distraction_penalty

# 就绪判定
if takeover_time <= threshold_time:
readiness = "ready"
elif takeover_time <= threshold_time + 5.0:
readiness = "conditional"
else:
readiness = "unready"

return takeover_time, readiness

IMS 开发优先级

功能 Driver-WM 支持 IMS 优先级 开发难度
骨骼轨迹预测 ✅ 核心能力 P1
行为识别 ✅ 辅助输出 P0
接管时间预测 ⚠️ 需后处理 P0
风险评估 ✅ 风险排序 P1

数据来源


IMS 开发启示

  1. 世界模型新范式: 驾驶员预测应建模为交通条件下的动态演化,而非静态识别
  2. 双流架构必要性: 外部交通流 → 内部驾驶员流的因果注入是关键
  3. 骨骼轨迹优于标量: 结构化预测提供更丰富的驾驶员响应信息
  4. 门控注入机制: 外部信号应通过学习的门控调节,而非简单融合
  5. L3 接管评估: Driver-WM 可直接用于中国 L3 标准 10 秒接管时间预测

总结: Driver-WM 提出了驾驶员中心的世界模型新范式,通过双流架构和门控因果注入,预测交通条件下的驾驶员骨骼轨迹和行为语义。在高运动场景显著优于传统方法,为 L2/L3 接管时间预测提供了结构化响应预测能力。核心创新包括:冻结 VLM 编码器、门控因果注入、骨骼轨迹解码。IMS 开发应借鉴 Driver-WM 的双流架构和因果注入机制,构建交通条件下的驾驶员响应预测模型,直接对接中国 L3 标准 10 秒接管规则。


Driver-WM 论文解读:L2/L3 接管时间预测的世界模型新范式
https://dapalm.com/2026/07/10/2026-07-10-driver-wm-paper-review-l2-l3-takeover-time-prediction-world-model/
作者
Mars
发布于
2026年7月10日
许可协议