对应:Drive-WM 精读。本页依据论文 §3--5、附录 B--D,以及 ConvNeXt、CLIP、Latent Diffusion、CVT、FID/FVD 原始论文。解释和教学例子不等于实验环境运行证据;本次没有执行模型。
先明确整套方法的角色
规划器先提出轨迹;Drive-WM 根据当前场景与候选动作生成未来多相机视频;外部感知模型从生成视频中预测道路和车辆;奖励规则选候选。世界模型还可单独接布局、文本等条件做生成。
"生成损失的目标来自自动加噪"不等于整套系统无需标签。条件图、预训练模型、候选规划器、评价真值是不同的信息来源,必须分别分析。
1.1 它们都是相机方向,不是两种不同传感器
六路相机沿车身周围排列,论文例子分成两组:
- 参考组:F 前视、BL 左后视、BR 右后视。
- 中间/拼接组:FL 左前视、B 后视、FR 右前视。
它们交错排列,选这一组的动机是先生成一组不要求严格重叠对齐的参考视频,再用它们约束相邻中间视角。不是"前视天然比侧视更可靠",换一套相机布置可以有不同分组。
1.2 实际顺序
- 联合生成 F、BL、BR 的未来视频。
- 为 FL 提供 F 与 BL 的视频作条件,并提供 FL 自己的先前上下文。
- 为 B 提供 BL 与 BR;为 FR 提供 BR 与 F。
- 模型生成三个中间视角,得到完整六路视频。
#mermaid-svg-GdxmAS9sTc4GRC8r{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GdxmAS9sTc4GRC8r .error-icon{fill:#552222;}#mermaid-svg-GdxmAS9sTc4GRC8r .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GdxmAS9sTc4GRC8r .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GdxmAS9sTc4GRC8r .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GdxmAS9sTc4GRC8r .marker.cross{stroke:#333333;}#mermaid-svg-GdxmAS9sTc4GRC8r svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GdxmAS9sTc4GRC8r p{margin:0;}#mermaid-svg-GdxmAS9sTc4GRC8r .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster-label text{fill:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster-label span{color:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster-label span p{background-color:transparent;}#mermaid-svg-GdxmAS9sTc4GRC8r .label text,#mermaid-svg-GdxmAS9sTc4GRC8r span{fill:#333;color:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r .node rect,#mermaid-svg-GdxmAS9sTc4GRC8r .node circle,#mermaid-svg-GdxmAS9sTc4GRC8r .node ellipse,#mermaid-svg-GdxmAS9sTc4GRC8r .node polygon,#mermaid-svg-GdxmAS9sTc4GRC8r .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GdxmAS9sTc4GRC8r .rough-node .label text,#mermaid-svg-GdxmAS9sTc4GRC8r .node .label text,#mermaid-svg-GdxmAS9sTc4GRC8r .image-shape .label,#mermaid-svg-GdxmAS9sTc4GRC8r .icon-shape .label{text-anchor:middle;}#mermaid-svg-GdxmAS9sTc4GRC8r .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GdxmAS9sTc4GRC8r .rough-node .label,#mermaid-svg-GdxmAS9sTc4GRC8r .node .label,#mermaid-svg-GdxmAS9sTc4GRC8r .image-shape .label,#mermaid-svg-GdxmAS9sTc4GRC8r .icon-shape .label{text-align:center;}#mermaid-svg-GdxmAS9sTc4GRC8r .node.clickable{cursor:pointer;}#mermaid-svg-GdxmAS9sTc4GRC8r .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GdxmAS9sTc4GRC8r .arrowheadPath{fill:#333333;}#mermaid-svg-GdxmAS9sTc4GRC8r .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GdxmAS9sTc4GRC8r .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GdxmAS9sTc4GRC8r .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GdxmAS9sTc4GRC8r .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GdxmAS9sTc4GRC8r .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GdxmAS9sTc4GRC8r .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster text{fill:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r .cluster span{color:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GdxmAS9sTc4GRC8r .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GdxmAS9sTc4GRC8r rect.text{fill:none;stroke-width:0;}#mermaid-svg-GdxmAS9sTc4GRC8r .icon-shape,#mermaid-svg-GdxmAS9sTc4GRC8r .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GdxmAS9sTc4GRC8r .icon-shape p,#mermaid-svg-GdxmAS9sTc4GRC8r .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GdxmAS9sTc4GRC8r .icon-shape .label rect,#mermaid-svg-GdxmAS9sTc4GRC8r .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GdxmAS9sTc4GRC8r .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GdxmAS9sTc4GRC8r .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GdxmAS9sTc4GRC8r :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 当前条件与历史上下文
联合模型生成三个参考视角的未来视频
前视 F
左后 BL
右后 BR
生成左前 FL
生成后视 B
生成右前 FR
目标视角自己的先前上下文
这里的"参考"在推理第二阶段是第一阶段已经生成的未来,不是偷看了真实未来。 训练则利用数据中同步相邻视角作为条件,教模型预测目标视角;附录 B.2 描述每次随机选一个中间视角、配两个邻居训练。
1.3 为什么叫 stitched,却不是直接粘贴?
比如生成 FL 时,F 提供前方道路内容,BL 提供左侧道路/车身经过的内容,但这两张图的拍摄方向不同。把它们裁两半贴在一起,不会自然得到 FL 相机的透视关系。
模型必须结合邻居内容与当前条件,重新生成目标视角,包括透视、遮挡和可见区域。stitched 是"受两侧参考约束的中间视图"的形象命名,不是全景拼接算法。第一阶段生成的是视频,约束也随视频时间变化。
数学关系为:
p ( x r , x s ∣ x p r e , c ) = p ( x r ∣ x p r e , c ) p ( x s ∣ x r , x p r e , c ) p(x_r,x_s\mid x_{pre},c)=p(x_r\mid x_{pre},c)\,p(x_s\mid x_r,x_{pre},c) p(xr,xs∣xpre,c)=p(xr∣xpre,c)p(xs∣xr,xpre,c)
这是在原文式 (4)基础上显式加条件 c c c 的教学写法。先知道参考组 x r x_r xr,再生成中间组 x s x_s xs。联合生成 提供跨视角交流,分解生成提供依赖顺序;二者仍不保证严格三维一致。
2. ConvNet 和 ConvNeXt 是什么?为什么要图像编码?
ConvNet/CNN 是卷积神经网络这一大类;本论文具体使用 ConvNeXt,不是一个叫"ConvNet"的特定编码器。
2.1 卷积的直观过程
卷积用可学习的小窗口扫描图像,提取局部特征。低层可能响应边缘、颜色与纹理;层层组合后形成更大范围的模式。网络训练出这些特征,不是人工逐个写出"汽车检测规则"。
典型编码流程可以写成:
text
RGB 图像 [3,H,W]
→ 卷积、下采样和残差块
→ 特征图 [D,h,w]
→ 把空间网格展开
→ 特征序列 [h×w,D]
→ 按需要映射到统一宽度 d
下采样减少空间位置,增加每个位置可包含的上下文。编码并不等于输出"这里有3辆车"的最终检测结果;这里输出的是供生成网络读取的内部特征。
2.2 ConvNeXt 的结构直觉
ConvNeXt 是现代化卷积骨干:分阶段下采样,包含较大卷积核的 depthwise convolution、通道混合、归一化、非线性与残差连接。
- depthwise 卷积:先让各通道分别提取空间邻域模式。
- 通道混合:用线性/逐点投影让不同类型特征组合。
- 残差连接:把输入加回变换结果,帮助深网络训练。
经典 ConvNeXt block 可概括为"7×7 depthwise → LayerNorm → 通道扩展 → GELU → 通道压回 → 残差"。这是原始 ConvNeXt 的结构背景,不代表已核对 Drive-WM 具体采用哪种尺寸/变体、每层维度或全部冻结策略。
2.3 Drive-WM 中两个"图像编码器"别混了
| 编码器 | 输入 | 输出用途 |
|---|---|---|
| VAE encoder | 要学习生成的真实视频帧 | 得到扩散用 latent;训练时加噪 |
| ConvNeXt 条件编码器 | 当前图、参考图、布局图等条件 | 得到可供 cross-attention 读取的条件特征 |
一个是"生成内容所在的压缩空间",另一个是"画画时读的参考资料"。即使都接收图像,也不是同一条支路。
来源:Drive-WM §3.3、A ConvNet for the 2020s,CVPR 2022。
3. 3D box、HD map、BEV segmentation 是什么?怎样喂进去?
| 信息 | 白话含义 | 原文采用的条件表达 |
|---|---|---|
| 3D box | 用有位置、尺寸、朝向的三维盒子包住车辆等物体 | 通过相机标定投影八个角点/框结构到相机画面,用颜色区分类别 |
| HD map | 包含车道、边界、人行横道等精细静态元素的地图 | 把矢量线投影到相机画面,用颜色表示类型 |
| BEV segmentation | 从鸟瞰角度标记每个地面格子的语义类别 | 按 CVT 的数据处理流程制作鸟瞰语义 mask,再编码 |
BEV mask 本身是鸟瞰图,不能把三类输入一律说成"全都投影到相机画面"。 原文明确投影的是框与 HD map;BEV 分割也作为二维条件表示输入。
投影可直观写成"世界/自车坐标中的点 → 相机坐标 → 相机内参得到像素",需要相机内外参及正确坐标变换。这里是解释为何能把三维框画到照片上,不能据此认为论文用 ConvNeXt 直接解析原始三维框数组。
这些条件图再经 ConvNeXt 编成布局序列 l l l。它们是"告诉生成器应该画什么在哪里"的条件,不是最终 RGB,也不是此时由去噪网络直接输出的检测标签。
在另一个环节,模型生成视频后,还会运行检测器/地图预测器用于奖励或评估。要区分:
- 生成前布局:作为输入约束画面。
- 生成后感知:检查生成画面实际表达出什么。
来源:§3.3、附录 C.1。
4. 所以它究竟有没有监督?
你的判断方向是对的:不能把论文整套实验描述成完全无标注学习。 但需要区分下面几层:
- 扩散损失:用真实视频自动加噪,目标是已知噪声,不需要人逐像素写噪声标签。
- 条件信息:布局实验使用框、地图、BEV mask 等结构信息;它们可能来自人工标注、已有地图或处理流程,不是模型无中生有得到的。
- 候选规划器:VAD 本身涉及专家轨迹与相关感知监督。
- 外部模型:BEVFormer、MapTR、CVT 也有各自预训练和监督来源。
- 指标真值:计算布局一致性、轨迹误差等仍要参考相应真值。
4.1 两种实验不能混用
| 设置 | 未来信息给多少 | 实际问题 |
|---|---|---|
| layout-based | 给每个目标帧的布局,例如逐帧框和地图 | 给定场景结构,能否生成符合它的视频? |
| action-based | 给当前图像 i 0 i_0 i0、当前布局 l 0 l_0 l0、文本 e 0 e_0 e0 与未来动作序列 a t a_t at | 已知现在与计划,模型预测未来环境会怎样? |
原文动作模式式 (5):
c t = i 0 , l 0 , e 0 , a t c_t=i_0,l_0,e_0,a_t ct=i0,l0,e0,at
因此,"规划预测时必须提前知道未来所有车辆框"不是正确理解。不过当前布局仍是输入条件,论文没有因此自动证明在没有任何结构化信息时同样有效。
这些条件是可组合的接口,不表示所有模型变体每次必须同时提供框、HD map、BEV mask 三者完整集合。具体缺哪项、性能如何,需看相应模型设定和消融。
来源:§3.3、§5.1 Model variants、§5.2、附录 C.1。
5. CLIP 文本编码器是什么原理?
CLIP = Contrastive Language--Image Pretraining,对比语言--图像预训练。 它通过图文配对学会让相关图片和文字在特征空间相近。
5.1 训练 CLIP 时
一批有 N 对图文:汽车照片/汽车描述、猫照片/猫描述......分别经过图像编码器和文本 Transformer,得到特征,再计算全部 N×N 图文相似度。
训练鼓励正确配对的相似度较高,错误配对较低。这是对比学习;文本来自配对数据,也是一种自然语言监督。它不是让文本编码器自己把文字画成图,也不是用每个词去查固定图片。
5.2 Drive-WM 使用时
只需要预训练 CLIP 的文本侧 ,将"相机方向+天气+光照"的描述变成上下文化的文本特征序列 e ∈ R m × d e\in\mathbb R^{m\times d} e∈Rm×d,供去噪网络读取。
例如"front view, rainy night"应让网络读到前视、雨天、夜间等语义。文字提供语义,不提供精确的每辆车三维位置。 精确布局由其他条件承担。
原始 CLIP 的图文对比目标通常利用汇总特征;生成模型中可读取文本 Transformer 的逐 token 隐藏状态。不要把"CLIP 能输出整体检索向量"误解为"Drive-WM 只能收到一个数或一个词"。论文未在主文逐项给出所用 CLIP 变体、token 数与全部冻结细节,本页不补造。
来源:CLIP 原论文,ICML 2021。概念入口:CLIP。
6.1 动作是候选轨迹的位移
原文接 VAD 时定义:
a t = ( Δ x t , Δ y t ) = ( x t + 1 − x t , y t + 1 − y t ) a_t=(\Delta x_t,\Delta y_t)=(x_{t+1}-x_t,y_{t+1}-y_t) at=(Δxt,Δyt)=(xt+1−xt,yt+1−yt)
它是自车相邻位置之间的二维变化,不是直接的油门和刹车。若轨迹点为 ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0.2 ) (0,0),(1,0),(2,0.2) (0,0),(1,0),(2,0.2),则前两步位移为 ( 1 , 0 ) , ( 1 , 0.2 ) (1,0),(1,0.2) (1,0),(1,0.2);此处数字仅用于示例。
动作经 **MLP(多层感知机)**变成特征。MLP 就是几层线性变换加非线性激活;网络学习"这些位移数字怎样影响未来视觉变化"。论文规定输出 a t ∈ R 2 × d a_t\in\mathbb R^{2\times d} at∈R2×d;两个数字被表示为统一宽度的条件向量。未交代所有隐藏层和精确实现时,不要凭这个维度反推唯一的网络。
这个编码器不是选动作的人,它只是翻译已给定的动作。
6.2 "现有规划器"不是都用一个算法
一般可以分为两种思路,以下为概念背景:
- 模块化规划:感知/预测得到道路与障碍 → 提候选轨迹或求解优化问题 → 按碰撞、路线进度、平滑性等选方案 → 控制器跟踪。
- 学习式规划:从传感器与导航条件学习输出路点,可有感知中间任务,也可直接预测;常用记录驾驶轨迹作为监督。
Drive-WM 实验具体用 VAD,而非泛指所有规划器。VAD 将道路和交通参与者运动表示成向量,学习输出自车轨迹;论文向预训练 VAD 分别给"直行、左转、右转"命令,得到候选,再用世界模型重评分。
这里的三种候选不是对整段动作空间的穷举,也不是保证三条里必有安全解。轨迹最后还需车辆控制器转换为可执行控制。
来源:VAD,ICCV 2023、Drive-WM §4.1/§5.4。
7. 不同条件怎样融合?cross-attention 在哪?
设:图像特征 i 0 ∈ R n × d i_0\in\mathbb R^{n\times d} i0∈Rn×d、布局特征 l 0 ∈ R k × d l_0\in\mathbb R^{k\times d} l0∈Rk×d、文本特征 e 0 ∈ R m × d e_0\in\mathbb R^{m\times d} e0∈Rm×d、动作特征 a t ∈ R 2 × d a_t\in\mathbb R^{2\times d} at∈R2×d。
c t = concat ( i 0 , l 0 , e 0 , a t ) ∈ R ( n + k + m + 2 ) × d c_t=\operatorname{concat}(i_0,l_0,e_0,a_t)\in\mathbb R^{(n+k+m+2)\times d} ct=concat(i0,l0,e0,at)∈R(n+k+m+2)×d
"统一"指宽度都是 d,长度可以不同;沿序列长度拼接,不是把原始 png、中文字符串和数字文件直接粘在一起。
cross-attention 可概括为:
Q = W Q h , K = W K c t , V = W V c t , Attn ( Q , K , V ) = softmax ( Q K T d k ) V Q=W_Qh,\quad K=W_Kc_t,\quad V=W_Vc_t,\qquad \operatorname{Attn}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Q=WQh,K=WKct,V=WVct,Attn(Q,K,V)=softmax(dk QKT)V
h h h 是当前去噪视觉特征。query 来自"正在画的东西",key/value 来自"参考资料";相似度决定每个位置该读哪些条件。空间、时间、视角 self-attention 则是在视觉特征内部交流,两者分工不同。
8. Stable Diffusion 工作原理与 Drive-WM 改动
Stable Diffusion 是基于潜空间扩散的生成模型。原始 Latent Diffusion/SD 设计把主要去噪计算放到图像压缩表示里,降低像素空间上的生成成本。
8.1 三个核心部件
- VAE 编码/解码器:图像 ↔ 连续 latent。
- 文本编码器:文字 → 条件特征;经典 SD 使用 CLIP 文本 Transformer。
- UNet 去噪器:读取带噪 latent、噪声步与条件,预测噪声等训练目标。
8.2 训练与生成不是同一个过程
#mermaid-svg-7XzwrAKbXJW5LVlQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7XzwrAKbXJW5LVlQ .error-icon{fill:#552222;}#mermaid-svg-7XzwrAKbXJW5LVlQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7XzwrAKbXJW5LVlQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .marker.cross{stroke:#333333;}#mermaid-svg-7XzwrAKbXJW5LVlQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7XzwrAKbXJW5LVlQ p{margin:0;}#mermaid-svg-7XzwrAKbXJW5LVlQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster-label text{fill:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster-label span{color:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster-label span p{background-color:transparent;}#mermaid-svg-7XzwrAKbXJW5LVlQ .label text,#mermaid-svg-7XzwrAKbXJW5LVlQ span{fill:#333;color:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .node rect,#mermaid-svg-7XzwrAKbXJW5LVlQ .node circle,#mermaid-svg-7XzwrAKbXJW5LVlQ .node ellipse,#mermaid-svg-7XzwrAKbXJW5LVlQ .node polygon,#mermaid-svg-7XzwrAKbXJW5LVlQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .rough-node .label text,#mermaid-svg-7XzwrAKbXJW5LVlQ .node .label text,#mermaid-svg-7XzwrAKbXJW5LVlQ .image-shape .label,#mermaid-svg-7XzwrAKbXJW5LVlQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-7XzwrAKbXJW5LVlQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .rough-node .label,#mermaid-svg-7XzwrAKbXJW5LVlQ .node .label,#mermaid-svg-7XzwrAKbXJW5LVlQ .image-shape .label,#mermaid-svg-7XzwrAKbXJW5LVlQ .icon-shape .label{text-align:center;}#mermaid-svg-7XzwrAKbXJW5LVlQ .node.clickable{cursor:pointer;}#mermaid-svg-7XzwrAKbXJW5LVlQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .arrowheadPath{fill:#333333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7XzwrAKbXJW5LVlQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7XzwrAKbXJW5LVlQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7XzwrAKbXJW5LVlQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster text{fill:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ .cluster span{color:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7XzwrAKbXJW5LVlQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7XzwrAKbXJW5LVlQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-7XzwrAKbXJW5LVlQ .icon-shape,#mermaid-svg-7XzwrAKbXJW5LVlQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7XzwrAKbXJW5LVlQ .icon-shape p,#mermaid-svg-7XzwrAKbXJW5LVlQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7XzwrAKbXJW5LVlQ .icon-shape .label rect,#mermaid-svg-7XzwrAKbXJW5LVlQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7XzwrAKbXJW5LVlQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7XzwrAKbXJW5LVlQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7XzwrAKbXJW5LVlQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 训练真实图像
VAE 编码
干净 latent
加入已知高斯噪声
UNet 预测噪声
文本等条件
与真实加入的噪声比较
训练知道干净图像与加入的噪声。生成时则从随机 latent 出发,多次让网络预测、由采样器更新,逐渐得到干净 latent,再解码。推理不是先拿到真实未来再去噪;历史图和条件只用于约束生成。
反向采样不是不加区别地"每次减掉整个预测噪声",需要按噪声日程与 DDIM 等算法计算。去噪的几十次迭代是计算步骤,不是驾驶时间。
8.3 Drive-WM 在哪里不同?
从 Stable Diffusion 检查点初始化;先适配条件图像生成,再加入时间层与多视角层,使网络处理多帧、多相机;再加参考/中间视角分解。论文报告生成使用 DDIM 50 步、CFG=5。
SD 是基础生成骨干,不会仅因加载它就具备驾驶物理、六视角一致或规划能力,这些要靠新增结构、驾驶数据训练和评价。
来源:High-Resolution Image Synthesis with Latent Diffusion Models,CVPR 2022、Drive-WM §3.1/附录 B.1。
9. reward 具体怎么设计?
对每条候选轨迹生成的未来视频,运行外部感知模型:
- BEVFormer:预测三维物体框等信息。
- MapTR:预测在线地图元素。
然后用规则计算两类奖励:
| 奖励 | 论文给出的设计因素 | 作用 |
|---|---|---|
| R m a p R_{map} Rmap | 与路沿距离、车道中心线一致性 | 避免出路界或不合理横向偏离 |
| R o b j e c t R_{object} Robject | 与其他交通参与者的纵向、横向距离 | 评价潜在碰撞风险 |
R = R m a p ⋅ R o b j e c t , W ∗ = arg max W ∈ C R ( W ) R=R_{map}\cdot R_{object},\qquad W^*=\arg\max_{W\in\mathcal C}R(W) R=Rmap⋅Robject,W∗=argW∈CmaxR(W)
C \mathcal C C 是候选集合。奖励看的是生成场景中的驾驶后果,不是画面美观程度;它也不是扩散训练损失。
论文交代了因素和相乘规则,但没有在此完整写出各距离如何归一化、所有阈值、跨时间怎样精确汇总。不得把自编的指数函数、线性权重或安全阈值当成原方法。
教学例子,非原始输出:若两项已标准化为"越大越好",候选 A 为 0.9×0.2=0.18,候选 B 为 0.7×0.8=0.56,就选 B。这只解释乘积的直觉,不表示论文用这组数或保证该分数是安全概率。
GPT-4V 仅在附录展示积水等定性评价,不是主表全部结果的默认评分器。CVT 也不是主规划 reward 的计算网络。
来源:§4.2、Table 4、附录 A.5。误差可能由生成、检测、地图估计和评分规则共同引入。
10. 什么叫基于树的规划?
节点是当前或预测状态,边是一段候选动作/轨迹,分叉表示不同选择。 在每个节点向前试几条方案,评估后决定保留或执行哪条,再继续推演,就形成树。
#mermaid-svg-tbtLsTtJWGXn9dl9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tbtLsTtJWGXn9dl9 .error-icon{fill:#552222;}#mermaid-svg-tbtLsTtJWGXn9dl9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tbtLsTtJWGXn9dl9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .marker.cross{stroke:#333333;}#mermaid-svg-tbtLsTtJWGXn9dl9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tbtLsTtJWGXn9dl9 p{margin:0;}#mermaid-svg-tbtLsTtJWGXn9dl9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster-label text{fill:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster-label span{color:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster-label span p{background-color:transparent;}#mermaid-svg-tbtLsTtJWGXn9dl9 .label text,#mermaid-svg-tbtLsTtJWGXn9dl9 span{fill:#333;color:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .node rect,#mermaid-svg-tbtLsTtJWGXn9dl9 .node circle,#mermaid-svg-tbtLsTtJWGXn9dl9 .node ellipse,#mermaid-svg-tbtLsTtJWGXn9dl9 .node polygon,#mermaid-svg-tbtLsTtJWGXn9dl9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .rough-node .label text,#mermaid-svg-tbtLsTtJWGXn9dl9 .node .label text,#mermaid-svg-tbtLsTtJWGXn9dl9 .image-shape .label,#mermaid-svg-tbtLsTtJWGXn9dl9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-tbtLsTtJWGXn9dl9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .rough-node .label,#mermaid-svg-tbtLsTtJWGXn9dl9 .node .label,#mermaid-svg-tbtLsTtJWGXn9dl9 .image-shape .label,#mermaid-svg-tbtLsTtJWGXn9dl9 .icon-shape .label{text-align:center;}#mermaid-svg-tbtLsTtJWGXn9dl9 .node.clickable{cursor:pointer;}#mermaid-svg-tbtLsTtJWGXn9dl9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .arrowheadPath{fill:#333333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tbtLsTtJWGXn9dl9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tbtLsTtJWGXn9dl9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tbtLsTtJWGXn9dl9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster text{fill:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 .cluster span{color:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tbtLsTtJWGXn9dl9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tbtLsTtJWGXn9dl9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-tbtLsTtJWGXn9dl9 .icon-shape,#mermaid-svg-tbtLsTtJWGXn9dl9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tbtLsTtJWGXn9dl9 .icon-shape p,#mermaid-svg-tbtLsTtJWGXn9dl9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tbtLsTtJWGXn9dl9 .icon-shape .label rect,#mermaid-svg-tbtLsTtJWGXn9dl9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tbtLsTtJWGXn9dl9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tbtLsTtJWGXn9dl9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tbtLsTtJWGXn9dl9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 当前状态
候选直行
候选左转
候选右转
世界模型预测直行未来并评分
世界模型预测左转未来并评分
世界模型预测右转未来并评分
选中的状态继续提出后续候选
后续候选1
后续候选2
上图只是树结构教学示意,不表示论文特定场景必选左转。Drive-WM 的流程是 VAD 提候选 → 世界模型预测 → 奖励选择 → 可以重复扩展。原文没有完整规定通用 MCTS 的访问次数/UCB、固定树深、全局回溯或所有分支的搜索预算,不能擅自称它实现了那些算法。
- 树结构描述候选如何组织。
- 搜索规则决定扩展谁、保留谁、如何累计价值。
- 世界模型负责预测边后面的状态。
- reward负责评价预测结果。
不是"树"自动给了安全保证,也不保证找到全局最优。有限候选没有安全方案,重评分也无法凭空创造一条。
模型内 rollout 不等于环境闭环:后者还需实际执行动作、得到被动作改变的新观测继续决策。论文主定量是 nuScenes 开环,不是 CARLA/实车闭环成绩。
11.1 共同框架:比较两批数据的特征分布
- 准备真实样本集合与生成样本集合。
- 用固定预训练网络提特征。
- 分别计算特征均值 μ \mu μ 和协方差 Σ \Sigma Σ。
- 用 Fréchet 距离衡量两组统计量的差别,越低越接近。
D = ∥ μ r − μ g ∥ 2 2 + Tr ( Σ r + Σ g − 2 ( Σ r 1 / 2 Σ g Σ r 1 / 2 ) 1 / 2 ) D=\|\mu_r-\mu_g\|_2^2+ \operatorname{Tr}\!\left(\Sigma_r+\Sigma_g-2(\Sigma_r^{1/2}\Sigma_g\Sigma_r^{1/2})^{1/2}\right) D=∥μr−μg∥22+Tr(Σr+Σg−2(Σr1/2ΣgΣr1/2)1/2)
这里 r/g 表示真实/生成,矩阵迹 Tr 是对角线求和。均值描述总体特征中心,协方差描述变化幅度及关联。采用高斯近似的特征统计距离,并不涵盖数据分布全部细节。
11.2 两者差在哪?
| 指标 | 全称 | 输入与常用原始特征网络 | 主要观察 |
|---|---|---|---|
| FID | Fréchet Inception Distance | 单张图片;Inception-v3 池化特征 | 外观/语义分布是否接近真实图片 |
| FVD | Fréchet Video Distance | 整段视频;I3D 视频网络特征 | 同时包含时序与外观信息的分布差异 |
FVD 不是逐帧 FID 再平均。 把同一组帧打乱顺序,逐帧 FID 可以不变,而视频特征可能变化。这是说明时序敏感性的教学例子,不是任何顺序打乱都保证 FVD 必定升高。
11.3 Drive-WM 用多少样本?
附录 D.1:150 个验证场景,六视角拆开,得到 900 段视频,每段 40 帧,沿用 VideoLDM 流程并链接 TATS 的 UCF FVD 代码。训练窗口 T=8 与评估 40 帧是不同设置。
论文没有充分列出全部 FID 取帧、条件帧是否纳入、FVD 实际 checkpoint/取层与截取细节,本页不将通用默认实现冒充其逐项复现实验配置。原始 FVD 方法使用 I3D/Kinetics 特征;不同实现仍需对齐模型、分辨率、长度与样本数。
11.4 为什么越低也不证明驾驶更安全?
FID/FVD 比的是一批视频的分布,不是逐个判断"这条候选轨迹下前车到底会在哪"。生成很多漂亮常见场景,仍可能漏掉一辆危险的小车;更不能据此判断控制执行可靠。
六视角拆成独立视频做 FID/FVD,不能单独测出相邻相机是否描述同一辆车。因此作者又使用 KPM 关键点匹配指标,专门衡量跨视角重叠内容。
来源:FID 原论文、FVD 原论文、Drive-WM 附录 D。
12. CVT 是什么算法?在这里干什么?
这里 CVT = Cross-View Transformer ,对应 Cross-view Transformers for real-time Map-view Semantic Segmentation;不是另一篇同缩写的 Convolutional Vision Transformer。
12.1 任务:多相机照片 → 鸟瞰语义图
例如输出一个网格,分别标出哪里有车、哪里是可行驶区域。流程是:
text
多相机图像 → CNN 图像特征
相机标定 → 与视线方向、相机位置有关的编码
鸟瞰网格 query → 跨相机 cross-attention 读取图像特征
→ 聚合成 BEV 特征 → 解码成语义 mask
相机标定描述镜头投影与相机安装位置/方向。CVT 利用这些几何编码,让某个 BEV 网格能学习去读取合适相机区域;不是将所有图片硬摊平,也不需要先显式预测每个像素深度再重建点云。
概念上,BEV query 问"我代表的地面位置是什么",相机图像提供 key/value,注意力加权汇入有用内容;具体几何位置编码是它区别于无几何图像混合的重要部分。
12.2 在 Drive-WM 中的两个相关位置
- 数据准备:按 CVT 的流程构建 BEV segmentation 条件 mask,不等于所有 mask 都来自先运行 CVT 网络预测。
- 可控性评价:将生成图像送入预训练 CVT,预测前景/背景语义,与目标布局比较 mIoU,看模型是否真的按条件画出了车与道路。
它不承担 Drive-WM 的扩散生成,也不是主规划 reward(主 reward 使用 BEVFormer、MapTR)。
来源:CVT 原论文 §3、Drive-WM §5.1--5.2、附录 C.1。
13. 完整生成---评价流程图
下图以动作条件下的规划应用为主线。布局条件生成可将逐帧真实/指定布局替换为条件输入;不能将这两种模式的未来信息量混为一谈。
#mermaid-svg-UbDhbG8xCqlNuidC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UbDhbG8xCqlNuidC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UbDhbG8xCqlNuidC .error-icon{fill:#552222;}#mermaid-svg-UbDhbG8xCqlNuidC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UbDhbG8xCqlNuidC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UbDhbG8xCqlNuidC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UbDhbG8xCqlNuidC .marker.cross{stroke:#333333;}#mermaid-svg-UbDhbG8xCqlNuidC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UbDhbG8xCqlNuidC p{margin:0;}#mermaid-svg-UbDhbG8xCqlNuidC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UbDhbG8xCqlNuidC .cluster-label text{fill:#333;}#mermaid-svg-UbDhbG8xCqlNuidC .cluster-label span{color:#333;}#mermaid-svg-UbDhbG8xCqlNuidC .cluster-label span p{background-color:transparent;}#mermaid-svg-UbDhbG8xCqlNuidC .label text,#mermaid-svg-UbDhbG8xCqlNuidC span{fill:#333;color:#333;}#mermaid-svg-UbDhbG8xCqlNuidC .node rect,#mermaid-svg-UbDhbG8xCqlNuidC .node circle,#mermaid-svg-UbDhbG8xCqlNuidC .node ellipse,#mermaid-svg-UbDhbG8xCqlNuidC .node polygon,#mermaid-svg-UbDhbG8xCqlNuidC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UbDhbG8xCqlNuidC .rough-node .label text,#mermaid-svg-UbDhbG8xCqlNuidC .node .label text,#mermaid-svg-UbDhbG8xCqlNuidC .image-shape .label,#mermaid-svg-UbDhbG8xCqlNuidC .icon-shape .label{text-anchor:middle;}#mermaid-svg-UbDhbG8xCqlNuidC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UbDhbG8xCqlNuidC .rough-node .label,#mermaid-svg-UbDhbG8xCqlNuidC .node .label,#mermaid-svg-UbDhbG8xCqlNuidC .image-shape .label,#mermaid-svg-UbDhbG8xCqlNuidC .icon-shape .label{text-align:center;}#mermaid-svg-UbDhbG8xCqlNuidC .node.clickable{cursor:pointer;}#mermaid-svg-UbDhbG8xCqlNuidC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UbDhbG8xCqlNuidC .arrowheadPath{fill:#333333;}#mermaid-svg-UbDhbG8xCqlNuidC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UbDhbG8xCqlNuidC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UbDhbG8xCqlNuidC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbDhbG8xCqlNuidC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UbDhbG8xCqlNuidC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbDhbG8xCqlNuidC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UbDhbG8xCqlNuidC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UbDhbG8xCqlNuidC .cluster text{fill:#333;}#mermaid-svg-UbDhbG8xCqlNuidC .cluster span{color:#333;}#mermaid-svg-UbDhbG8xCqlNuidC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UbDhbG8xCqlNuidC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UbDhbG8xCqlNuidC rect.text{fill:none;stroke-width:0;}#mermaid-svg-UbDhbG8xCqlNuidC .icon-shape,#mermaid-svg-UbDhbG8xCqlNuidC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbDhbG8xCqlNuidC .icon-shape p,#mermaid-svg-UbDhbG8xCqlNuidC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UbDhbG8xCqlNuidC .icon-shape .label rect,#mermaid-svg-UbDhbG8xCqlNuidC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbDhbG8xCqlNuidC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UbDhbG8xCqlNuidC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UbDhbG8xCqlNuidC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} cross-attention读取条件
离线生成质量评估
离线布局可控性评估
离线跨视角评估
当前真实多相机图像
预训练 VAD 规划器
直行 左转 右转命令
候选二维路点序列
相邻路点相减得到逐步位移
动作 MLP 编码
ConvNeXt 条件编码
当前3D框 HD地图 可选BEV语义布局
框和地图投影为相机条件图 BEV保留鸟瞰mask
ConvNeXt 布局编码
相机方向 天气 光照文本
CLIP 文本编码
拼接统一宽度的条件特征序列
随机视频latent与扩散噪声步
空间 时间 视角去噪网络
先生成F BL BR参考视角视频
相邻参考视频再经条件编码
条件扩散生成FL B FR中间视角
目标视角的先前上下文
该候选的完整六视角未来视频
BEVFormer预测物体
MapTR预测地图
物体距离奖励
路沿与中心线奖励
两项奖励相乘
在候选集合中选最高分
规划树可继续向前扩展
FID与FVD
CVT预测鸟瞰分割并算mIoU
相邻视角关键点匹配KPM
这是原文组件的教学整合图,不是其代码逐函数调用图。图中的 latent、解码和多轮采样在高层合并表示;参考视频在第二阶段作为图像条件被编码。FID/FVD、CVT/mIoU、KPM 是离线评价支路,不参与主 reward 选择。
14. 回答这次疑问时最重要的核对表
| 疑问 | 应记住的区别 |
|---|---|
| 参考与拼接关系 | 先生成一组方向,再条件生成两侧中间方向;不是照片粘贴 |
| 图像编码 | 条件 ConvNeXt 与扩散 latent 的 VAE 是两条支路 |
| 是否有监督 | 自动加噪目标不等于整套条件/规划/感知无标签 |
| 是否偷看未来 | layout 模式可给未来布局;action 模式用当前布局加未来动作 |
| CLIP | 图文对比预训练;本文读其文本特征 |
| 动作 MLP | 编码候选位移,不负责自己选出动作 |
| Stable Diffusion | latent 中学去噪,多轮采样后解码;Drive-WM 加时间/视角结构 |
| reward | 生成后感知几何规则相乘,不是 FID/FVD 或 CVT mIoU |
| 树规划 | 多候选未来分支的组织与选择;不自动等同于 MCTS |
| FID/FVD | 图像/视频特征分布差异,不是实际碰撞安全性 |
| CVT | 多相机到BEV语义分割;在本论文里主要用于可控性评估 |
原始来源导航
- Drive-WM 全文:§3.2--3.3、§4、§5.1--5.4、附录 B.2/C.1/D.1。
- ConvNeXt,CVPR 2022。
- CLIP,ICML 2021。
- Latent Diffusion,CVPR 2022。
- VAD,ICCV 2023。
- CVT,CVPR 2022。
- FID,NeurIPS 2017。
- FVD。
15. 追问:是不是 VAE 是 Q,ConvNeXt 等是 K/V?
两条支路的方向理解接近,但模块本身不是 Q/K/V。 对本文的条件 cross-attention:
- VAE 在训练时将真实视频编码成干净 latent,随后加噪。UNet 处理带噪 latent,得到当前层视觉特征 h h h,再投影成 Q Q Q。
- ConvNeXt、CLIP、动作 MLP 分别输出图像/布局、文本、动作条件,组成 c c c,再经两个不同投影得到 K K K 和 V V V。
采用 token 为行的记法:
Q = h W Q , K = c W K , V = c W V Q=hW_Q,\qquad K=cW_K,\qquad V=cW_V Q=hWQ,K=cWK,V=cWV
与第7节列向量写法属于同一计算的不同记号约定。K、V 来自同一条件序列,但投影矩阵不同,不能理解成 K=V。
#mermaid-svg-xqaZlJu5i1VEOiAk{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xqaZlJu5i1VEOiAk .error-icon{fill:#552222;}#mermaid-svg-xqaZlJu5i1VEOiAk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xqaZlJu5i1VEOiAk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xqaZlJu5i1VEOiAk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xqaZlJu5i1VEOiAk .marker.cross{stroke:#333333;}#mermaid-svg-xqaZlJu5i1VEOiAk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xqaZlJu5i1VEOiAk p{margin:0;}#mermaid-svg-xqaZlJu5i1VEOiAk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster-label text{fill:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster-label span{color:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster-label span p{background-color:transparent;}#mermaid-svg-xqaZlJu5i1VEOiAk .label text,#mermaid-svg-xqaZlJu5i1VEOiAk span{fill:#333;color:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk .node rect,#mermaid-svg-xqaZlJu5i1VEOiAk .node circle,#mermaid-svg-xqaZlJu5i1VEOiAk .node ellipse,#mermaid-svg-xqaZlJu5i1VEOiAk .node polygon,#mermaid-svg-xqaZlJu5i1VEOiAk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xqaZlJu5i1VEOiAk .rough-node .label text,#mermaid-svg-xqaZlJu5i1VEOiAk .node .label text,#mermaid-svg-xqaZlJu5i1VEOiAk .image-shape .label,#mermaid-svg-xqaZlJu5i1VEOiAk .icon-shape .label{text-anchor:middle;}#mermaid-svg-xqaZlJu5i1VEOiAk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xqaZlJu5i1VEOiAk .rough-node .label,#mermaid-svg-xqaZlJu5i1VEOiAk .node .label,#mermaid-svg-xqaZlJu5i1VEOiAk .image-shape .label,#mermaid-svg-xqaZlJu5i1VEOiAk .icon-shape .label{text-align:center;}#mermaid-svg-xqaZlJu5i1VEOiAk .node.clickable{cursor:pointer;}#mermaid-svg-xqaZlJu5i1VEOiAk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xqaZlJu5i1VEOiAk .arrowheadPath{fill:#333333;}#mermaid-svg-xqaZlJu5i1VEOiAk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xqaZlJu5i1VEOiAk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xqaZlJu5i1VEOiAk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xqaZlJu5i1VEOiAk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xqaZlJu5i1VEOiAk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xqaZlJu5i1VEOiAk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster text{fill:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk .cluster span{color:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xqaZlJu5i1VEOiAk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xqaZlJu5i1VEOiAk rect.text{fill:none;stroke-width:0;}#mermaid-svg-xqaZlJu5i1VEOiAk .icon-shape,#mermaid-svg-xqaZlJu5i1VEOiAk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xqaZlJu5i1VEOiAk .icon-shape p,#mermaid-svg-xqaZlJu5i1VEOiAk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xqaZlJu5i1VEOiAk .icon-shape .label rect,#mermaid-svg-xqaZlJu5i1VEOiAk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xqaZlJu5i1VEOiAk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xqaZlJu5i1VEOiAk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xqaZlJu5i1VEOiAk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 训练真实视频
VAE编码
加噪latent
生成时从随机latent开始
UNet当前层视觉特征h
线性投影得到Q
图像和布局经ConvNeXt
条件序列c
文本经CLIP
动作经MLP
线性投影得到K
另一线性投影得到V
Q与K匹配后加权读取V
更新视觉特征并继续去噪
不是先用 VAE 做完 attention,再去运行条件编码器。 两条分支提供特征,条件特征供 UNet 多层 cross-attention 读取;视觉特征随层和去噪步变化。推理时没有真实未来图给 VAE 编码,通常从噪声 latent 生成,最后用 VAE decoder 还原画面。
另外,时间/视角 self-attention 的 Q/K/V 都来自相应视觉特征;上述两路来源专指读取外部条件的 cross-attention。
来源:Drive-WM §3.3;原始 Latent Diffusion CrossAttention 实现中的 q=to_q(x)、k=to_k(context)、v=to_v(context)。这是原理对照,不声称已运行 Drive-WM 源码。
16. 追问:VAE 编码图像,为什么生成又从噪声开始?
VAE 建立"图像与压缩表示之间怎样转换",扩散模型学习"怎样在这个表示空间中生成合理样本"。 两者学习的任务不同,生成时也不要求先有目标图像。
16.1 先学好表示空间,再学这个空间中的生成规律
第一部分是自编码器:
x → E V A E z c l e a n → D V A E x ^ x\xrightarrow{E_{VAE}}z_{clean}\xrightarrow{D_{VAE}}\hat x xEVAE zcleanDVAE x^
它学习如何压缩并重建图像。对于 Stable Diffusion 这类方法,通常先获得可用自编码器,再用它提供的 latent 训练扩散;不是每次去噪都从零重新训练 VAE。
第二部分是 latent 上的扩散生成。VAE 负责定义压缩接口,UNet 和采样器负责生成可被 decoder 解读的 latent。
16.2 训练:知道答案,把它弄脏,学习如何处理
对真实训练图像编码,再在其 latent 中人工加入噪声:
z τ = α τ z c l e a n + σ τ ϵ , ϵ ∼ N ( 0 , I ) z_{\tau}=\alpha_{\tau}z_{clean}+\sigma_{\tau}\epsilon, \quad\epsilon\sim\mathcal N(0,I) zτ=ατzclean+στϵ,ϵ∼N(0,I)
去噪网络接收 z τ z_\tau zτ、噪声级别 τ \tau τ 和条件 c c c,训练预测已知噪声 ϵ \epsilon ϵ。不同训练样本会遇到不同噪声强度,网络因而学习多个强度下的去噪方向。
训练可以随机选一个 τ \tau τ,直接构造这一级别的加噪数据,不必每次完整运行从干净到纯噪声的全部步骤。损失也不是要求 UNet 完美猜出每一个高噪声样本的随机噪声;其最优统计预测与相应生成采样过程配合,学习条件数据分布。
16.3 生成:不知道目标图像,先在相同空间取随机初值
噪声很强时, α τ \alpha_\tau ατ 很小,图像信息几乎被淹没, z τ z_\tau zτ 接近高斯噪声。于是可以用同形状的高斯随机张量作为反向生成的起点,逐步采样到合理 latent,再解码:
z n o i s e ⟶ ⋯ ⟶ z ^ c l e a n → D V A E x ^ z_{noise}\longrightarrow \cdots\longrightarrow\hat z_{clean} \xrightarrow{D_{VAE}}\hat x znoise⟶⋯⟶z^cleanDVAE x^
高斯是已知、容易采样的起点分布。"噪声"只是随机初始化的数值张量,不是先生成一张噪声图片再必须送进 VAE encoder。
举标准 SD v1 的尺寸例子,非 Drive-WM 实测配置:512×512 RGB 图片可压成 4×64×64 latent。生成时直接随机建立 4×64×64 的张量,然后在这个尺寸的空间中去噪,最后解码为图片。相同形状只是兼容接口,不代表任意随机张量已经含有正确图像结构;那部分由扩散模型逐步形成。
#mermaid-svg-BLRJDHaElEa9JQJP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BLRJDHaElEa9JQJP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BLRJDHaElEa9JQJP .error-icon{fill:#552222;}#mermaid-svg-BLRJDHaElEa9JQJP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BLRJDHaElEa9JQJP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BLRJDHaElEa9JQJP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BLRJDHaElEa9JQJP .marker.cross{stroke:#333333;}#mermaid-svg-BLRJDHaElEa9JQJP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BLRJDHaElEa9JQJP p{margin:0;}#mermaid-svg-BLRJDHaElEa9JQJP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BLRJDHaElEa9JQJP .cluster-label text{fill:#333;}#mermaid-svg-BLRJDHaElEa9JQJP .cluster-label span{color:#333;}#mermaid-svg-BLRJDHaElEa9JQJP .cluster-label span p{background-color:transparent;}#mermaid-svg-BLRJDHaElEa9JQJP .label text,#mermaid-svg-BLRJDHaElEa9JQJP span{fill:#333;color:#333;}#mermaid-svg-BLRJDHaElEa9JQJP .node rect,#mermaid-svg-BLRJDHaElEa9JQJP .node circle,#mermaid-svg-BLRJDHaElEa9JQJP .node ellipse,#mermaid-svg-BLRJDHaElEa9JQJP .node polygon,#mermaid-svg-BLRJDHaElEa9JQJP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BLRJDHaElEa9JQJP .rough-node .label text,#mermaid-svg-BLRJDHaElEa9JQJP .node .label text,#mermaid-svg-BLRJDHaElEa9JQJP .image-shape .label,#mermaid-svg-BLRJDHaElEa9JQJP .icon-shape .label{text-anchor:middle;}#mermaid-svg-BLRJDHaElEa9JQJP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BLRJDHaElEa9JQJP .rough-node .label,#mermaid-svg-BLRJDHaElEa9JQJP .node .label,#mermaid-svg-BLRJDHaElEa9JQJP .image-shape .label,#mermaid-svg-BLRJDHaElEa9JQJP .icon-shape .label{text-align:center;}#mermaid-svg-BLRJDHaElEa9JQJP .node.clickable{cursor:pointer;}#mermaid-svg-BLRJDHaElEa9JQJP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BLRJDHaElEa9JQJP .arrowheadPath{fill:#333333;}#mermaid-svg-BLRJDHaElEa9JQJP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BLRJDHaElEa9JQJP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BLRJDHaElEa9JQJP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BLRJDHaElEa9JQJP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BLRJDHaElEa9JQJP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BLRJDHaElEa9JQJP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BLRJDHaElEa9JQJP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BLRJDHaElEa9JQJP .cluster text{fill:#333;}#mermaid-svg-BLRJDHaElEa9JQJP .cluster span{color:#333;}#mermaid-svg-BLRJDHaElEa9JQJP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BLRJDHaElEa9JQJP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BLRJDHaElEa9JQJP rect.text{fill:none;stroke-width:0;}#mermaid-svg-BLRJDHaElEa9JQJP .icon-shape,#mermaid-svg-BLRJDHaElEa9JQJP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BLRJDHaElEa9JQJP .icon-shape p,#mermaid-svg-BLRJDHaElEa9JQJP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BLRJDHaElEa9JQJP .icon-shape .label rect,#mermaid-svg-BLRJDHaElEa9JQJP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BLRJDHaElEa9JQJP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BLRJDHaElEa9JQJP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BLRJDHaElEa9JQJP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 生成:没有真实未来
相同latent形状的高斯随机张量
训练好的UNet与采样器多步更新
当前图像 布局 文本 候选动作等条件
生成的干净latent
VAE解码器
未来画面
训练:已有真实样本
真实未来图像或视频
VAE编码器
干净latent
在latent空间加入已知噪声
UNet读取条件和噪声步并预测噪声
真实加入的噪声
训练比较误差
训练与生成使用同一套学到的去噪能力;图中并列是对照两个阶段,不表示同时运行两条路径。经典 SD 的去噪网络通常预测噪声,采样器再按日程更新状态,不是每次简单减去完整噪声估计。
16.4 到了几乎纯噪声,原图信息都没了,为什么还能画?
因为任务是生成与数据和条件相容的新样本,不是在完全丢失信息后唯一恢复那张训练原图。
生成规律来自训练后的参数;具体要求来自条件;随机初值提供多样性。同样的当前图像和动作条件,换不同随机种子可以得到不同合理未来。真实未来的唯一答案并没有暗藏在初始噪声里。
16.5 结合 Drive-WM 的两类图像
| 图像/特征 | 训练时 | 生成时 |
|---|---|---|
| 待预测的真实未来视频 | 已有,VAE 编码后用于加噪训练 | 未知,不存在可供编码的真实未来 |
| 当前图像、参考视角、布局等条件 | 编码后帮助网络学习条件预测 | 编码后引导生成;参考未来由前阶段模型生成 |
| 输出视频 | 可用于分析训练重建/预测 | 从生成 latent 经 VAE decoder 得到 |
训练:图像 → latent → 加噪 → 学去噪。生成:latent 噪声 → 逐步生成干净 latent → 图像。 编码器负责把训练答案搬进生成模型的工作空间,解码器负责把生成结果搬回可观看的图像空间。
普通 VAE 也可以从其先验采样并解码;这不等于 Stable Diffusion 必须直接随机取一个 latent 就结束。SD 额外学习了强大的条件扩散分布,并在解码前用它生成 latent。
来源:Latent Diffusion 原论文、Stable Diffusion v1 官方架构说明。
17.1 DDIM:决定如何从当前噪声级别走向更干净的级别
Denoising Diffusion Implicit Models,去噪扩散隐式模型。在当前讨论里主要把它理解为一种扩散采样方法:UNet 负责预测噪声,DDIM 根据预测、当前噪声步和采样日程更新 latent。
text
当前带噪 latent + 当前噪声步 + 条件
→ UNet预测噪声
→ DDIM采样器计算下一噪声步的latent
→ 重复直到干净latent
→ VAE解码
训练时学习不同噪声等级的去噪能力,推理可选择较稀疏的噪声时间步。例如假设原日程有1000级,可选其中50级进行采样;这是教学例子,不表示Drive-WM正文已确认原训练日程恰好1000级。
不能理解成"不算中间步就白送加速且质量完全不变"。DDIM 定义了兼容这种采样的更新方式,步数与质量存在权衡。它可以复用按相容目标训练的去噪网络,不是推理时再训练一个新的网络。
**随机性参数 η \eta η**控制更新中新增噪声的大小。常见 η = 0 \eta=0 η=0 是给定初始噪声后的确定性采样;并非所有 DDIM 设置都完全确定。Drive-WM 附录 B.1 明确报告 50 步、 η = 1.0 \eta=1.0 η=1.0 ,所以不能把本文写成"没有任何逐步随机性的DDIM"。即使 η = 0 \eta=0 η=0,改变初始噪声仍可改变生成样本。
来源:DDIM,ICLR 2021。概念卡:DDIM。
17.2 CFG:决定每一步多大程度强调条件
Classifier-Free Guidance,无分类器引导。它不用额外训练一个类别判别器,而组合"有条件"和"空/去除条件"两路去噪预测。
常见记法:
ϵ ^ = ϵ u + s ( ϵ c − ϵ u ) \hat\epsilon=\epsilon_u+s(\epsilon_c-\epsilon_u) ϵ^=ϵu+s(ϵc−ϵu)
- ϵ c \epsilon_c ϵc:给定条件 c c c 的噪声预测。
- ϵ u \epsilon_u ϵu:空条件或指定移除条件的参考预测。
- ϵ c − ϵ u \epsilon_c-\epsilon_u ϵc−ϵu:条件对预测带来的变化。
- s s s:放大这部分变化的引导系数。
按这个记法, s = 0 s=0 s=0 用无条件分支, s = 1 s=1 s=1 用正常条件分支, s > 1 s>1 s>1 进一步强调条件。另一种文献写作 ( 1 + w ) ϵ c − w ϵ u (1+w)\epsilon_c-w\epsilon_u (1+w)ϵc−wϵu,相当于 s = 1 + w s=1+w s=1+w;因此比较不同代码/论文数值时要看参数约定。不能把"5"理解成"5倍正确"或"多去噪5次"。
训练常随机丢弃条件,使同一套模型能处理有/无条件输入;推理两路逻辑预测可合并成一个更大batch计算,并不一定对应两个完全独立的模型。
Drive-WM:附录B.1报告各条件训练时20%概率丢弃,推理CFG=5。具体多模态参考分支保留哪些条件,要以实现为准,不把抽象"无条件"一律说成完全不看任何上下文。
系数过大可能出现失真、过饱和或多样性下降。CFG 不自动保证三维正确或安全。
来源:Classifier-Free Diffusion Guidance。概念卡:CFG-无分类器引导。
17.3 DDIM 和 CFG 怎样配合?
#mermaid-svg-4fcViwsr7yxtjuv3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4fcViwsr7yxtjuv3 .error-icon{fill:#552222;}#mermaid-svg-4fcViwsr7yxtjuv3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4fcViwsr7yxtjuv3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4fcViwsr7yxtjuv3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4fcViwsr7yxtjuv3 .marker.cross{stroke:#333333;}#mermaid-svg-4fcViwsr7yxtjuv3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4fcViwsr7yxtjuv3 p{margin:0;}#mermaid-svg-4fcViwsr7yxtjuv3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster-label text{fill:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster-label span{color:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster-label span p{background-color:transparent;}#mermaid-svg-4fcViwsr7yxtjuv3 .label text,#mermaid-svg-4fcViwsr7yxtjuv3 span{fill:#333;color:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 .node rect,#mermaid-svg-4fcViwsr7yxtjuv3 .node circle,#mermaid-svg-4fcViwsr7yxtjuv3 .node ellipse,#mermaid-svg-4fcViwsr7yxtjuv3 .node polygon,#mermaid-svg-4fcViwsr7yxtjuv3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4fcViwsr7yxtjuv3 .rough-node .label text,#mermaid-svg-4fcViwsr7yxtjuv3 .node .label text,#mermaid-svg-4fcViwsr7yxtjuv3 .image-shape .label,#mermaid-svg-4fcViwsr7yxtjuv3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-4fcViwsr7yxtjuv3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4fcViwsr7yxtjuv3 .rough-node .label,#mermaid-svg-4fcViwsr7yxtjuv3 .node .label,#mermaid-svg-4fcViwsr7yxtjuv3 .image-shape .label,#mermaid-svg-4fcViwsr7yxtjuv3 .icon-shape .label{text-align:center;}#mermaid-svg-4fcViwsr7yxtjuv3 .node.clickable{cursor:pointer;}#mermaid-svg-4fcViwsr7yxtjuv3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4fcViwsr7yxtjuv3 .arrowheadPath{fill:#333333;}#mermaid-svg-4fcViwsr7yxtjuv3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4fcViwsr7yxtjuv3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4fcViwsr7yxtjuv3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4fcViwsr7yxtjuv3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4fcViwsr7yxtjuv3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4fcViwsr7yxtjuv3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster text{fill:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 .cluster span{color:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4fcViwsr7yxtjuv3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4fcViwsr7yxtjuv3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-4fcViwsr7yxtjuv3 .icon-shape,#mermaid-svg-4fcViwsr7yxtjuv3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4fcViwsr7yxtjuv3 .icon-shape p,#mermaid-svg-4fcViwsr7yxtjuv3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4fcViwsr7yxtjuv3 .icon-shape .label rect,#mermaid-svg-4fcViwsr7yxtjuv3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4fcViwsr7yxtjuv3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4fcViwsr7yxtjuv3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4fcViwsr7yxtjuv3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 当前噪声latent与噪声步
UNet有条件预测
UNet空条件或参考条件预测
CFG组合两路噪声预测
DDIM采样更新
更低噪声级别latent
达到最终噪声级别后停止循环,再由VAE解码。UNet估计怎么去噪,CFG调整条件作用,DDIM决定怎样更新状态。 它们是同一生成过程的不同环节。
17.4 MCTD 与 MCTS 是两个词,不能直接互换
前文讨论树搜索时出现的是 MCTS = Monte Carlo Tree Search,蒙特卡洛树搜索,不是MCTD。它通过反复选择、扩展、模拟/价值评估、回传结果,在"探索没试过的分支"和"继续研究看起来好的分支"之间分配计算预算。回传是更新搜索统计,不一定是对神经网络做梯度反传。
MCTD 也确实存在 :Monte Carlo Tree Diffusion,蒙特卡洛树扩散,对应 ICML 2025 论文 Monte Carlo Tree Diffusion for System 2 Planning。它将扩散去噪组织成树,对尚未完全去噪的计划进行评价、选择性扩展、剪枝与细化,结合MCTS式搜索与扩散生成。这里仅按原论文摘要解释定位,本次没有精读或复现MCTD算法。
它不是Drive-WM里新增的一个模块。 Drive-WM 是2023预印本/CVPR2024,采用候选轨迹、生成未来、规则奖励和树状推演;不能仅因有树形图就把它改称MCTS或MCTD。
若用户所见原文实际写的是MCTS,则按"蒙特卡洛树搜索"理解;若确实写MCTD,应定位到上述独立方法或其具体上下文,不能擅自判定为打错字。
17.5 参考分组是否固定?
在Drive-WM的nuScenes推理实现设定中,是预先指定的:
| 第一步先生成的参考视频 | 第二步条件生成的中间视频 |
|---|---|
| F 前视 + BL 左后 | FL 左前 |
| BL 左后 + BR 右后 | B 后视 |
| BR 右后 + F 前视 | FR 右前 |
也就是先联合生成 F、BL、BR 的未来,再生成 FL、B、FR 的未来。并非只拿三张当前照片、让其余三路做预测;第一步的三路本身也要生成未来。 第二步还用目标视角自己的历史上下文。
分组在本文推理实验中固定,不是每次按清晰度或置信度动态挑参考;但不是数学上永远只能选这一组三个方向,而是依据此相机布局选择交错分组。改变相机布局、训练与条件处理后,可以研究其他分组;本文没有据此证明任意分组可不改模型直接替换。
训练与推理也不同:附录B.2训练每次随机选六路之一作为目标,提供其两个相邻视角;推理才预定义 F、BL、BR 为参考、分两阶段生成。这不是在推理时偷偷使用目标时刻的真实参考画面。