2026/10/16 3:33:23

视觉中心4D占用预测:在占用世界里驾驶的世界模型范式

视觉中心4D占用预测:在占用世界里驾驶的世界模型范式 在自动驾驶算法圈里这两年最热的技术话题非“世界模型”莫属。但要论最能直接落地的世界模型形态我觉得还得是视觉中心的4D占用网格预测。标题里的“Driving in the Occupancy World”直译就是“在占用世界里驾驶”它属于典型的世界模型范式02也就是“BEV感知与规划耦合”这条路线。核心动作只有一个让车用环视相机观察当前场景然后预测未来几百毫秒到数秒内周围三维空间会被什么东西占据、占据在哪里、又变成什么样然后把预测结果直接递给规划模块去开车。它到底解决了什么大家熟悉的感知系统输出的是目标框可路上还有异形车、施工锥桶、垃圾袋、被前车挡住的行人这些目标很难用固定类别和框去表达。占用网格换了一种思路把空间切成小立方体只回答“这里有没有东西、未来还有没有东西”不硬套类别。这种思路原本多用在激光雷达方案里如今视觉中心也能做还兼顾成本和语义丰富度所以业内高度关注。这篇博文适合正在做感知或规划、想把前沿世界模型类工作落地成工程的同学阅读。我会把范式定位、架构细节、训练工程、规划接口和踩坑清单一次讲透。1. 范式拆解为什么“占用世界里的驾驶”会成为规划新主线1.1 从目标框到4D占用感知表征的关键跃迁自动驾驶感知的第一代主流输出是目标框。目标框适合描述车辆、行人这类刚性、规整、类别明确的物体但它有两个很难克服的天然局限一是必须预先定义类别集合遇到“不知道是什么但确实占着地方”的物体容易漏检二是框是规则的矩形无法表达物体的精细轮廓特种车辆的长吊臂、装载散货的卡车、倒下的树木用框来描述都会引入大量的误差。业界随后引入了BEV栅格在二维俯视图上同时给出语义与位置。BEV感知解决了跨相机、跨传感器统一坐标系的问题但它本质上是俯视的二维表示忽略了高度维。高架桥下的自车、商场地下车库的层高限制、货车后方伸出的货物这些场景里“垂直方向能不能过”才是关键。3D占用网格就是这条演进路的下一站把自车周围的空间离散成一个个小体素每个体素独立预测是否被占据。这等于从“给世界贴标签”升级为“给世界做物理状态的完整建模”。如果再给占用网格加上时间维让它预测未来多个时刻的空间占用状态就是题目里说的4D占用预测——3D空间再加上时间轴恰好构成一个只服务于驾驶的“世界模型”。我习惯用一个类比来解释这件事目标检测像“站在会议室门口数人头”你能知道里面有几个人但他们坐在哪、会不会走动、桌子有多大你一概不知。占用预测则像“给会议室的地面铺满方格地毯每隔半秒扫描一次每个格子里有没有人、有没有椅子、有没有可能被推开的路”。后者显然更适合回答“我能不能走、什么时候走”这类决策问题。1.2 “范式02”的定位世界模型与BEV规划的关系行业内聊世界模型时通常会分成几类思路。一类是生成式世界模型模型直接预测未来像素级画面适合做仿真和数据生产但像素预测对驾驶决策是间接的控制链路很长。另一类是端到端黑箱输入图像直接输出方向盘转角与加减速解释性和安全审计难度大。而标题里的范式02走的是中间表征路线感知出BEV/占用网格这类结构化中间结果规划模块在这个中间表征之上完成决策。范式02的核心特点是“解耦但不切断”。感知和规划各自保留模块边界模型之间通过占用图、代价图这类可解释的接口传递信息。相比纯端到端它更容易定位问题车开得不好是感知预测错了还是规划在代价图上选错了轨迹拆开查就行。相比生成式世界模型它更贴近驾驶任务本身不需要生成无用的环境像素。我在实际项目里的体会是对量产落地来说范式02几乎是当前最稳妥的路线。占用预测模块可以先用离线数据充分评测规划模块可以继续沿用成熟的采样与优化方法两个团队并行迭代接口稳定之后两边改动都相对小。标题里的这篇工作就非常典型它没有把“用占用世界来开车”停留在概念上而是真的把占用预测接入规划代价图让下游可以对着未来的占用直接做轨迹评估。1.3 视觉中心方案成本、密度与泛化的三重选择占用网格最早大量出现在激光雷达路线上原因很简单激光雷达直接给出三维点云转成体素只需要做“有点云的体素标为占用”的离散化工程上很直接。但激光雷达的成本、车顶安装的造型约束、远距点云稀疏的问题都真实存在尤其到了大批量量产阶段纯激光雷达方案的性价比很难被接受。视觉中心的方案用环视相机替代激光雷达优势首先来自成本一套高质量的环视摄像头硬件成本远低于激光雷达。其次是视觉信息的物理属性图像有密集的纹理和颜色既能支撑细粒度几何判断又能提供车道线、交通灯、路面标志等语义。激光雷达在雨天、尘雾下退化明显视觉方案虽然也受影响但可以依靠多视角冗余和时序信息做一定补偿。视觉方案最大的难关是把2D图像“抬”到3D空间本质是逆深度估计。这个问题在Transformer与注意力机制流行之后有了统一解法不再依赖单目深度估计的强先验而是让模型在3D空间位置上去图像特征里“查询”。如今视觉占用预测已经能在公开数据集上达到接近激光雷达占用预测的几何精度这在三年前是很难想象的。有一点要坦白纯视觉4D占用预测现在拿去做L4级别的主传感器安全冗余我依然觉得底气不足。但把它用在L2/L3的前向碰撞缓解、异形障碍物告警、低速泊车与园区接驳已经是非常实在且性价比很高的方案。2. 核心架构视觉中心4D占用预测是怎么跑起来的2.1 一条完整链路多摄输入到未来占用输出整个系统可以拆成五段。第一段是环视相机系统常见配置是6到8路摄像头覆盖自车周围360度。第二段是图像特征提取通常用卷积网络提取多尺度特征。第三段是空间编码把图像特征从2D像素坐标系转换到以自车为中心的3D体素坐标系这一步是视觉占用预测的命门。第四段是时间融合把过去1到2秒的观测序列压缩成当前的状态特征相当于让模型拥有“短期记忆”。第五段是预测输出在记忆特征之上同时解码出当前时刻和未来多个时刻的占用体素。如果通俗地描述这条链路我会把它比作“拆盲盒加推演”摄像头是眼睛负责看空间编码是工作台负责把看到的东西摆到正确位置时间融合是记忆负责把刚才发生了什么留在脑子里预测头是推理官负责回答“下一秒哪里会被占”。整条链路最后输出的是若干个三维体素网格每个网格里装着“空闲、占据、未知”的概率以及可选的语义类别。这里有一个容易被新手忽略的点未来占用预测不是让模型直接输出一串视频而是输出多帧体素栅格。栅格本身是离散的而驾驶控制需要连续感知所以实际工程中还会配合插值或平滑滤波把离散预测变成连续可用信息。后面讲规划接口时会再展开。2.2 空间维度图像到体素的困难与常规解法视觉占用预测最核心的问题只有一个怎么知道图像里的某个像素对应三维空间里的哪个体素。这是一个逆投影问题因为单张图像天然丢失了深度信息。环视系统能缓解一部分但不同相机之间重叠视场有限遮挡区域更是完全没有信息。目前主流解法大致分成两派。第一派沿用经典的深度分布估计思路对图像中的每个像素预测一个深度分布然后把像素特征按照深度分布的期望撒到三维截锥体栅格里最终通过体素池化得到每个栅格的特征。这种方案的优点是几何先验强相机外参变化后可以直观地重新投影部署调试比较方便。缺点是需要比较细致的深度监督或很强的隐式学习否则远距离深度容易漂移。第二派是用注意力机制做3D查询在体素空间的每个栅格位置定义一个查询向量通过可变形注意力从多路图像特征中采样信息直接解码该栅格的占用状态。它不需要显式估计像素级深度而是让模型自己学习“查询这个体素时该去看图像的哪几个点”。工程上这类方案对长距离、遮挡场景更鲁棒缺点是计算量较大且可解释性略差。我自己的实践经验是如果传感器外参标定稳定、算力相对充足注意力查询方案更容易调出好效果。如果项目还在早期团队对外参漂移容忍度低深度分布撒点方案更容易快速跑通。两种方案没有绝对优劣关键看维护成本和性能要求。2.3 时间维度过去上下文与未来预测的两种策略4D中的第四维也就是时间处理方式决定了模型到底是在“干活”还是“背诵”。输入侧必须做时间建模否则单帧图像无法可靠估计速度与加速度输出侧也要决定如何组织未来帧预测这会直接影响模型结构和训练难度。先看输入侧。常见做法是把连续1到2秒的视频帧序列送入模型在空间编码之后引入时序模块。时序模块的选择上轻量场景常用门控循环单元把历史信息逐步压缩成隐藏状态简单且稳定复杂场景则用时空注意力让模型学习跨帧特征之间的对应关系。需要注意输入帧率不是越高越好过高的帧率会让模型学到大量冗余静态信息反而忽视了真正重要的动态变化。工程上常用的输入帧率在10到15赫兹历史窗口覆盖2秒左右。再看输出侧未来预测有两条经典路线。一条是并行直接预测模型一次性输出未来K帧占用栅格每一帧对应一个未来时刻。训练简单推理也只要一次前向但如果没有额外的时序约束相邻预测帧之间容易抖动。另一条是自回归预测模型先预测下一帧占用再把它作为输入滚动预测下一帧优点是与环境动态演化的物理过程一致误差会累积但轨迹更连续。我在实际项目中更常用混合方案模型并行输出未来8帧覆盖约2秒但在训练时加入时序平滑正则推理后再对相邻帧做一次轻量级的时空滤波。这样既保留了并行预测的高效率又缓解了抖动问题。预测时长需要量力而行超过3秒的占用预测置信度会迅速下降强行拉长不仅无益还会把精度拖垮。3. 训练与工程实现把论文变成能跑的系统3.1 标签从哪来4D占用的监督信号构造训练视觉中心4D占用预测最直接的问题是真值从哪来。当前时刻的占用标签通常用激光雷达点云离线生成将一段时间内累积的点云去除动态物体、剔除地面后映射到自车坐标系下的体素网格有足够点云的体素标记为占用。地面点需要特殊处理因为行驶路面本身是“可通行”的直接标为占用会让规划器误判。常见做法是通过高度阈值或路面分割算法把地面体素单独挑出来。未来时刻的占用标签要麻烦一些。最朴素的思路是把未来时刻的激光雷达点云也转成占用体素与模型输出的未来帧算损失。但激光雷达点云只覆盖当前已经被照亮的几何表面对未来会出现的被遮挡物体无能为力所以严格说这种做法监督的是“未来能观测到的占用”而不是“未来真实的占用”。这也解释了为什么视觉模型在遮挡恢复场景容易漏标签本身就没给它足够的信息。有团队尝试用多帧点云配准与动态物体跟踪叠加高精地图先验来扩充未来标签但工程复杂度高。我的建议是早期先使用简单的未来点云监督把模型跑通跑稳再逐步加入语义分支和时序一致性约束。如果一开始就追求完美标签数据管线会拖垮整个项目。3.2 损失函数与训练技巧不只是二值交叉熵占用预测从损失角度看是一个体素级二分类问题每个体素预测占据或空闲。但这个问题有一个很大的麻烦——正负样本严重不均衡。一辆车周围50米半径的三维空间里绝大多数体素都是空的如果直接拿普通交叉熵训练模型会迅速收敛成“全预测为空”因为这样损失已经很低了。工程里常用两种武器对付不均衡。一是Focal Loss通过调节难易样本的权重让模型把注意力放在那些被误分类的占据体素上二是给占据体素设置更高的固定权重比如占据与空闲的权重比设为3比1到5比1具体数值需要根据验证集调整过大反而会让模型过度激进地预测占用。另外如果预测头包含未来K帧我比较倾向给未来帧的损失设置随时间递增的权重。比如第t帧的权重是w_t 0.5 0.5 * t因为长时预测更难如果所有帧一视同仁模型会只顾优化近帧而放弃远帧。语义占用比如区分车辆、行人、道路则需要额外加一个多分类头和一个类别加权交叉熵损失类别权重根据训练集的体素频次反算。# 一个大致可用的占用预测损失组合 # 假设 pred_occ: [B, K, H, W, D]gt_occ 同形状二值 focal sum_focal_loss(pred_occ, gt_occ) # 处理正负不平衡 future_weights 0.5 0.5 * arange(K) # 未来时间步权重递增 loss_occ mean(focal * future_weights) # 可选时域平滑正则减缓帧间抖动 smooth_reg mean((pred_occ[:, 1:] - pred_occ[:, :-1]) ** 2) # 近帧的平滑可以强一些远帧弱一些 loss_total loss_occ alpha * smooth_reg这个代码片段只是骨架训练时还需要配合梯度裁剪与混合精度。需要提醒的是时域平滑正则的权重alpha别设太大否则模型会学成“所有帧都一样”彻底丧失预测动态的能力。我见过有人alpha设到1.0结果模型输出的未来帧几乎不发生任何变化指标反而诡异的高一上实车就露馅。3.3 计算预算与实时性显存、稀疏化与推理加速视觉4D占用预测在论文里很“美”但工程落地第一关是算力。以自车前方60米、后方20米、左右各40米、高度从地面到6米的常见范围为例如果用0.5米分辨率体素网格大约长160、宽160、高12总计超过30万个体素。如果输出未来8帧那就是240多万个预测单元。对车载芯片来说这不是一个可以轻松全量计算的任务。第一个优化方向是稀疏化。三维空间中大量体素是空的没有必在每个空体素上都跑一遍特征计算。用稀疏卷积或稀疏注意力只处理“有内容”的体素往往能把计算量降到稠密方案的十分之一甚至更低。代价是实现复杂度高很多车载推理框架对稀疏卷积的支持并不友好选型时要把工具链成熟度一起考虑。第二个方向是近远分辨率分级。近处30米内用0.5米的高分辨率用来判断可通行缝隙远处用1米甚至更粗的分辨率反正远端精度本来就有限。这样做既保住了关键区域精度又显著压低了计算量。第三个方向是量化与TensorRT/专用NPU适配INT8量化后视觉占用模型一般会掉2到3个点的mIoU但延迟往往能降低一半左右。我试过把体素分辨率从0.5米改成0.25米显存直接翻成四倍多推理延迟也接近翻倍几何精度只涨了零点几个百分点极其不划算。预算有限时与其无脑提分辨率不如把时间窗口和预测帧数调优。4. 从占用预测到驾驶决策规划器到底怎么用4.1 代价图接口把占用输出变成规划约束占用预测输出本身是一堆体素概率规划器不可能直接拿体素来算。工程里最常见的一步是把占用预测转换成时空代价图。所谓时空代价图可以理解为一张三维表格x和y表示空间位置t表示未来时刻数值表示“自车在t时刻经过该位置的风险代价”。转换方式并不复杂。对当前时刻的占用直接映射为不可通行障碍对未来时刻的占用要根据时间戳放入对应的时间层。规划器在做轨迹采样时每条候选轨迹都有三维坐标轨迹点和时间戳系统会去查这个轨迹点所在的时空体素是否被预测为占用。如果占用概率高这条轨迹会被重罚甚至直接淘汰如果占用概率低可以轻微惩罚后放行。这个过程让“预测”和“决策”建立了可解释的联系。一个实用的经验是不要把未来占用当成硬约束硬切一旦模型误报很可能会导致规划找不到可行轨迹车辆停在原地。更好的做法是把它作为软代价和舒适性、效率、车道中心偏移等目标一起加权优化既保证安全又保留规划的灵活性。4.2 不确定性与安全冗余预测错了怎么办任何预测模型都会错4D占用预测也不例外。问题的关键在于当模型出现误报或漏报时系统能不能安全降级。模型输出的占用概率本身是最基础的不确定性度量但概率高低并不完全等于置信度因为模型可能过度自信。我在工程里会额外加一个不确定性分支让模型同时预测“占据概率”和“概率估计的置信度”。低置信度区域视为“未知”和空闲体素、占据体素区分开。规划器对“未知”区域的处理策略是保守通过除非有动态证据表明前方安全否则按软障碍处理。这有点像人类开车时的本能看到路边有个模糊阴影时你会下意识减速而不是直接判断那是什么。另一个工程上很实用的手段是多帧一致性校验。如果连续两三帧都预测某个区域被占据才把它标记为稳定障碍单帧孤立的高概率占用大概率是噪声。通常做法是维护一个短期置信度缓存用指数移动平均或投票机制做平滑。代价是引入几百毫秒的延迟但换来的是更少的假报警。这个延迟对低速场景完全可以接受对高速紧急制动场景就要谨慎权衡。4.3 典型场景表现cut-in、鬼探头与异形障碍物好的技术不能只在指标上漂亮得拿到真实场景里看表现。我特别关注三类场景。第一类是相邻车道cut-in。目标检测方案要等对方车辆明显侵入本车道甚至越过车道线才告警容易触发急刹。4D占用预测通过未来占用模型能在相邻车道车辆还未完全切入时就预测出未来1秒左右它会占用的空间区域规划器可以提前松开加速踏板或轻微制动体感明显更从容。第二类是遮挡恢复俗称“鬼探头”。被大车遮挡的行人很难在出现前被检测到但占用预测利用历史线索与场景上下文可以对遮挡区域输出较高但不确定的占用概率。规划器面对这种“看不见但可能有人”的区域会主动降低车速。这不能保证绝对避免所有碰撞但能把碰撞速度和反应距离压到一个更可控的范围。第三类是异形障碍物。工程车的机械臂横在路中、货物从货车尾部伸出、事故车碎片散落一地——这些物体类别未必在训练集里目标检测很可能漏检但占用预测对任意形状的空间占用天然敏感它们会被直接标记为不可行驶区域。这不只是多了一个感知头而是给系统加了一张兜底的安全网。5. 实践中的坑与排查清单5.1 坐标系与时间戳四个最容易被忽略的细节第一个坑是坐标系原点不一致。感知模块常把体素坐标系原点设在车辆后轴中心规划模块却以车头最前端作为碰撞判断原点。正向行驶时差异不大但倒车入库、狭窄路口转弯时这几十厘米的偏差可能直接导致“感知觉得能过规划觉得要撞”。第二个坑是相机外参标定误差。摄像头的安装位置与角度在生产装配中会有偏差做视觉3D重建时外参误差会被空间投影放大。以30米远的物体为例外参角度误差1度会造成约0.5米的横向偏移按0.5米体素分辨率算足足偏出一个体素。标定参数需要定期校验不能一劳永逸。第三个坑是时间戳同步。环视相机如果帧时刻不对齐相当于把几个摄像头在不同时刻看到的场景硬拼在一起做3D重建动态物体会出现“重影”。滚动快门的相机情况更严重画面逐行曝光时间不同高速场景下误差不可忽略。我排查过很多次莫名其妙的动态物体误报最后都是时间同步精度不够引起的。第四个坑是点云标签与图像的坐标对齐。离线生成占用真值时激光雷达与相机的时间对齐、空间对齐必须逐一检查。最有效的排查手段是人工把点云投影到图像上目检轮廓边缘如果出现系统性偏移多半是标定或外参有问题。5.2 评估指标陷阱为什么mIoU涨了路却开不好占用预测论文里最常用的指标是mIoU看预测占用与真值之间的重叠程度。但我在实践中发现mIoU高和“开车开得好”之间并没有完美的对应关系。一个原因是类别不均衡。静态背景比如道路两侧的护栏、建筑占了动态物体的大头模型只要把静态背景学好mIoU就能涨得很漂亮。但对驾驶决策影响最大的恰恰是占比极小的动态车辆与行人它们稍有误报或漏报安全性和舒适性就会显著变化。所以评测时一定要把动态物体单独拆出来看指标不能只看全局mIoU。另一个原因是未来帧指标很容易被“预测不动”骗过去。如果模型输出的未来占用和当前帧几乎一致在低速静止场景下误差不大但一旦进入动态场景就完全没有预测能力。我在验证模型时会额外计算预测帧与当前帧之间的差异量平均位移或变化体素数确保模型真正在“动”而不是静态复制。还有一点是体素分辨率对指标的影响。粗分辨率下相邻体素之间容错更高mIoU天然会虚高。跨方案对比时如果分辨率不一致指标几乎不具备可比性。我建议评估时固定一套分辨率并同时报告近程、中程、远程的分项指标。5.3 部署经验从PyTorch到车载硬体的路程把论文模型搬上车是另一个世界。首先稀疏卷积在主流车载推理框架上的支持普遍不友好很多团队早期选稀疏方案后期发现量化算子缺失不得不退回稠密计算。我的建议是选型前先把目标平台算子清单打开确认需要的算子都有高性能实现。其次INT8量化对占用预测的伤害比检测任务更明显。空体素与占据体素之间的logit差如果本来就小量化会让边界模糊化造成大量误分类。一个缓解办法是在量化校准阶段给占据体素样本增加权重让校准数据集更贴合推理时遇到的正负样本比例。如果平台支持部分层FP16混合精度也可以只量化图像编码器保留占用头为FP16收益非常明显。部署时还有一个容易忽略的点动态shape。车载部署通常希望输入尺寸固定但注意力机制和时序模块的内部序列长度可能随输入帧数变化。如果在模型导出时没有固化时间维长度推理框架会重新做内存分配引发延迟抖动。我习惯把“固定历史帧数固定未来帧数固定体素分辨率”作为部署约束训练时就用这些固定值从源头杜绝不确定性问题。最后再聊一点个人体会。我最初接触这类世界模型时也觉得它离量产很远更像学术概念。但真正把4D占用预测和规划器接通之后我才理解“在占用世界里驾驶”这句话的力量它把感知从“识别物体”提升到“理解空间随时间的变化”进而让规划器拥有了对未来的感知。这条路当然还有很多问题标签噪声、遮挡恢复、长尾场景都是硬骨头但方向是明确的。未来大概率会把语义、实例、运动估计逐步融合进来骨架不会变——预测未来占用空间顺着它开车。希望这篇文章能帮你少踩几个坑也欢迎你在实践中遇到不同问题时带着具体场景再来和我交流。