ForeDrive: JEPA世界模型驱动的自动驾驶规划,89.9 PDMS的先知感知架构

论文信息

  • 标题: ForeDrive: Foresight-Guided End-to-End Autonomous Driving with a Planning-Relevant Latent World Model
  • arXiv: 2609.26299 (v2: 2026年9月23日)
  • 作者: Sinuo Wang, Zichong Gu, Yuhan Huang, Wenxin Wen 等13人
  • 页数: 9页正文 + 8页附录
  • 领域: cs.CV (计算机视觉)
  • 代码: 待发布

核心创新

ForeDrive解决了现有潜在世界模型的核心问题:预测性好≠规划有用。它学习一种与规划相关的潜在表征,并异步耦合到Diffusion Transformer (DiT) 规划器。

三大技术突破

  1. 规划相关的JEPA世界模型 — 多时间视野潜在未来表征
  2. 异步耦合 — 规划梯度更新共享编码器,stop-gradient训练预测器
  3. Trajectory-Adaptive Bias (TAB) — 将未来潜在表征注入规划器而不覆盖当前观测

性能指标

指标 ForeDrive 说明
NAVSIM v1 PDMS 89.9 纯模仿学习,无强化学习
NAVSIM v2 EPDMS 90.0 单阶段
视觉输入 仅前视单图 推理时仅需当前图像
外部评分器 不需要 纯端到端

方法详解

架构

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
当前观测 (前视图)
│
▼
┌─────────────────┐
│ 共享在线编码器 │ ← 规划梯度 + stop-gradient
│ (Online Encoder)│
└────────┬────────┘
│
┌────┴────┐
│ │
▼ ▼
┌──────┐ ┌──────────────┐
│ DiT │ │ JEPA潜在 │
│规划器│ │ 世界模型 │
│ │ │ │
│轨迹 │ │ 多视野未来 │
│生成 │ │ t+1, t+2, t+N│
└──┬───┘ └──────┬───────┘
│ │
│ ┌─────────┘
│ │
▼ ▼
┌──────────┐
│ 门控视觉 │ ← 未来潜在表征引导
│ 融合 + TAB│
│ + 状态注入│
└────┬─────┘
│
▼
轨迹输出

关键技术:TAB (Trajectory-Adaptive Bias)

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
"""
论文:ForeDrive: Foresight-Guided E2E Autonomous Driving
arXiv: 2609.26299

核心方法:规划相关潜在世界模型 + DiT规划器异步耦合
"""

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

class ForeDriveModel(nn.Module):
"""
ForeDrive: 先知感知端到端驾驶

1. 共享编码器提取当前观测表征
2. JEPA世界模型预测多视野未来
3. DiT规划器使用当前+未来表征生成轨迹
4. TAB注入未来引导而不覆盖当前
"""

def __init__(self,
latent_dim: int = 512,
num_future_horizons: int = 4,
num_dit_layers: int = 12):
super().__init__()

# 共享在线编码器
self.online_encoder = OnlineEncoder(latent_dim)

# JEPA潜在世界模型(预测未来)
self.world_model = JEPAPredictor(
latent_dim=latent_dim,
num_horizons=num_future_horizons
)

# DiT规划器(生成轨迹)
self.dit_planner = DiTPlanner(
latent_dim=latent_dim,
num_layers=num_dit_layers,
num_future_horizons=num_future_horizons
)

# 门控视觉融合
self.gated_fusion = GatedVisualFusion(latent_dim, num_future_horizons)

# 未来状态注入
self.future_status_injection = FutureStatusInject(latent_dim)

# Trajectory-Adaptive Bias
self.tab = TrajectoryAdaptiveBias(latent_dim)

def forward(self, current_obs, trajectory_queries=None):
"""
Args:
current_obs: (B, C, H, W) 当前前视图
trajectory_queries: (B, T, 2) 轨迹查询点

Returns:
trajectory: (B, T, 2) 预测轨迹
future_latents: (B, num_horizons, latent_dim) 未来表征
"""
# 1. 编码当前观测
z_current = self.online_encoder(current_obs) # (B, latent_dim)

# 2. 预测多视野未来 (JEPA, stop-gradient)
with torch.no_grad():
future_latents = self.world_model(z_current)
# future_latents: (B, num_horizons, latent_dim)

# 3. 门控融合当前+未来
fused = self.gated_fusion(z_current, future_latents)

# 4. 未来状态注入
fused = self.future_status_injection(fused, future_latents)

# 5. TAB: 轨迹自适应偏置
fused = self.tab(fused, trajectory_queries)

# 6. DiT规划器生成轨迹
trajectory = self.dit_planner(fused, trajectory_queries)

return trajectory, future_latents


class OnlineEncoder(nn.Module):
"""共享在线编码器:当前观测→潜在表征"""
def __init__(self, latent_dim):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(3, 64, 7, stride=4, padding=3),
nn.GELU(),
nn.Conv2d(64, 128, 3, stride=2, padding=1),
nn.GELU(),
nn.Conv2d(128, 256, 3, stride=2, padding=1),
nn.GELU(),
nn.Conv2d(256, 512, 3, stride=2, padding=1),
nn.GELU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(512, latent_dim)
)

