MobileOcc: A Human-Aware Semantic Occupancy Dataset for Mobile Robots¶
会议: ECCV 2026
论文: ECCV 原文
代码: https://autonomousrobots.nl/paper_websites/mobileocc
领域: 自动驾驶
关键词: 3D 语义占用, 移动机器人, 人体网格优化, 占用预测基准, 行人速度预测
一句话总结¶
本文基于 UT Campus Object Dataset (CODa) 的同步图像与 LiDAR,构建了面向行人密集环境的移动机器人语义占用数据集 MobileOcc:用「单目 SMPL 初值 + LiDAR 点云联合优化」的可形变人体网格取代传统刚体包围盒来标注行人,共 116,511 帧、标签分辨率最高 0.02 m,并配套占用预测与行人速度预测双任务基准;静态体素标签 mIoU 为 71.2,行人体素对 LiDAR 体表参考的 F1 达 92.5,而现有占用模型在该基准上 mIoU 仅 26.6–29.9。
研究背景与动机¶
3D 语义占用预测已经是现代导航感知栈的常规组件:VoxFormer、OccDepth、TPVFormer、SurroundOcc、FlashOcc、Panoptic-FlashOcc 这一类方法直接从图像推断一个体素场,为每个体素给出 free / occupied / unknown 状态与语义标签,从而得到一个可微、可接进下游规划的感知表示。但支撑这些模型训练的标注数据集几乎全部长在自动驾驶场景里——SemanticKITTI、Occ3D、OpenOccupancy、SSCBench 建在 KITTI、nuScenes、Waymo 之上,WildOcc 覆盖的是越野路况。它们共同的取向是刚体世界:道路、建筑、车辆是主角,动态物体按预先标好的 3D 包围盒位姿把多视角点云累积成刚体。行人在这些数据集里既稀少、又被当成刚体处理,非刚性的体态被抹掉了。
这在移动机器人上是个硬伤。机器人在人行道、校园、商场里跑的时候,人不是背景噪声,而是最常打交道的实体;而且人决定占用形状的恰恰是肢体——张开的手臂、迈出去的腿、抱着箱子的姿态。用包围盒近似一个人,等于把人体和它周围一圈空气一起宣告为 occupied,在拥挤人流里的窄缝通行、社交感知导航、需要肢体级精度的物理人机交互中,这种体积膨胀直接就是不可通行或者不安全。更麻烦的是,车载占用数据集基本不带实例跟踪(只有 OpenScene 一类提供),而人群导航关心的不只是「这里有没有被占」,还包括「这团占用是同一个人的、并且正在往哪走」——这就要求占用标签带 per-instance 身份并支持速度评测。
本文因此选了一条「空白填补」的路:不是改进某个占用网络,而是把缺的那块数据补上。之所以现在才可能做,是因为 CODa 这类机器人平台数据集已经提供了长时序、同步的相机—LiDAR 数据,而且 2D 人体网格恢复(SMPL 系)与 LiDAR 人体拟合两条线各自都成熟了——但它们单独用都不够:纯图像 HMR(CLIFF、ROMP、HybrIK 等)有深度和尺度歧义,相机坐标系里姿态看着对,绝对位置却不可信;纯 LiDAR 拟合(LiDARCap、LiDAR-HMR、VoteHMR)依赖数据集特定训练,而且当人体点与邻近物体点混在一起、或远距离点变稀时会漏检、姿态不确定。核心 idea:让图像负责给出可靠的初始姿态与体型、让 LiDAR 负责给出绝对定位与体表约束,用一个免训练的推理时优化把两者缝合成可形变人体网格;再把它与「显式屏蔽了行人证据」的静态语义地图在机器人坐标系下按动态优先的仲裁规则装配成带实例 ID 的体素占用标签,并把占用预测与行人速度预测做成有指标、有基线实现的可复现基准。
方法详解¶
整体框架¶
整条流水线吃的是 CODa 机器人在校园里跑动时采集的同步 RGB 图像流、LiDAR 扫描和轨迹位姿,吐出来的是机器人局部坐标系下的语义占用体素(最高 0.02 m,输出用 nuScenes 格式,方便直接接现有工具链)。流程分三步:先做一次跨模态预处理,把数据对齐成「带 ID 的行人 + 带语义的 3D 点」;然后分成两条并行支线,一条把行人做成可形变网格(人体网格优化),另一条把除行人以外的世界做成无人静态语义地图(静态语义地图构建);最后两条支线在共享的机器人局部坐标系里合流,按优先级仲裁每个体素该归给谁(占用标签装配),得到同时含静态语义与动态人体占用的体素网格。这张网格既可以直接给下游用,也被降采样成 0.2 m 的评测网格,定义出占用预测与行人速度预测两个任务及其基线(双任务基准)。
预处理本身不是本文的贡献,但它是后面一切的前提,值得说清:用 YOLOX 检测 + OC-SORT 跟踪得到带 ID 的 2D 行人框;对每个被跟踪的人用 ViTPose 估计 2D 关键点及其置信度;用 Mask2Former 取实例掩码并把掩码与 LiDAR 点云关联(这一步决定了哪些 3D 点属于这个人);静态背景元素用 Cityscapes 类别体系的语义分割打标。所有预处理结果都带时间戳、跨模态互相指认,之后人体网格优化与静态建图都在这个共享的时间—空间基准上进行。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["同步图像 + LiDAR + 机器人位姿"] --> B["预处理:跟踪 / 2D 姿态<br/>实例掩码 / 语义分割"]
B --> C["人体网格优化<br/>可见性过滤 → ICP → 联合优化"]
B --> D["静态语义地图构建<br/>屏蔽行人 → 多帧融合 → OctoMap"]
C --> E["占用标签装配<br/>动态优先仲裁 + 实例 ID"]
D --> E
E --> F["语义占用标签 0.02 m<br/>基准降采样到 0.2 m"]
F --> G["双任务基准<br/>占用预测 + 行人速度预测"]
关键设计¶
1. 人体网格优化:用 LiDAR 体表约束消除单目 HMR 的深度与尺度歧义
前面说过,单目人体网格恢复(HMR)输出的 SMPL 网格在相机坐标系里看着姿态合理,但绝对深度和尺度不可信;而 LiDAR 方法反过来——绝对位置准,可在人体点与背景点交叠、或人离得远点变稀的时候就会漏检、姿态也会跑偏。这个设计的做法是两者都要:先从图像拿到一个初值,再用点云把它拉回真实的三维位置和体态,整个过程分三段,且不训练任何网络、不做数据集特定监督,因此可以原样搬到别的数据集上跑。
第一段是可见性过滤。给定 CLIFF(一个把整帧位置信息带进裁剪图的 top-down HMR 回归器)预测的初始 \(\beta_0, \theta_0, t_0\),利用 2D 关键点的置信度判断哪些身体部位在图像里其实是被遮挡的,只保留可见顶点子集 \(\mathcal{V}\subset M\),其中网格顶点 \(M(\beta,\theta)\in\mathbb{R}^{6890\times3}\)。这一步的意义在于:被挡住的手肘、被身体挡住的腿,其图像证据本来就不存在,硬拿它们去和 LiDAR 对齐只会把姿态拽坏;先标记为「不可见」,后面才好在优化里对它们做保守处理。第二段是粗对齐,用 ICP 把可见顶点 \(\mathcal{V}\) 配准到 LiDAR 点云 \(\mathcal{P}\) 上,求一个刚体变换 \(T\in SE(3)\),初值由 \((\theta_{\text{glob}}, t_{\text{cam}})\) 给出,更新后得到新的全局朝向与平移 \((\theta'_{\text{glob}}, t'_{\text{cam}})\)——它解决的是「这个人到底在哪儿」。但 ICP 是刚性的、不会改关节角,所以刚对齐完的网格可能和图像里的姿态不再一致(原文 Fig. 2 用红圈标出这种不一致)。第三段才是联合优化:把体型 \(\beta\)、姿态 \(\theta\)、相机平移 \(t_{\text{cam}}\) 全部放开,让网格同时拟合 2D 关键点和 LiDAR 点,再叠上人体先验,即最小化 \(\mathcal{L}_{\text{total}}(\beta,\theta,\mathbf{t}_{\text{cam}})\)(具体项见下文「损失函数」)。三段的分工是清晰的:可见性过滤决定「信谁」,ICP 决定「在哪」,联合优化决定「摆成什么姿势」。
相对 SMPLify 那套经典的单图拟合,本文去掉了几何穿插(interpenetration)项,换成 LiDAR–网格 Chamfer 对齐项与遮挡感知的姿态一致性项,保留 2D 重投影、MoG 姿态先验、抗过伸先验与体型先验。去穿插的理由很具体:它计算代价高而在最终精度上贡献有限;更重要的是,本文的占用是从网格表面体素化出来的,穿插基本只造成体内罕见的自重叠,几乎不改变 occupied/free 的边界,因此没必要为它付代价。反过来,遮挡一致性项针对的恰恰是「被挡住的肢体在 LiDAR 里没证据、容易被优化拽到离谱位置」这个真问题。
2. 静态语义地图构建:把行人证据显式抹掉再做多帧融合
静态语义地图是整张占用标签的背景层,它的正确性有个隐蔽的敌人:如果在建图时把行人点当作普通几何累积进去,背景里就会「印」上人的残影——这个位置在绝大多数帧里其实是空的,而静态图是全序列共享的,一处残影会跨帧、跨视角地传播成一个凭空多出来的障碍物。更糟的是相机看不到的行人(视锥外、被建筑遮挡)根本没法靠图像检测排除。
本文的做法是在两个地方下手。其一是行人证据抑制:每个 sweep 跑一次 LiDAR 3D 检测器,把它的行人输出与图像行人检测结果合并成掩码,落在掩码里的点一律不参与静态建图。LiDAR 通路的价值正是补上相机视锥之外的盲区。这一阶段不改任何语义标签、也不训练任何模型,唯一目的就是在建图前把行人证据压掉。其二是多帧聚合:把每个 sweep 做位姿补偿,用相机得到的语义把标签提升到对应的 3D 点上,再插进一个维护「每体素标签计数」的体素图;随着帧数累积,体素标签用 max-voting 更新,同时用地面一致性一类的几何校验剔除外点。序列处理完后,每个体素获得一个确定的语义标签,剩下的空格子交给 OctoMap 查询补上 free / unknown 状态。于是最终得到的是一个「无人」的高分辨率静态语义背景,人体占用由另一条支线单独叠加——两者职责分离,谁出错都不会污染对方。
3. 占用标签装配:动态优先的标签仲裁与实例级 ID
有了无人静态背景和逐帧的人体网格,最后一步是把它俩合成一张自洽的占用网格。每条帧里,当前帧的静态点与栅格化的人体网格都按同步的机器人位姿变换到同一个局部坐标系再体素化。真正的设计在标签仲裁的优先级顺序上:动态人体压过静态背景。这条规则看着朴素,却同时兜住了两个工程隐患——其一,即使静态建图阶段漏掉了某个行人(掩码没盖住),人体网格仍会在最终标签里把这块体素从背景手里「顶」回来;其二,正因为静态图建有行人抑制、且人体占用在对齐时优先,检测漏检的影响被限制在它发生的那一帧内,不会通过静态图扩散成全局错误。对没有行人落入的体素,用「多数标签胜出」规则定标签,避免同一个体素里几个点标签来回抖动(label oscillation)。仍有剩余的空格子则用 OctoMap 查询补齐 free / unknown,让 occupied 空间始终有显式几何支撑。
Human-aware 这件事在这里落到两个具体处,而不是靠多定义几个身体部位类别。一是几何:行人不是包围盒,而是逐帧优化的 SMPL 网格填出来的体素,因此在 0.02 m 的细分辨率下能保留肢体级形状(原文 Fig. 1 就是这个对照:同一场景细分辨率 vs 粗分辨率);二是身份:每个被跟踪行人被赋予一个唯一实例 ID,行人体素因此带 per-instance 标签,整张网格上静态语义与动态人体占用共存。最后一项是分辨率与格式:体素网格分辨率由用户指定,最高 0.02 m,基准评测里统一降采样到 0.2 m;输出按 nuScenes 数据集格式组织,以便与现有工具链直接对接。
4. 双任务基准:把车载占用模型搬到单目 / 立体 / 全景设置下
数据集本身只是一半工作,能复现的评测协议是另一半。本文在 0.2 m 体素、\(x\in[0.4,10.0]\) m、\(y\in[-4.8,4.8]\) m、\(z\in[-1.0,3.8]\) m 的网格上、以 5 Hz 帧率评测,语义类别收敛为 10 类(1 个 free-space + 9 个 occupied 类),把 bicycle / motorcycle / scooter 合成 two-wheeler、若干静态结构类合成 other-structure 以降低长尾类别的噪声。训练集 92,303 帧、验证集 24,208 帧(79/21%),其中带行人标注的分别是 30,457 与 7,165 帧。
基线适配是这一节最实际的部分,因为 MobileOcc 的输入分布和车载数据集并不一样:BEVDet4D、FlashOcc、Panoptic-FlashOcc 原本都假设多视角环视相机,而本数据集只有前视图像,于是把它们改成单目设置——只用左目(立体相机左路)估计深度,历史帧沿用各自公开设置里的 8 帧。VoxFormer-T 走的是立体路线:取 4 个历史帧并在时间上交替采样,以匹配 8 帧单目基线的时间覆盖;它 stage-1 吃体素化的立体匹配深度,先在 0.4 m 分辨率出 3D 占用,再上采样到本文的 0.2 m 目标网格。此外本文提出 Panoptic-FlashOcc-vel:在 Panoptic-FlashOcc 的检测头上扩展出两个速度通道预测 \((v_x,v_y)\),用 L1 损失监督。这个设计的意义是让一次前向同时给出体素语义、实例归属和行人速度,而不必为速度预测单独养一个专用模型——这也正是「移动机器人需要知道人往哪走」这一动机在评测层面的落地。
指标上,占用预测用 IoU 与 mIoU:单类 IoU 是预测 occupied 体素集合与真值 occupied 体素集合的交并比 \(|P\cap G|/|P\cup G|\),mIoU 则对 9 个 occupied 类求平均(因此与 ground-truth 中完全不出现的类无关)。全景占用沿用标准 PQ / RQ / SQ,并额外报告 PQ†——一个放松了 stuff 类严格 IoU 要求的全景质量变体,更适配纯视觉占用预测的场景。行人检测用 AP\(_{\text{Ped}}\),在 0.1 m / 0.2 m / 0.5 m / 1 m 四个距离阈值上按检测中心判定。速度预测用三种绝对速度误差:AVE-T 在所有真值行人体素上算,AVE-D 在 1 m 内的真阳性检测上算,AVE-O 在正确分类且被行人占据的体素上算。人体网格一侧则用 PVE(逐顶点平均欧氏距离)、MPJPE(关节点平均位置误差)、PA-MPJPE(Procrustes 对齐后的 MPJPE,把全局放置误差剥离、只看关节姿态)和 MPERE(网格边长平均相对误差,只在有顶点真值或方法输出网格时报告)。
损失函数 / 训练策略¶
人体网格优化是整篇论文唯一带优化目标的部分,且它是推理时优化:网格参数在测试时对每个被跟踪行人现解,不训练网络、不用数据集特有的 LiDAR 监督,这正是它能直接跨 3DPW、SLOPER4D、HumanM3 使用的根本原因。总目标把图像对齐、三维对齐和三项人体先验加权求和:
⚠️ 提取到的原文公式 (1) 残缺(2D 重投影项的权重写法被吞掉),上式按正文各项描述补全,以原文为准。
2D 关节重投影项把网格三维关节投影回图像,与检测到的 2D 关键点比距离,每个关键点按其置信度 \(w_i\) 加权,并用 Geman–McClure 鲁棒罚函数 \(\rho(\cdot)\) 抑制离群点:
三维对齐项用对称、按尺寸归一化的 Chamfer 距离衡量可见网格顶点与 LiDAR 点云之间的双向最近邻距离,因为对 \(\theta\) 和 \(\beta\) 都求导,它能纠正纯 2D 拟合根本改不了的局部姿态与体型误差:
另外三项人体先验分别是:MoG 姿态先验 \(\mathcal{L}_\theta\)(对高斯混合建模的合理关节配置取负对数似然,抑制不自然的关节组合)、抗过伸先验 \(\mathcal{L}_a\)(惩罚肘、膝处的正向反关节弯折)、体型先验 \(\mathcal{L}_\beta\)(对 \(\beta\) 的二次罚,把体型约束在 SMPL 空间内)。还有一项针对遮挡的 \(\mathcal{L}_{\theta,\text{occ}}\):对被可见性过滤标为不可见的关节集合 \(\mathcal{I}\),以「初始单位四元数 \(\mathbf{q}_i^{(0)}\) 与当前 \(\mathbf{q}_i\) 的偏差」为惩罚,阻止这些没有观测证据的关节在优化中漂走。⚠️ 该项的精确形式(四元数偏差如何度量、是否平方)在提取文本中损坏,以原文公式 (7) 为准。
优化变量是 \((\beta,\theta,\mathbf{t}_{\text{cam}})\),在 PyTorch 里用梯度下降求解,得到平衡了「贴图像」与「贴点云」、同时尊重人体形状与姿态先验的 \(\hat\beta,\hat\theta,\mathbf{t}^*_{\text{cam}}\)。基准部分不涉及新的训练策略:各占用基线一律沿用其公开训练设置,8 帧历史输入(VoxFormer-T 为 4 帧交替采样),Panoptic-FlashOcc-vel 的速度头以 L1 损失训练。
实验关键数据¶
主实验¶
评测分四块:人体网格优化(在 3DPW、SLOPER4D、HumanM3 上)、占用标签质量(对 CODa 真值)、检测鲁棒性、以及在 MobileOcc 上训练基线后的两个任务。
表 1:MobileOcc 上的 3D 语义占用预测(0.2 m 体素,IoU 为几何 IoU,加粗为最优)
| 方法 | IoU | mIoU | ped. | car | oth.str. | pole | road | terrain | truck | 2-wh. | veg. |
|---|---|---|---|---|---|---|---|---|---|---|---|
| VF-T(4f 立体) | 57.81 | 24.89 | 32.79 | 1.39 | 28.47 | 7.08 | 70.90 | 23.57 | 5.23 | 28.04 | 26.52 |
| FO(8f 单目) | 57.71 | 27.18 | 31.91 | 5.36 | 31.00 | 10.16 | 70.82 | 27.29 | 7.35 | 30.85 | 29.88 |
| PF(8f 单目) | 57.83 | 26.64 | 32.45 | 3.66 | 31.79 | 9.96 | 70.35 | 25.90 | 5.87 | 30.99 | 28.83 |
VF-T = VoxFormer-T,FO = FlashOcc,PF = Panoptic-FlashOcc。
表 2:全景占用与行人速度预测(BD = BEVDet4D,PF-vel = Panoptic-FlashOcc-vel)
| 方法 | PQ | PQ† | RQ | SQ | PQ\(_{\text{Ped}}\) | RQ\(_{\text{Ped}}\) | SQ\(_{\text{Ped}}\) | AP\(_{\text{Ped}}\) | AVE-T ↓ | AVE-D ↓ | AVE-O ↓ | mIoU |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| BD(8f) | – | – | – | – | – | – | – | 41.7 | 1.00 | 0.36 | – | – |
| PF(8f) | 19.9 | 32.6 | 28.1 | 65.8 | 42.5 | 60.2 | 70.7 | 45.5 | – | – | – | – |
| PF-vel(8f) | – | – | – | – | – | – | – | – | 0.97 | 0.39 | 0.67 | 26.00 |
消融实验¶
数据集论文没有传统意义上的模块消融,替代它的是两组对照:一是把 LiDAR 加入网格优化后精度怎么随传感器密度变化、以及换成真实点云后是否仍然成立;二是标签本身对不对(对真值、对更紧的参考、以及对上游检测误差的敏感度)。
表 3:3DPW 上的模拟 LiDAR 对比(图像/视频方法无深度信息、按 root alignment 报告;本文方法融合模拟 LiDAR 且不做 root alignment)
| 模态 | 方法 | PVE ↓ | MPJPE ↓ | PA-MPJPE ↓ |
|---|---|---|---|---|
| 视频 | VIBE | 99.1 | 82.9 | 51.9 |
| 视频 | MotionBERT | 79.4 | 68.8 | 40.6 |
| 视频 | WHAM-B | 71.0 | 59.4 | 37.2 |
| 图像 | CLIFF | 81.2 | 69.0 | 43.0 |
| 图像 | PLIKS | 73.3 | 60.5 | 38.5 |
| LiDAR | 本文(Ouster-32) | 73.2 | 57.0 | 47.7 |
| LiDAR | 本文(Ouster-64) | 57.2 | 43.9 | 38.5 |
| LiDAR | 本文(Ouster-128) | 50.5 | 39.1 | 35.1 |
表 4:真实 LiDAR 上的泛化(SLOPER4D 与 HumanM3;PA-MPJPE 一列用来隔离「在 CLIFF 初值之上加 LiDAR 优化」的净增益)
| 方法 | 模态 | SLOPER4D PVE ↓ | SLOPER4D MPJPE ↓ | SLOPER4D PA-MPJPE ↓ | SLOPER4D MPERE ↓ | HumanM3 MPJPE ↓ | HumanM3 PA-MPJPE ↓ |
|---|---|---|---|---|---|---|---|
| PRN | LiDAR | – | 57.0 | – | – | 82.2 | – |
| V2V-PoseNet | LiDAR | – | 50.7 | – | – | 83.0 | – |
| LiDAR-HMR | LiDAR | 51.9 | 51.0 | – | 0.094 | 77.6 | – |
| LiDARCap | LiDAR | 148.1 | 158.3 | – | 0.050 | 175.8 | – |
| SAHSR | LiDAR | 81.2 | 72.6 | – | 0.085 | 105.5 | – |
| VoteHMR | LiDAR | 60.9 | 54.6 | – | 0.079 | 105.8 | – |
| CLIFF | RGB | 93.7 | 84.7 | 69.3 | 0.057 | 106.3 | 66.5 |
| 本文 | RGB+LiDAR | 64.4 | 55.8 | 43.5 | 0.060 | 83.9 | 58.1 |
表 5:占用标签质量与上游检测鲁棒性
| 评测 | 指标 | 数值 |
|---|---|---|
| 静态体素(对 CODa GT 点,4 序列 400 帧) | mIoU(road / veg. / terrain) | 71.2(88.8 / 68.0 / 57.0) |
| 静态体素 | GT 点覆盖率 / 体素级准确率 / 点级准确率 | 96.8 / 88.1 / 94.0 |
| 行人体素(对 GT 3D 包围盒代理) | 精确率 / 召回率 / F1 | 84.4 / 81.9 / 83.1 |
| 行人体素(对 LiDAR 体表参考,400 帧 790 个实例) | 精确率 / 召回率 / F1 | 95.5 / 89.9 / 92.5 |
| 检测 QA(人工,300 帧)拥挤 | 召回 / 精确 / 可见漏检率 | 98.8 / 99.0 / 1.2 |
| 检测 QA 不拥挤 | 召回 / 精确 / 可见漏检率 | 99.5 / 100 / 0.5 |
| 检测 QA 夜间 | 召回 / 精确 / 可见漏检率 | 76.9 / 97.6 / 23.1 |
关键发现¶
- 现有占用模型在这个数据集上并不好使。 三个基线(含适配后的立体方案)mIoU 只有 24.89–27.18,行人类 IoU 只有 31.9–32.8,与实际可用还差得远;car(1.39–5.36)和 truck(5.23–7.35)尤其低,作者把原因明确归给场景分布——校园里车少,而这几类在自驾基准上的 IoU 高得多,所以这个数字对比不能跨数据集直接比大小,它反映的是「近场 + 强类别不平衡 + 只有前视图」这个新设定下的难度。作者的猜测是 FlashOcc 单目行人性能吃亏来自 BEVDet4D 预训练继承的检测误差,而 VoxFormer 靠立体深度在行人上反超(32.79 对 31.91 / 32.45)。
- 全景头比纯检测头更会定位行人。 BEVDet4D 只给行人检测,AP\(_{\text{Ped}}\) 41.7;Panoptic-FlashOcc 给出体素级全景标签后升到 45.5,代价是相对 FlashOcc 的 mIoU 微降(27.18 → 26.64),这是多任务折衷的直接体现。
- 速度预测已有可用精度但方向仍会错。 PF-vel 在所有真值行人体素上的 AVE-T 为 0.97 m/s,略优于 BEVDet4D 的 1.00;但在 1 m 内真阳性检测上 BEVDet4D 反而更好(AVE-D 0.36 对 0.39),说明两者各有侧重、不能笼统说谁赢。定性结果里的典型失败是前进与后退方向混淆——这提示把行人速度与全景占用联合起来做仍有明显余量。
- 加 LiDAR 是网格精度的主因,且收益随点密度单调增长。 3DPW 上模拟 Ouster-32 / 64 / 128 三档,PVE 从 73.2 降到 57.2、再降到 50.5,MPJPE 从 57.0 → 43.9 → 39.1,三项指标一致改善,而且全程不使用 root alignment,说明改善来自绝对定位而不只是姿态。
- 低点密度下姿态精度并不是最强项(一个容易被忽略的细节)。 表 3 里 Ouster-32 的 PA-MPJPE 47.7 明显差于 WHAM-B 的 37.2、PLIKS 的 38.5 甚至 CLIFF 的 43.0,Ouster-64 的 38.5 才勉强追平,只有 Ouster-128 的 35.1 靠点云真正拉开了差距。也就是说:稀疏点云下的优势主要体现在绝对放置(PVE / MPJPE),关节姿态的收益要等到点足够密才稳定兑现。
- 在真实 LiDAR 上,「无训练」换来了跨数据集稳健,但不是全指标最优。 SLOPER4D 上本文 PVE 64.4 / MPJPE 55.8,优于图像基线 CLIFF(93.7 / 84.7),但不如 LiDAR 专训的 LiDAR-HMR(51.9 / 51.0);HumanM3 上 MPJPE 83.9 同样排在 LiDAR-HMR(77.6)与 PRN(82.2)之后。真正干净地隔离出贡献的是 PA-MPJPE:SLOPER4D 上 43.5 对 CLIFF 的 69.3,HumanM3 上 58.1 对 66.5,说明相对图像初值的姿态提升确实来自 LiDAR 约束。另一个小反例是 MPERE:本文 0.060 优于 LiDAR-HMR 的 0.094,但略差于 LiDARCap 的 0.050,甚至略差于自己初值 CLIFF 的 0.057——点云拟合在换来位置与姿态改善的同时,可能轻微扭曲网格边长比例。
- 标注质量本身经得起更严的检验。 静态体素对 CODa 真值的 GT 点覆盖率达 96.8%,说明体素网格几乎包住了所有被标注的几何;mIoU 71.2 里的主要误差源是分类体系与域的不匹配——比如 CODa 的 "Short Vegetation" 在 Cityscapes 语义下有时被视为 terrain、有时被视为 vegetation,这类边界模糊直接压低了 vegetation / terrain 的 IoU。行人一侧,包围盒代理给出的 84.4 / 81.9 其实是偏悲观的(包围盒把体周空白和脚下的路面体素都算成占用,评测时只能取相机可见体素并剔掉包围盒底部 0.1 m);换成用人体框内原始 LiDAR 回波体素化出的「体表参考」后,精确率 95.5、F1 92.5,四个序列(7/11/16/18)的 F1 分别为 89.0 / 93.0 / 93.3 / 94.7,稳定性不错。这里有个物理原因必须说明:LiDAR 点落在可见体表,而 SMPL 体素化填的是整个体积,两者天然差大约半个体厚(实测约 0.19 m),所以评测在标准的 ±1 体素容差下进行。
- 夜间是明确的短板,但错误是「漏」不是「错」。 白天拥挤 / 不拥挤场景的检测召回 98.8 / 99.5、精确率 99.0 / 100;夜间召回跌到 76.9 而精确率仍有 97.6,可见漏检率 23.1%——说明夜间主要是漏检而非误检。好在这些漏检只影响它所在的那一帧,不会通过静态图传播(静态建图已屏蔽行人,且对齐时人体占用优先),作者也据此把白天/夜间序列分开,让使用者按目标部署条件挑子集。
亮点与洞察¶
- 「图像给姿态、LiDAR 给位置」的分工被落成了三段式流程,且完全免训练。 可见性过滤 → ICP 粗对齐 → 联合优化这个顺序不是装饰:先判断哪些部位有证据(否则噪声会被当信号拟合),再解刚体位置(ICP 擅长的、且不受关节角干扰),最后才放开姿态与体型。这个「按自由度递增解」的顺序可以迁移到任何需要融合稀疏 3D 观测与 2D 先验的拟合问题。
- 遮挡感知的姿态一致性项是个便宜而有效的补丁。 被遮挡关节没有观测证据,优化时最容易漂走;与其为几何穿插写一个昂贵项,不如直接把这些关节的偏差用四元数正则拉回初值——作者解释得很到位:占用是从网格表面体素化的,穿插只造成体内自重叠,不影响 occupied/free 边界。这种「先想清楚误差最终会不会进入要评测的量,再决定要不要为它建模」的判断力比方法本身更值得学。
- 静态 / 动态分离 + 动态优先仲裁,把标注误差变成了局部误差。 先用 LiDAR 与图像双路掩码把行人从静态建图里剔掉,再在对齐时让人体占用压过背景。这套顺序让「静态图污染」这个全局性故障模式变成了不可能,同时让漏检退化成单帧误差。任何做时序地图 + 动态物体叠加的系统都能直接照搬这个优先级。
- 双路掩码里 LiDAR 那一路是关键。 只用图像检测做掩码,相机视锥外和被遮挡的行人照样会被印进背景;加一个逐 sweep 的 LiDAR 3D 检测器专门补视锥外盲区,是这套流程能成立的前提。这个「谁看得见谁补位」的互补思路很通用。
- 用「体表参考」代替包围盒来评测占用,是评测方法上的可复用改进。 包围盒评测天生悲观(体积膨胀),本文的替代方案——取人体框内的原始 LiDAR 回波体素化,作为传感器朝向的体表采样,并在 ±1 体素容差下评——既绕开了没有稠密人体几何真值的困境,又把行人体素的质量量到了 F1 92.5。任何缺少稠密真值、又需要评测细粒度占用的工作都可以借鉴这个思路。
- 把速度头挂到全景占用检测头上,一次前向出三样东西。 Panoptic-FlashOcc-vel 只是给检测头加两个通道加 L1 监督,就同时拿到体素语义、实例归属和行人速度,避免了「占用一个模型 + 速度一个模型」的部署代价。对算力受限的机器人平台,这种「在已有头上做加法」的改造比另起一个网络更现实。
局限与展望¶
- 作者承认的局限有两条:一是目前只覆盖室外场景,跨域(室内、恶劣天气)的泛化性存疑;二是非刚体建模用的是 SMPL,不包含人携带或随行的物体(背包、推车、牵着的东西),这会低估行人的实际占用体积。作者计划把基准扩展到 human-object occupancy。
- 从评测数字能看出来的更多隐含边界:夜间召回 76.9% 意味着夜间子集的行人体素标注本身就会系统性缺失,而当前标签质量评测(400 帧)并没有按光照分层报告,因此「夜间标签有多准」这件事实际上没有被验证过——现有评测只能说明检测会漏,不能说明漏检之后标签的精确率。要真正支持夜间部署,需要补一份分光照条件的标签质量审计。
- 评测范围也偏窄:CODa 只标了少量序列的点级语义,所以静态标签质量只在 road / vegetation / terrain 三类上给出 mIoU,pole、two-wheeler 这些在人群场景里同样重要的类没有真值可对。行人的「更紧参考」本质上仍是可见体表的采样,网格的背面与体内填充对不对,靠包围盒或 LiDAR 回波都验不了——这是数据集层面的固有盲区。
- 一个具体的改进方向:本文的 MPERE 显示 LiDAR 拟合会轻微扭曲网格边长比例(0.060,甚至略差于图像初值的 0.057),可以考虑把边长/骨架长度作为显式正则加进 \(\mathcal{L}_{\text{total}}\),在换取位置精度的同时守住网格的度量一致性。
- 另一条值得走的路是把基准从「感知指标」推进到「对导航是否有用」:0.02 m 细分辨率下保留的肢体几何,本应用于验证拥挤人流中的窄缝是否被正确判为可通行、社交距离约束下的轨迹是否安全,但本文的下游验证止步于占用预测与速度预测两项感知任务,缺乏规划侧的闭环证据。
相关工作与启发¶
- vs Occ3D / OpenOccupancy / SSCBench(车载占用数据集):它们建在 nuScenes / Waymo / KITTI-360 上,规模大、体素标注稠密,但动态物体(主要是车)一律按刚体包围盒处理,行人稀少且被刚体化,也没有实例跟踪。MobileOcc 补的是完全另一块:行人密集、近场、以人为标注重心,用 SMPL 网格表达非刚性并提供逐实例 ID。代价是规模与类别覆盖远不如车载数据集,两者是互补而不是替代关系。
- vs SemanticKITTI / OpenScene:SemanticKITTI 不考虑运动物体、规模与多样性有限;OpenScene 提供了实例跟踪但仍然是刚体建模范式。MobileOcc 的差别是实例跟踪 + 非刚体人体网格同时具备(原文表 1 的对比正是这个结论)。
- vs WildOcc:WildOcc 把 RELLIS-3D 扩成越野场景的稠密语义占用,关注的是非结构化环境;MobileOcc 关注的是人。两者都不在结构化道路设定里,但建模对象正交。
- vs 纯图像/视频 HMR(CLIFF、ROMP、HybrIK、WHAM、MotionBERT):它们只从 2D 推断 3D,深度与尺度歧义靠 root alignment 之类的后处理缓解;本文把它当初值而不是答案,用 LiDAR 把它拉到传感器坐标系下的真实位置,因此在 PVE / MPJPE 上取得优势,代价是依赖点云质量(低密度时 PA-MPJPE 反而不如纯图像方法)。
- vs LiDAR-only 人体拟合(LiDARCap、LiDAR-HMR、VoteHMR、SAHSR、S3):它们要么依赖 LiDAR 专项(且常常数据集特定)的训练,要么用隐式场;在人体点与邻近物体混叠、人距离远点稀疏时较脆。本文免训练、跨数据集直接跑,换来的是「不是每项指标都第一」(SLOPER4D 上 PVE / MPJPE 仍不及 LiDAR-HMR),但泛化性与部署成本更有优势。
- vs FlashOcc / Panoptic-FlashOcc / VoxFormer(占用方法):这篇论文不改它们的结构,而是把它们搬到一个新设定(前视、近场、人群)下测出短板,并顺手给全景头加了速度分支。对做占用方法的人来说,MobileOcc 的价值是提供了一个「车载设定之外的失分现场」:单目行人检测误差会从预训练继承下来、夜间会漏、方向会混,这些在 nuScenes 上不容易暴露。
评分¶
- 新颖性: ⭐⭐⭐⭐ 首个面向移动机器人的「非刚体人体 + 实例跟踪」语义占用数据集,用图像-LiDAR 融合的免训练网格优化替代刚体包围盒,数据集与评测协议一起交付,缺口补得准。
- 实验充分度: ⭐⭐⭐⭐ 标签质量给了两套参考(包围盒与 LiDAR 体表)+ 检测鲁棒性分层 + 双任务多基线,验证维度扎实;但静态标签只有三类有真值、夜间标签质量未单独审计、缺少规划侧的下游验证。
- 写作质量: ⭐⭐⭐⭐ 流水线各阶段职责与设计理由讲得清楚,对「去掉穿插项」这类取舍给了具体论证,对指标定义完整;部分公式在排版/提取中损坏,个别数字需要回查原表。
- 价值: ⭐⭐⭐⭐ 对做人群导航与近场感知的团队是即插即用的评测床,静态/动态分离 + 动态优先仲裁的标注思路和「体表参考」的评测思路都可迁移;人群交互与安全导航的下游价值还有待后续工作兑现。