3. Occupancy Flow核心概念
Occupancy Flow(占用流)是动态占用预测中的核心表示方法。它把三维空间离散为体素,并在每个体素上同时描述“是否被占用”以及“占用体素在下一时刻将向何处运动”。如果说普通占用栅格回答的是“哪里有物体”,那么占用流进一步回答“这些物体正以多快的速度、朝哪个方向移动”。本节围绕占用流场的定义、时空体素表示、速度矢量与流场建模、静态与动态占用分离,以及它与光流、场景流的区别联系展开。
一、占用流场的定义
占用流场可以理解为一个定义在三维空间上的矢量场:对任意空间位置 (x, y, z) 和时间 t,它给出该处的占用状态 o 与运动速度 v = (vx, vy, vz)。形式化地,可写作:
F(x, y, z, t) = { o(x,y,z,t), v(x,y,z,t) }
o ∈ {0, 1} 或 [0,1] 占用概率
v = (vx, vy, vz) 单位 m/s
其中 o 表示该体素被占据的可能性,v 表示该体素内物体在单位时间内的位移趋势。与只输出静态栅格的 Occupancy Grid 相比,占用流多了一个“运动维度”,因此能够表达行人横穿、车辆变道、自行车斜向穿行等连续运动。需要强调的是,占用流描述的是“空间位置上的运动”,而不是“某个具体目标 ID 的运动”,这使它天然适合处理遮挡、新出现目标和密集场景。
二、时空体素表示
占用流通常建立在时空体素(Spatio-Temporal Voxel)之上。空间被划分为规则网格,例如 0.2m × 0.2m × 0.2m 的体素;时间被划分为固定步长,例如 0.5s 一帧。每个体素在时间轴上形成一条“体素柱”,记录该位置随时间的占用变化与速度变化。
这种表示有三个关键参数:体素分辨率、时间步长和感知范围。分辨率越细,小目标(如锥桶、宠物)越容易被保留,但显存和计算量上升;时间步长越短,运动估计越平滑,但需要更高帧率的输入。工程上常见配置如下:
| 参数 | 典型取值 | 影响 |
|---|---|---|
| 空间分辨率 | 0.1 ~ 0.4 m | 越细越能保留小目标,计算量越大 |
| 时间步长 | 0.2 ~ 0.5 s | 越短运动越平滑,依赖高帧率输入 |
| 感知范围 | 前后 50 ~ 100 m | 决定预测可用空间与远距离精度 |
| 高度范围 | -2 ~ 4 m | 覆盖地面、车辆与行人高度 |
时空体素的价值在于把“过去—现在—未来”统一到同一张三维网格中。模型可以在时间维度上做卷积或注意力,从而学习“某个体素过去如何被占用、现在速度如何、未来可能流向哪里”。
三、速度矢量与流场建模
速度矢量是占用流的灵魂。对每个被占用的体素,模型需要估计其速度 (vx, vy, vz)。常见建模方式有三类:
- 逐体素回归:网络直接对每个体素输出三维速度,简单直接,但容易在物体边界产生模糊。
- 流场匹配:假设相邻两帧的占用体素之间存在对应关系,通过匹配或可变形卷积估计位移,再除以时间得到速度。
- 概率流场:输出速度分布而非单一值,用多模态表达处理行人可能左转或右转的不确定性。
在训练中,速度监督通常来自连续两帧的占用真值:若某体素在 t 时刻被占用,在 t+Δt 时刻移动到邻近体素,则位移除以 Δt 即为速度标签。对于遮挡区域,可采用一致性损失或自监督光度损失进行补全。
工程提示:速度矢量建议在 BEV(鸟瞰)平面先估计 vx, vy,再单独估计 vz。因为绝大多数交通参与者的垂直运动很小,分开建模可以降低学习难度,也便于与下游规划模块对接。
四、静态与动态占用分离
占用流场中,静态占用与动态占用必须显式分离。静态占用包括路面、护栏、建筑、停放车辆等,其速度接近零;动态占用包括行驶车辆、行人、骑行者等,其速度显著非零。分离的意义在于:
- 避免静态结构被错误预测为运动,减少“幽灵流动”。
- 让动态体素获得更集中的速度监督,提高运动估计精度。
- 为下游规划提供更清晰的“可通行区域”与“动态障碍物”划分。
常见做法是引入一个静态/动态分类头,或利用时序一致性自动区分:若某体素在长时间窗口内占用状态稳定,则判为静态;若占用位置持续迁移,则判为动态。也可以结合语义分割结果,把道路、建筑等类别强制归入静态分支。
常见误区:把“速度为零”等同于“静态”。实际上,一辆暂时停住的车辆仍属于动态目标,它可能随时启动。工程上应结合语义类别与时序行为共同判断,而不是只看瞬时速度。
五、与光流、场景流的区别联系
光流描述的是图像像素在二维平面上的运动,场景流描述的是三维点云或深度图中每个点的三维运动。占用流与它们既有联系又有本质区别:
| 概念 | 定义域 | 输出 | 主要用途 |
|---|---|---|---|
| 光流 | 2D 图像像素 | 像素位移 (u, v) | 图像对齐、运动分割 |
| 场景流 | 3D 点云/深度点 | 三维位移 (dx, dy, dz) | 点云配准、目标跟踪 |
| 占用流 | 3D 体素网格 | 占用概率 + 速度矢量 | 动态占用预测、规划避障 |
三者的联系在于都描述运动,且可以互相转换:光流结合深度可反投影为场景流,场景流经过体素化与聚合可得到占用流。区别在于,光流和场景流通常只对“已观测到的点”给出运动,而占用流在体素空间上定义,能够对遮挡区域、未观测区域进行预测和补全。这正是占用流在自动驾驶占用预测中不可替代的原因。
六、案例:路口右转场景
假设自车在路口准备右转,右侧人行道上有行人正在横穿,前方有车辆直行。普通占用栅格只能给出“右侧有占用、前方有占用”,而占用流场会进一步给出:行人体素的速度矢量指向自车前方,车辆体素的速度矢量沿道路方向。规划模块据此可以判断:行人将在 1.5 秒后进入自车路径,需要减速让行;前方车辆速度稳定,可保持跟车。若没有速度矢量,规划只能依赖保守的“有占用就停”,通行效率会显著下降。
本节小结:占用流 = 占用概率 + 速度矢量,建立在时空体素之上;它通过静态/动态分离提升运动估计质量,并与光流、场景流形成互补。理解占用流的定义与表示,是后续学习占用流预测网络、损失函数与工程部署的基础。