def forward(self, x):
return self.conv(x)


class JEPAPredictor(nn.Module):
"""JEPA潜在世界模型:预测多视野未来"""
def __init__(self, latent_dim, num_horizons):
super().__init__()
self.num_horizons = num_horizons
self.predictors = nn.ModuleList([
nn.Linear(latent_dim, latent_dim)
for _ in range(num_horizons)
])

def forward(self, z_current):
futures = []
for i, pred in enumerate(self.predictors):
# 每个视野预测下一步、下两步...
z_future = pred(z_current)
futures.append(z_future)
return torch.stack(futures, dim=1) # (B, num_horizons, latent_dim)


class GatedVisualFusion(nn.Module):
"""门控视觉融合:当前+未来表征"""
def __init__(self, latent_dim, num_horizons):
super().__init__()
self.gates = nn.ModuleList([
nn.Sequential(
nn.Linear(latent_dim * 2, latent_dim),
nn.Sigmoid()
) for _ in range(num_horizons)
])
self.projections = nn.ModuleList([
nn.Linear(latent_dim, latent_dim) for _ in range(num_horizons)
])

def forward(self, z_current, future_latents):
B, H, D = future_latents.shape
fused = z_current # 从当前观测开始
for h in range(H):
gate = self.gates[h](
torch.cat([z_current, future_latents[:, h]], dim=-1)
)
projected = self.projections[h](future_latents[:, h])
fused = fused + gate * projected # 门控加法
return fused


class TrajectoryAdaptiveBias(nn.Module):
"""TAB: 轨迹自适应偏置"""
def __init__(self, latent_dim):
super().__init__()
self.bias_net = nn.Sequential(
nn.Linear(latent_dim + 4, latent_dim), # latent + trajectory_info
nn.GELU(),
nn.Linear(latent_dim, latent_dim)
)

def forward(self, fused, trajectory_queries):
if trajectory_queries is not None:
# 使用轨迹查询信息生成自适应偏置
traj_info = torch.cat([
trajectory_queries.mean(dim=1), # 平均位置
trajectory_queries.std(dim=1), # 方差
], dim=-1) # (B, 4)
bias = self.bias_net(torch.cat([fused, traj_info], dim=-1))
return fused + bias
return fused


class DiTPlanner(nn.Module):
"""Diffusion Transformer规划器"""
def __init__(self, latent_dim, num_layers, num_future_horizons):
super().__init__()
self.num_layers = num_layers
self.layers = nn.TransformerEncoderLayer(
d_model=latent_dim, nhead=8, dim_feedforward=latent_dim*4,
batch_first=True
)
self.transformer = nn.TransformerEncoder(self.layers, num_layers)
self.trajectory_head = nn.Linear(latent_dim, 2)

def forward(self, fused, trajectory_queries):
x = fused.unsqueeze(1) # (B, 1, D)
out = self.transformer(x) # (B, 1, D)
trajectory = self.trajectory_head(out.squeeze(1))
return trajectory


# 测试
if __name__ == "__main__":
B = 4
model = ForeDriveModel(latent_dim=512, num_future_horizons=4)

obs = torch.randn(B, 3, 224, 224)
traj_q = torch.randn(B, 10, 2)

traj, futures = model(obs, traj_q)

print(f"输入: {obs.shape}")
print(f"轨迹: {traj.shape}")
print(f"未来表征: {futures.shape}")
print(f"\n模型参数量: {sum(p.numel() for p in model.parameters()):,}")

print("\n=== 论文性能 ===")
print("NAVSIM v1 PDMS: 89.9")
print("NAVSIM v2 EPDMS: 90.0")
print("视觉输入: 仅前视单图")
print("强化学习: 不需要")
print("外部评分器: 不需要")

从自动驾驶到座舱世界模型

ForeDrive对IMS的启示

1
2
3
4
5
6
7
8
9
10
11
12
13
ForeDrive架构 → 座舱先知感知

当前观测 → 共享编码器 → JEPA未来预测 → 门控融合 → 规划

映射到座舱:
当前座舱状态 → 编码器 → 未来座舱预测 → 融合 → 安全决策

具体:
- 当前: 驾驶员PERCLOS=8%, 视线前方, 姿态正常
- 未来1: PERCLOS趋势→15% (疲劳加重)
- 未来2: 视线偏离概率 (分心可能)
- 未来3: 姿态变化 (坐姿滑移)
- 决策: 提前5分钟疲劳预警

座舱先知感知对比

维度 ForeDrive (自动驾驶) 座舱先知感知 (IMS)
当前观测 前视道路图像 DMS摄像头+雷达
未来预测 道路场景变化 驾驶员状态变化
预测视野 t+1, t+2, t+N 1min, 5min, 15min
规划输出 轨迹 警告+ADAS干预
世界模型 JEPA (视觉) JEPA (生理+行为)
输入 单前视图 多传感器融合

参考


发布时间: 2026-09-25 00:30
分类: 世界模型 | 自动驾驶 | JEPA | 规划 | 论文解读