
# 在拥挤的室内环境中，通过学习时空线索实现鲁棒的动态对象检测

Juan Rached$^{1}$, 贾亦轩$^{1}$, 近藤康太$^{1}$, Jonathan P. How$^{1}$

![Image](images/37a1af8f18b678bcfd3d2a158f46877217ffbf5757dd96fc08e90872c12329cc.jpg)

<div style="text-align: center;">Fig. 1: BEV of LV-DOT [^1] (top row), Dynablox [^2] (middle row), and STORM (bottom row) across three experiments with increasing levels of clutter. LV-DOT struggles with proximity-induced false negatives in all experiments. Dynablox misses detections due to partial occlusions in columns 1 and 3 and due to proximity-induced false negatives in column 2. STORM detects all obstacles across all experiments.</div>

摘要：在复杂的环境中，可靠地检测动态对象对于自主导航至关重要。纯几何的 LiDAR 管道依赖于聚类和启发式过滤，当动态障碍物在静态结构附近移动或仅部分观察到时，可能会错过这些障碍物。基于视觉的方法可以提供额外的语义线索，但通常受到封闭集合检测器和相机视场限制的限制，从而降低了对新障碍物和视场外事件的鲁棒性。在本文中，我们提出了一种仅使用 LiDAR 的框架，该框架将基于时间占用的网格运动分割与学习的俯视图 (BEV) 动态先验相结合。一个融合模块在可用时优先考虑 3D 检测，同时使用学习的动态网格来恢复由于邻近效应导致的虚假阴性而丢失的检测。使用运动捕捉地面真实数据的实验表明，我们的方法在高度拥挤的环境中实现了 28.67% 的更高召回率和 18.50% 的更高 F1 分数，同时保持可比的精度和位置误差。

## 补充材料

视频：<https://youtu.be/_ZHGz-BkQzg> 代码：即将发布。

### I. 引言

在拥挤的环境中可靠地检测动态障碍物对于安全自主导航至关重要。特别是，室内环境经常发生移动物体与静态结构之间的密切交互，而这些交互会产生稀疏的、部分遮挡的 LiDAR 扫描结果。因此，动态对象检测系统必须在这些场景中保持鲁棒性，同时保持实时性能。

一种常用的 LiDAR 动态障碍物检测策略是基于时间占用的网格推理：将空间划分为体素，并标记“进入”先前观察到的自由区域的对象为动态。该原理提供了一个强大的几何先验，并且可以使用占用网格地图 (OGM) 有效实现，然后进行聚类以获得对象级别的检测 [^2]。

---

然而，在拥挤的室内环境中，此管道可能会因动态对象靠近静态结构而导致漏检。在这种情况下，后续的过滤步骤（例如用于抑制虚假伪影的最近邻一致性检查）可能会错误地删除真实的动态扫描结果。当移动对象部分被遮挡或仅观察到其表面的小部分时，这些影响最为明显，从而减少了聚类和降噪启发式算法可用的证据。

本文提出了一种混合动态对象检测系统，该系统将经典的 3D temporal-occupancy 流程与在低维的鸟瞰图 (BEV) 表示中实现的互补的、与类别无关的动态先验相结合。 我们的方法并行运行两个检测流水线。 第一个流水线，灵感来自 Dynablox [^2]，在 temporal OGM 中执行移动对象分割，并将动态体素聚类以产生 3D 检测结果，然后使用扩展卡尔曼滤波器 (EKF) [^3] 跟踪这些检测结果。 第二个流水线聚合一系列 LiDAR 扫描（以及相应的车辆状态），使用 PointPillars 编码器 [^4] 对其进行编码，并使用长短期记忆 (LSTM) 模块对时间上下文进行建模。 该网络输出一个 2D 动态网格，其中每个单元格表示 3D 中的相应垂直列是否包含动态运动。 重要的是，此表示是与类别无关的：它不是识别一组预定义的语义类别，而是学习从短期时空线索来预测动态区域。

为了利用这两种方法的互补优势，我们提出了STORM（基于时空线索和占用率的鲁棒运动检测），这是一种检测融合程序，它优先考虑在可用时基于3D OGM的检测结果，同时使用2D动态网格证据来恢复那些由于邻近性引起的假阴性而丢失的轨迹（参见图 1）。

我们在复杂的室内环境中对所提出的系统进行了实际实验，并表明学习到的动态先验显着减少了由于动态和静态物体邻近性引起的假阴性。我们还将其与LiDAR-视觉基线进行比较，以突出在拥挤的室内场景中基于视觉的方法的局限性，包括受限的摄像头视野和封闭语义。

## 总结，我们的贡献是：

- 一个时空网络，该网络可以根据短期的LiDAR历史和车辆自身运动预测类无关的鸟瞰图动态网格；

- 一种融合策略，该策略使用学习到的动态网格来恢复未检测到的3D目标，并在邻近性和遮挡引起的故障期间保持轨迹；

- 通过使用真实数据对室内场景进行广泛验证，该场景具有复杂的静态障碍物配置和多种动态障碍物类别，结果表明召回率和F1分数高于最先进的技术。

### II. 相关工作

### A. 基于LiDAR的动态物体检测

一种常见的基于 LiDAR 的动态物体检测方法 [^5] [^6] [^7] [^8] [^9] [^10] 是通过在占用表示中利用时间一致性来推断运动 [^11]。 在该家族中，Dynablox [^2] 是一项具有代表性的工作，它通过显式地推断时间占用和自由空间一致性来进行移动物体分割，然后应用聚类来获得物体级别的检测。 虽然在室外自动驾驶场景中效果良好，但这些流程在拥挤的室内环境中可能会出现虚假阴性，因为动态物体靠近静态结构或仅部分观察到时，动态和静态数据可能会在空间上重叠，并且随后的聚类或降噪启发式方法可能会抑制真实运动的稀疏轨迹。 这促使采用互补机制，这些机制可以聚合短期时间线索，并为瞬时几何线索较弱的区域提供先验信息。

除了仅使用 LiDAR 的方法外，基于视觉增强的方法利用语义线索来提高对动态对象从背景中的检测。 然而，这些方法通常受到封闭集合标签和相机视场 (FOV) 的限制，因此可能会错过新障碍物或图像视锥体外的对象。 例如，LV-DOT [^1] 使用 RGB-D 相机来提供额外的视觉线索，包括一个基于预训练封闭集合模型的 RGB 检测器（即 YOLO [^12]），该检测器从预定义的类别 [^1] 中识别动态障碍物。 此外，由于视觉线索仅在相机视锥体内可用，因此 LV-DOT 在遇到障碍物超出相机视场范围时可能会失败，即使 LiDAR 可以观察到这些障碍物。

### B. 基于学习的移动对象分割

基于学习的移动对象分割 (MOS) 通过利用来自连续 LiDAR 数据的时空线索来对观测结果进行分类，区分移动和静态对象，通常不需要明确的语义类别 [^13] [^14] [^15] [^16] [^17]. Chen 等人 [^14] 证明，利用 3D LiDAR 序列中的时间信息可以显著提高与单次扫描推理相比的 MOS 性能。 后续工作改进了 MOS 的表示和学习策略，包括用于时空处理的稀疏 4D 卷积 [^15]、构建动态环境中的体素信念的基于地图的 MOS [^16]，以及用于可扩展的在线 MOS 训练数据生成的自动标签程序 [^18]。 还提出了以 BEV 为中心的在线 MOS 方法，这些方法将外观和运动线索结合到 BEV 表示中，以提高效率 [^17]。

### III. 方法

我们的方法由两个并行检测流水线组成。 一个使用 OGM 中体素的时间占用信息和聚类来生成 3D 中动态对象的定位。 这在第 III 节 A 中进行了介绍。 另一个将来自多个扫描的点云信息压缩成一系列伪图像，这些图像被输入到长短期记忆 (LSTM) 模块中。 LSTM 产生的嵌入被重建为 2D 动态网格，其中网格中的每个正方形代表 3D 中的静态或动态列。 这些动态列可用于恢复在 3D 流水线的聚类步骤中丢失的动态对象检测。 这在第 III 节 B 中进行了介绍。

---

![Image](images/435d258fb68dc782ede185b14db0b3c0bf182181d7756092f8d367ad8138c77d.jpg)

<div style="text-align: center;">Fig. 2: System architecture of the proposed detection framework: point cloud and ego state information are processed in parallel by our OGM and learning-based MOS pipelines. The cluster centroids of the dynamic point cloud produced by the OGM module and GridNet's 2D dynamic grids are fused to generate dynamic obstacle detections.</div>

由 LSTM 产生的嵌入被重建为 2D 动态网格，其中网格中的每个正方形代表 3D 中的静态或动态列。 这些动态列可用于恢复在 3D 流水线的聚类步骤中丢失的动态对象检测。 这在第 III 节 B 中进行了介绍。

### A. 时间占用网格检测器

1) 移动对象分割：我们的 3D 障碍物检测流水线中的 MOS 模块利用 OGM 中每个体素的时间信息，如 Dynablox [^2] 所述。 它基于这样的假设：如果将空间划分为自由和占用区域，那么任何移动到自由空间的物体都必须是动态的。 此原理允许我们解决 MOS 问题，并使用动态点云段作为动态对象检测的候选对象。 为了区分自由空间和非自由空间，OGM 会跟踪每个体素已经占用和未占用的时间。 因此，网格图中每个体素的内部状态都会增加变量 $t_{o}^{(t)}$ 和 $t_{u}^{(t)}$，分别表示该体素上次被占用和未被占用的时间。 每个体素的完整状态，$a^{(t)}$，定义如下：

   $$ a^{(t)}=\{o^{(t)},t_{o}^{(t)},t_{u}^{(t)},f^{(t)}\}, $$

其中，$o^{(t)} \in \{0,1\}$ 表示体素是否被占据，而 $f^{(t)} \in \{0,1\}$ 表示在时间 t 时是否被认为是自由空间。 在每个时间步长，如果体素被占据，则该体素的占用持续时间 $t_o^{(t)}$ 将被更新。 一旦该数字超过一个阈值 $\tau_o$，则该体素被认为是未自由的（即 $f^{(t)} = 0$）。 类似地，如果体素未被占据，则未被占据体素的时间 $t_u^{(t)}$ 将被更新。 一旦该值超过一个阈值 $\tau_u$，则该体素被标记为自由（即 $f^{(t)} = 1$）。 任何移动到自由空间的对象，即具有字段 $f^{(t)} = 1$ 和 $o^{(t)} = 1$ 的体素，都被认为是动态的，而具有 $f^{(t)} = 0$ 的体素被认为是静态的。 对点云扫描的动态子集应用聚类和最近邻检查，以计算位置估计，并减少因激光雷达读数噪声引起的潜在虚假阳性。 与 Dynablox 不同，我们的 OGM 不包含任何分层空间结构，因为映射潜在的无界环境不是这项工作的重点。 此外，我们的方法使用聚类密度启发式，而不是点数启发式，来过滤噪声，因为我们发现它更好地处理了由大型静态表面引起的伪影。

对于每个动态簇，我们构建一个包含属于该簇的所有点的包围盒，并使用簇的质心在 3D 空间中表示其位置。 通过我们的检测融合过程，如第 III 节的 C 节所述，使用贪婪关联将簇质心分配给扩展卡尔曼滤波器 (EKF) 估计。 为了准确捕捉各种障碍物轨迹，包括非线性运动，我们使用恒定加速度的 Dubins 平面模型。 我们将每个障碍物的状态定义为，

 $$ \mathbf{x}=\begin{bmatrix}x&y&z&\theta&\phi&v\end{bmatrix}^\top $$

其中x、y、z是障碍物在$\mathbb{R}^{3}$中的坐标，$\theta$和$\phi$分别为航向角和爬升角，v是物体的速度大小。动力学演化过程如下，

 $$ \dot{\mathbf{x}}=\left[v c_{\phi}c_{\theta},v c_{\phi}s_{\theta},v s_{\phi},\dot{\theta},\dot{\phi},a\right]^{T} $$

其中，$c_{\theta}$ 和 $s_{\theta}$ 分别是 $\cos\theta$ 和 $\sin\theta$ 的简写。 遵循标准的 EKF 过程，(3) 式的右侧在当前最佳估计处进行线性化，以生成状态转换函数 $f(\cdot)$ 和状态转换雅可比矩阵 $F_{k}$。 动力学如下进行传播，

 $$ \begin{aligned}\hat{\mathbf{x}}_{k|k-1}&=f(\hat{\mathbf{x}}_{k-1|k-1},\mathbf{u}_{k-1})\\\mathbf{P}_{k|k-1}&=\mathbf{F}_{k}\mathbf{P}_{k-1|k-1}\mathbf{F}_{k}^{\top}+\mathbf{Q}_{k}\end{aligned} $$

其中，$\hat{\mathbf{x}}_{k|k-1}$ 和 $\mathbf{P}_{k|k-1}$ 分别是使用来自 $k-1$ 时的测量值在 k 时段的预测估计和协方差。 $\mathbf{Q}_{k}$ 是过程噪声协方差矩阵。 我们遵循标准的 EKF

---

<div style="text-align: center;">TABLE I: Performance of methods on precision, recall, F1 score, and position error metrics across three distance thresholds on a set of experiments with 1-3 human dynamic obstacles. For each metric, the highest performing method is highlighted in green and the second highest in light green. For precision, recall, and F1 score, higher is better. For position error, lower is better. # Obs is the number of static obstacles in the room.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td rowspan="2"># Obs</td><td rowspan="2">Method</td><td colspan="4">DistThresh = 0.75m</td><td colspan="4">DistThresh = 0.5m</td><td colspan="4">DistThresh = 0.25m</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td></tr><tr><td rowspan="5">4</td><td style='text-align: center; word-wrap: break-word;'>LV-DOT</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.14</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.14</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.74</td><td style='text-align: center; word-wrap: break-word;'>0.83</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>LV-DOT NC</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.14</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.14</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.74</td><td style='text-align: center; word-wrap: break-word;'>0.83</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.91</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.16</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.91</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.16</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.90</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.91</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.91</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.89</td><td style='text-align: center; word-wrap: break-word;'>0.94</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.16</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>0.98</td><td style='text-align: center; word-wrap: break-word;'>0.96</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td rowspan="5">16</td><td style='text-align: center; word-wrap: break-word;'>LV-DOT</td><td style='text-align: center; word-wrap: break-word;'>0.54</td><td style='text-align: center; word-wrap: break-word;'>0.14</td><td style='text-align: center; word-wrap: break-word;'>0.22</td><td style='text-align: center; word-wrap: break-word;'>0.16</td><td style='text-align: center; word-wrap: break-word;'>0.52</td><td style='text-align: center; word-wrap: break-word;'>0.13</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>0.13</td><td style='text-align: center; word-wrap: break-word;'>0.51</td><td style='text-align: center; word-wrap: break-word;'>0.12</td><td style='text-align: center; word-wrap: break-word;'>0.20</td><td style='text-align: center; word-wrap: break-word;'>0.12</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>LV-DOT NC</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.05</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.13</td><td style='text-align: center; word-wrap: break-word;'>0.95</td><td style='text-align: center; word-wrap: break-word;'>0.05</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.13</td><td style='text-align: center; word-wrap: break-word;'>0.94</td><td style='text-align: center; word-wrap: break-word;'>0.05</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.12</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.60</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.17</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.60</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.17</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.56</td><td style='text-align: center; word-wrap: break-word;'>0.72</td><td style='text-align: center; word-wrap: break-word;'>0.14</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.66</td><td style='text-align: center; word-wrap: break-word;'>0.79</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.65</td><td style='text-align: center; word-wrap: break-word;'>0.79</td><td style='text-align: center; word-wrap: break-word;'>0.17</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.61</td><td style='text-align: center; word-wrap: break-word;'>0.76</td><td style='text-align: center; word-wrap: break-word;'>0.14</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.72</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.72</td><td style='text-align: center; word-wrap: break-word;'>0.84</td><td style='text-align: center; word-wrap: break-word;'>0.17</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.68</td><td style='text-align: center; word-wrap: break-word;'>0.81</td><td style='text-align: center; word-wrap: break-word;'>0.14</td></tr><tr><td rowspan="5">31</td><td style='text-align: center; word-wrap: break-word;'>LV-DOT</td><td style='text-align: center; word-wrap: break-word;'>0.64</td><td style='text-align: center; word-wrap: break-word;'>0.12</td><td style='text-align: center; word-wrap: break-word;'>0.20</td><td style='text-align: center; word-wrap: break-word;'>0.17</td><td style='text-align: center; word-wrap: break-word;'>0.63</td><td style='text-align: center; word-wrap: break-word;'>0.11</td><td style='text-align: center; word-wrap: break-word;'>0.19</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>0.61</td><td style='text-align: center; word-wrap: break-word;'>0.11</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>LV-DOT NC</td><td style='text-align: center; word-wrap: break-word;'>0.78</td><td style='text-align: center; word-wrap: break-word;'>0.06</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.16</td><td style='text-align: center; word-wrap: break-word;'>0.77</td><td style='text-align: center; word-wrap: break-word;'>0.05</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.05</td><td style='text-align: center; word-wrap: break-word;'>0.09</td><td style='text-align: center; word-wrap: break-word;'>0.13</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.48</td><td style='text-align: center; word-wrap: break-word;'>0.65</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.48</td><td style='text-align: center; word-wrap: break-word;'>0.65</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.43</td><td style='text-align: center; word-wrap: break-word;'>0.60</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.55</td><td style='text-align: center; word-wrap: break-word;'>0.71</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.55</td><td style='text-align: center; word-wrap: break-word;'>0.71</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.50</td><td style='text-align: center; word-wrap: break-word;'>0.67</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.60</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.60</td><td style='text-align: center; word-wrap: break-word;'>0.75</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.55</td><td style='text-align: center; word-wrap: break-word;'>0.71</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr></table>

更新。

 $$ \mathbf{y}_{k}=\mathbf{z}_{k}-h\left(\hat{\mathbf{x}}_{k|k-1}\right) $$

 $$ \mathbf{S}_{k}=\mathbf{H}_{k}\mathbf{P}_{k|k-1}\mathbf{H}_{k}^{\top}+\mathbf{R}_{k} $$

 $$ \mathbf{K}_{k}=\mathbf{P}_{k|k-1}\mathbf{H}_{k}^{\top}\mathbf{S}_{k}^{-1} $$

 $$ \hat{\mathbf{x}}_{k|k}=\hat{\mathbf{x}}_{k|k-1}+\mathbf{K}_{k}\mathbf{y}_{k} $$

其中，$\hat{\mathbf{x}}_{k|k}$ 是当前最佳状态估计，$\mathbf{z}_{k}$ 是当前时间步的测量值，$\mathbf{R}_{k}$ 是测量噪声协方差矩阵，$h(\cdot)$ 是测量函数，它输出障碍物的位置，而 $\mathbf{H}_{k}$ 是测量雅可比矩阵。

### B. 学习的 2D 网格地图

在以下讨论中，我们将动态物体视为正面检测，而将静态物体视为负面检测。聚类动态物体检测的一个核心局限性是在静态障碍物附近出现漏检现象，这被称为假阴性。对于在执行运动目标分割（MOS）之前对点云进行聚类的系统，如 [^1] 中所述，真阳性和真阴性可能被合并到同一个簇中，导致整个簇被分类为静态。我们在执行MOS之前进行聚类的其他方法中也观察到相同的失效模式，如 [^2] 中所述。在这些情况下，假阴性不是在聚类步骤中产生的，而是在后续的最近邻检查中产生的，这些检查旨在减少由于嘈杂的激光雷达读数而产生的伪影。在本节中，我们介绍 GridNet，这是一种用于跨时间编码点云信息并生成 2D 动态网格的方法，该方法可以帮助我们从上述假阴性中恢复丢失的检测。

1) 架构：我们使用 PointPillars 编码器 [^4] 将每个 LiDAR 扫描投影到 BEV 伪图像中，从而将 T 个点云序列表示为 BEV 特征序列。具体来说，对于每个扫描，我们将地面划分为垂直柱，使用 PointNet 风格的柱特征网络 [^19] 计算每个柱的特征，并将这些特征散布到密集 BEV 特征图中。我们进一步使用 2D 卷积将每个 BEV 特征图压缩为潜在嵌入，将其与车辆的体坐标系速度的 MLP 嵌入连接，并将结果序列输入到长度为 T 的 LSTM 以建模时间动态。LSTM 的输出通过 2D 卷积解码为二进制 BEV 网格，其中每个单元格指示相应的 3D 垂直柱是否包含动态运动。在 BEV 模式下运行可以使网络保持轻量级，并且与直接在 3D 中学习的方法（例如，在体素网格上使用 3D 卷积）相比，可以扩展到高分辨率。2D 动态网格的坐标用于在检测融合过程中恢复 3D 检测（参见第 III 节）。

2) 损失：目标网格是通过将动态障碍物的 2D 位置投影到 2D BEV 平面上生成的。由于图像中动态部分的比例远小于非动态部分的比例，因此训练神经网络来识别 2D 网格中的动态障碍物，意味着要解决一个高度不平衡的二进制分割问题。为了解决这个问题，我们使用带有 Dice 分数的二元交叉熵 (BCE) 损失，以奖励预测和地面实况之间的重叠。我们定义我们的损失为：

   $$ \begin{array}{r}{\mathcal{L}_{t o t a l}=w_{B C E}\mathcal{L}_{B C E}+w_{D i c e}\mathcal{L}_{D i c e},}\end{array} $$

其中，

 $$ \mathcal{L}_{B C E}=-w y\log(p)-(1-y)\log(1-p), $$

和

 $$ \mathcal{L}_{D i c e}=\frac{2|Y\cap P|}{|Y|+|P|}, $$

---

其中，$y \in \{0,1\}$ 是真实值（像素是否为动态），$p \in [0,1]$ 是像素为动态的预测概率，Y 是真实值集合，P 是预测概率集合。w 是一个权重，用于确定计算误报的严重程度。权重 $w_{BCE}$ 和 $w_{Dice}$ 决定了总损失中哪个项更重要。训练和验证损失随着 $w_{BCE} = 0.7$ 和 $w_{Dice} = 0.3$ 而稳步下降。

### C. 融合检测结果

检测融合过程的总结见算法 1。在每个时间步，我们接收到所有 3D、$\mathcal{S}_1$ 和 2D、$\mathcal{S}_2$ 检测的结果集，这些结果对应于该时间步，以及在上一时间步计算出的 EKF 估计值集 $\mathcal{K}$。我们首先处理 3D 检测结果。对于每个检测结果 $s_1$，我们遍历卡尔曼滤波器估计值 $\mathcal{K}$，并贪婪地为它分配最接近的估计值，距离使用 $\ell_2$ 范数计算。然后将选定的估计值标记为已分配，并将相应的检测结果标记为估计值的 ID。最后，将估计值传播到当前时间步，并使用 3D 检测结果的位置测量值 $s_1.pos_t$ 进行更新。我们对 2D 检测结果 $\mathcal{S}_2$ 进行类似的处理。对于每个 $s_2 \in \mathcal{S}_2$，我们仅考虑那些没有接收到相关 3D 测量的滤波器估计值。将缺失的估计值贪婪地分配给检测结果，方法与 3D 情况相同，并将其传播到当前时间步。与前面的循环不同的地方在于，如果动态对象未被 3D 检测器检测到，但仍在移动，则 2D 动态网格网络可以检测到该动态对象。该网络可以访问短时间窗口内的点云信息。如果与该对象对应的卡尔曼滤波器估计值被传播到 2D 网格的“动态列”中，我们可以恢复该估计值。正式地，我们可以定义恢复的估计值集 $\mathcal{K}_r$，如下所示：

 $$ \left\{k\in\mathcal{K}\mid\|s.p o s_{t}-k.p o s_{t-1}\|_{2}<d_{m i n}\wedge\neg k.a s s i g n e d\right\} $$

其中 $s \in \mathcal{S}_2$ 是与 k 贪婪地关联的 2D 测量值，$d_{min}$ 是贪婪距离阈值。我们使用来自 2D 测量值 $k \in \mathcal{K}_r$ 和 $x_s^{(t)}$ 的 x、y 坐标来更新每个恢复的估计值 $y_s^{(t)}$，并使用来自该估计值的 $z_k^{(t-1)}$ 的 z 坐标。这样，用于更新步骤的测量值变为：

 $$ s_{2}^{(t)}=\begin{bmatrix}x_{s}^{(t)}&y_{s}^{(t)}&z_{k}^{(t-1)}\end{bmatrix}^{\top} $$

这在假设障碍物的高度在每个 3D 读数之间不会发生剧烈变化的情况下有效，这对于 100 毫秒间隔内的动态对象来说是成立的（LiDAR 扫描的常见周期）。该方案可以在近乎零的误检情况下高效地恢复 3D 估计值，并优先选择 3D 检测结果。

### IV. 实验和结果

我们在两组实验中评估我们的方法。第一组实验比较了最先进的检测

```pseudo
// Algorithm 1: Detection Fusion Procedure

1:  $\mathcal{I}_1 \leftarrow$ Set of 3D detections
2:  $\mathcal{I}_2 \leftarrow$ Set of 2D detections
3:  $\mathcal{H} \leftarrow$ Set of EKF estimates
4: for  $s_1 \in \mathcal{I}_1$ do
5:  $d_{min} \leftarrow$ distance tolerance
6: for  $k \in \mathcal{H}$ do
7:  $d_1 \leftarrow \|s_1.pos_t - k.pos_{t-1}\|_2$
8: if  $d_1 < d_{min}$ then
9:  $d_{min} \leftarrow d_1$
10:  $s_1.estimate.id \leftarrow k.id$
11: k.assigned \leftarrow True
12: k.predict()
13: k.update( $s_1.pos_t$)
14: end if
15: end for
16: end for
17: for  $s_2 \in \mathcal{I}_2$ do
18:  $d_{min} \leftarrow$ distance tolerance
19: for  $k \in \mathcal{H}$ do
20: if k.assigned = False then
21:  $d_2 \leftarrow \|s_2.pos_t - k.pos_{t-1}\|_2$
22: if  $d_2 < d_{min}$ then
23:  $s_2.estimate.id \leftarrow k.id$
24: k.assigned \leftarrow True
25:  $s_2.pos_t, z \leftarrow k.pos_{t-1}, z$
26: k.predict()
27: k.update( $s_2.pos_t$)
28: end if
29: end if
30: end for
31: end for
32: return K

```

系统在越来越拥挤的环境中检测到人类动态障碍物时的性能。另一组实验比较了相同方法在动态障碍物为无人机的场景中的性能。GridNet 在数据中没有使用无人机作为障碍物进行训练；因此，没有训练的 LiDAR 扫描包含无人机返回的数据。在这些实验中，STORM 的成功表明，该模型学习了运动线索，可以泛化并检测到以前未见过的障碍物。在训练、验证和测试数据之间，我们运行了超过 40 次实验，每次实验持续 2-10 分钟，产生了约 84,000 个带标签的数据点。其中，大约 57% 的数据点对应于训练数据，7% 对应于验证数据，36% 对应于测试数据。

### A. 实验设置

点云和里程计数据是使用安装在 Holybro x500 无人机上的 Mid-360 Livox LiDAR 采集的，该 LiDAR 以 10 Hz 的频率运行。还使用 Vicon 运动捕捉系统。Vicon 运动捕捉系统还用于获得每个实验中障碍物的地面真实位置。由于 Vicon 运动捕捉系统将地面真实位置表示为 $\mathbb{R}^3$ 中的一个质量点，而不是 3D 边界框，因此我们

---

<div style="text-align: center;">TABLE II: Performance of methods on precision, recall, F1 score, and position error metrics across three distance thresholds on a set of experiments with a quadcopter dynamic obstacle. For each metric, the highest performing method is highlighted in green and the second highest in light green. For precision, recall, and F1 score, higher is better. For position error, lower is better. # Obs is the number of static obstacles in the room. We omit LV-DOT's rows as it achieved zero precision, recall, and F1 score on these experiments.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td rowspan="2"># Obs</td><td rowspan="2">Method</td><td colspan="4">DistThresh = 0.75m</td><td colspan="4">DistThresh = 0.5m</td><td colspan="4">DistThresh = 0.25m</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>F1</td><td style='text-align: center; word-wrap: break-word;'>Pos Err (m)</td></tr><tr><td rowspan="3">0</td><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.42</td><td style='text-align: center; word-wrap: break-word;'>0.59</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.42</td><td style='text-align: center; word-wrap: break-word;'>0.59</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.36</td><td style='text-align: center; word-wrap: break-word;'>0.53</td><td style='text-align: center; word-wrap: break-word;'>0.18</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.49</td><td style='text-align: center; word-wrap: break-word;'>0.66</td><td style='text-align: center; word-wrap: break-word;'>0.19</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.49</td><td style='text-align: center; word-wrap: break-word;'>0.66</td><td style='text-align: center; word-wrap: break-word;'>0.19</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.44</td><td style='text-align: center; word-wrap: break-word;'>0.61</td><td style='text-align: center; word-wrap: break-word;'>0.16</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.82</td><td style='text-align: center; word-wrap: break-word;'>0.90</td><td style='text-align: center; word-wrap: break-word;'>0.23</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.81</td><td style='text-align: center; word-wrap: break-word;'>0.89</td><td style='text-align: center; word-wrap: break-word;'>0.22</td><td style='text-align: center; word-wrap: break-word;'>0.99</td><td style='text-align: center; word-wrap: break-word;'>0.74</td><td style='text-align: center; word-wrap: break-word;'>0.85</td><td style='text-align: center; word-wrap: break-word;'>0.17</td></tr><tr><td rowspan="3">11</td><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.50</td><td style='text-align: center; word-wrap: break-word;'>0.67</td><td style='text-align: center; word-wrap: break-word;'>0.20</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.50</td><td style='text-align: center; word-wrap: break-word;'>0.67</td><td style='text-align: center; word-wrap: break-word;'>0.20</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.42</td><td style='text-align: center; word-wrap: break-word;'>0.59</td><td style='text-align: center; word-wrap: break-word;'>0.16</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.40</td><td style='text-align: center; word-wrap: break-word;'>0.57</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.40</td><td style='text-align: center; word-wrap: break-word;'>0.57</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.34</td><td style='text-align: center; word-wrap: break-word;'>0.51</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.52</td><td style='text-align: center; word-wrap: break-word;'>0.69</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.52</td><td style='text-align: center; word-wrap: break-word;'>0.68</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.43</td><td style='text-align: center; word-wrap: break-word;'>0.61</td><td style='text-align: center; word-wrap: break-word;'>0.16</td></tr><tr><td rowspan="3">26</td><td style='text-align: center; word-wrap: break-word;'>Dynablox</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.41</td><td style='text-align: center; word-wrap: break-word;'>0.58</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.41</td><td style='text-align: center; word-wrap: break-word;'>0.58</td><td style='text-align: center; word-wrap: break-word;'>0.21</td><td style='text-align: center; word-wrap: break-word;'>1.00</td><td style='text-align: center; word-wrap: break-word;'>0.32</td><td style='text-align: center; word-wrap: break-word;'>0.48</td><td style='text-align: center; word-wrap: break-word;'>0.17</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM NG</td><td style='text-align: center; word-wrap: break-word;'>0.98</td><td style='text-align: center; word-wrap: break-word;'>0.40</td><td style='text-align: center; word-wrap: break-word;'>0.57</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>0.98</td><td style='text-align: center; word-wrap: break-word;'>0.40</td><td style='text-align: center; word-wrap: break-word;'>0.57</td><td style='text-align: center; word-wrap: break-word;'>0.18</td><td style='text-align: center; word-wrap: break-word;'>0.98</td><td style='text-align: center; word-wrap: break-word;'>0.35</td><td style='text-align: center; word-wrap: break-word;'>0.52</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>STORM (Ours)</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.46</td><td style='text-align: center; word-wrap: break-word;'>0.62</td><td style='text-align: center; word-wrap: break-word;'>0.20</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.45</td><td style='text-align: center; word-wrap: break-word;'>0.62</td><td style='text-align: center; word-wrap: break-word;'>0.19</td><td style='text-align: center; word-wrap: break-word;'>0.97</td><td style='text-align: center; word-wrap: break-word;'>0.39</td><td style='text-align: center; word-wrap: break-word;'>0.56</td><td style='text-align: center; word-wrap: break-word;'>0.15</td></tr></table>

![Image](images/d1889fbea5f3a38c3beed1cda88edc3b0e8aa173d4fb1bfec23b25af9a2d0350.jpg)

<div style="text-align: center;">Fig. 3: Precision, recall, and F1 score in an experiment where a pedestrian traverses a room with 21 static obstacles. The dense obstacle configuration forces frequent strong occlusions and proximity-induced false negatives. STORM recovers information lost during those failure modes, achieving higher recall and F1 score than other methods.</div>

![Image](images/c6c4886919d8ef0b9c045127bb61eb985fed5e4f07c3c76d2038fbf78e03335e.jpg)

<div style="text-align: center;">Fig. 4: Precision, recall, and F1 score in an experiment where a quadcopter flies at high speeds (0-5 m/s) in an empty room. STORM captures the high speed motion of the vehicle, achieving significantly higher recall and F1 score than other methods with comparable precision.</div>

定义关联阈值 threshold = 1 - distThresh，将其作为交并比 (intersection over union) 阈值的代理。其中，distThresh 是检测与其真实值之间的最大欧几里得距离。较高的关联阈值意味着检测与真实值之间的最大有效距离较低。

我们使用可折叠的表格和互锁的泡沫板，在

![Image](images/799e0a52badef9dc4f0fcbd8634551b74b8ea5c506e763931a17309cda8abc1f.jpg)

<div style="text-align: center;">Fig. 5: Experimental setup with 31 static obstacles. Quadcopter is pictured at the center of the room, surrounded by tables and foam pillars. The dense obstacle arrangement generates multiple partial occlusions and narrow corridors that clustering-based systems struggle with.</div>

一个 10x10 平方米的房间内构建了各种静态障碍物配置。在实验之间，静态障碍物会逐渐添加到空间中，从而增加了环境的复杂性，并可能由于部分遮挡和障碍物接近而产生假阴性。占用栅格地图 (MOS) 模块以及状态估计模块是用 C++ 实现的。GridNet 模型是使用 PyTorch 设计的。我们使用 ROS2 作为系统的通信框架。所有测试都在一台配备 Intel-i9 CPU 和 NVIDIA GEFORCE RTX 4090 GPU 的 Lenovo Soundwave 笔记本电脑上运行。对于基于 OGM 的系统，在所有实验中都使用了 0.2 米的网格分辨率和最大半径为 11 米。GridNet 模型使用相同的尺寸和 T = 3 的扫描历史进行训练。

在所有实验中，我们将 STORM 的性能与 Dynablox [^2] 和 LV-DOT [^1] 进行比较。我们还包括运行不带彩色图像的 LV-DOT（LV-DOT NC）以及不使用 GridNet 模型的 STORM（STORM NG）的结果，以突出显示这些系统中学习组件的性能优势。我们使用精度、召回率、F1 分数和位置误差指标，跨距离阈值范围从 0 米到 1 米，来量化上述方法的检测率和质量。我们特别

---

关注 F1 分数，因为它既反映了检测率，又反映了质量。

### B. 定性结果和失效分析

我们构建了复杂的静态环境（例如，图 5），在同一房间内模拟在拥挤场景中检测动态障碍的挑战，同时在受控空间中提供可靠的地面真实数据。 安排的障碍物配置产生了强烈的局部遮挡和狭窄的间隙，供动态物体通过。 虽然这些环境利用了 Dynablox 和 LV-DOT 的局限性，但 STORM 始终表现出对这些故障模式的鲁棒性。 图 1 包含来自所有方法的三项不同实验的快照。 顶部行对应于 LV-DOT，中间行对应于 Dynablox，底部行对应于 STORM，并且每项实验中静态物体的数量从左到右增加。 为了清晰起见，地面真实障碍物的位置用红色圆环标记，我们检测系统的边界框在每个图像中以彩色矩形显示。 图 1 的第二列突出显示了 LV-DOT 的一种常见故障模式。 图像右下角的一名行人被两个泡沫柱夹在中间。 即使该人没有被遮挡，但由于其靠近柱子，因此对 LV-DOT 来说是不可见的。 同样，在第三列中，一个移动的障碍物靠近一个静态的障碍物，在某个时间步，动态和静态的障碍物聚集在一起，然后动态的障碍物移动开来，但静态的障碍物仍然被错误地分类为动态的，持续几秒钟（请注意，在拍摄快照时，动态障碍物位于房间的另一侧）。 Dynablox 最容易受到局部遮挡的影响，因为它依赖于手动调整的参数来区分小型动态障碍物和噪声。 当只有障碍物的一部分可见时，属于该对象的动态点的数量可能低于预定义的阈值，导致系统无法检测到该障碍物。 在第一列中，我们观察到 Dynablox 无法检测到一名行人，该行人走在静态障碍物后面，即使在整个轨迹中，该人的部分身体是可见的，而 STORM 成功地检测到该行人，即使在包含局部遮挡的帧中。 尽管这是 Dynablox 的主要虚假阴性来源，但最近邻检查可能会从靠近静态物体时，从移动的物体中减去动态点，从而导致即使在障碍物完全在传感器视线范围内时，也会出现检测不到的情况（参见第二列右下角的行人）。 我们的方法，相比之下，对动态障碍物的尺寸和密度的变化具有鲁棒性，因为它在每个时间步都访问了点云扫描的历史记录。

### C. 检测器在人形障碍物上的性能

在这些实验中，行人穿梭于静态障碍物之间，一架配备 LiDAR 传感器的无人机位于房间中央。每位行人戴着一顶带有六个运动捕捉球的硬帽，以生成地面真实位置。进行了多次实验，从空房间开始，然后在测试中添加 4-6 个障碍物。如图 3 所示，该图来自包含 21 个静态障碍物的实验，与在拥挤房间中的其他方法相比，STORM 的表现尤其出色。

为了简洁起见，表 I 仅包含在 4、16 和 31 个静态障碍物以及 1-3 个以不同速度移动的行人组成的环境中进行的实验，但该表中显示出的趋势在所有实验中都持续存在。在所有拥堵级别下，我们的方法在精度方面均保持在 0.98 以上，同时相对于 Dynablox 和 LV-DOT 显著提高了召回率，尤其是在较高的关联阈值 ( $dist_{Thresh} = 0.25m$) 下。我们的位置误差始终在各自运行中的最低误差范围内 5 厘米。在物体密度较高的场景中，召回率的提高最为明显，因为这些场景中经常出现部分遮挡和由距离引起的聚类失败。在一个包含 31 个静态障碍物和两个行人的实验中，与未使用 GridNet 的我们的方法相比，我们的方法实现了 10.18% 更高的召回率和 6.60% 更高的 F1 分数，距离阈值为 0.25 米。相对于 Dynablox，它在召回率和 F1 分数上分别提高了 28.67% 和 18.50%。供参考，在 4 个障碍物的情况下，STORM 的 F1 分数仅比 Dynablox 的 F1 分数高 2.35%。在某些测试中，STORM NG 实现了比 Dynablox 更高的召回率，这可能是由于 EKF 模块，该模块在缺少测量值时在时间步之间传播位置估计，以及更具区分性的过滤，用于区分部分遮挡和噪声。总体而言，我们发现 STORM NG 和 Dynablox 在所有指标上的性能具有可比性。在所有方法中，LV-DOT 最受拥堵的影响。在 0.25 米的距离阈值下，LV-DOT 的精度和召回率分别低于 STORM 的 425.71% 和 297.21%。这是因为 LV-DOT 在执行 MOS 之前会聚类对象，将动态和静态障碍物合并，并模糊检测结果。

<div style="text-align: center;">TABLE III: Mean processing time (ms) of parallel pipelines</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Pre-process</td><td style='text-align: center; word-wrap: break-word;'>MOS</td><td style='text-align: center; word-wrap: break-word;'>Clustering</td><td style='text-align: center; word-wrap: break-word;'>Fusion</td><td style='text-align: center; word-wrap: break-word;'>Total</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>OGM</td><td style='text-align: center; word-wrap: break-word;'>1.65</td><td style='text-align: center; word-wrap: break-word;'>23.56</td><td style='text-align: center; word-wrap: break-word;'>0.10</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>25.46</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>GridNet</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>69.31</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>0.15</td><td style='text-align: center; word-wrap: break-word;'>69.46</td></tr></table>

### D. 检测器在其他障碍物上的性能

在这个实验集中，一架无人机在静态障碍物之间飞行，而另一架配备 LiDAR 传感器的无人机位于房间中央。两架无人机都配备了运动捕捉球，用于计算其地面真实值。表 II 报告了包含 0、11 和 26 个静态障碍物的实验结果。

在最拥堵的环境中，STORM 在召回率上比 Dynablox 提高了 21.88%，在 F1 分数上提高了 16.42%。如果没有 GridNet，召回率和 F1 分数分别下降了 11.61% 和 7.90%。令人惊讶的是，在这些测试中，当没有静态障碍物时，性能差距更大。如图 4 所示，在实验中，STORM 在 F1 分数上分别比 Dynablox 和 STORM NG 高 61.10% 和 39.87%。通过可视化障碍物检测和地面真实位置，观察到当障碍物加速时，STORM NG 和 Dynablox 会错过检测。这可能是由于快速飞行速度，这些速度在无拥堵的空间中很容易实现，以及无人机的低点密度。这使得基于 OGM 的检测器难以工作，因为它们依赖于为过滤掉伪影和稀疏的快速移动车辆而设计的预调参数，而难以将这些车辆与噪声区分开。我们的模型可以学习这些参数，并在低密度快速移动的障碍物上表现良好，因为它们在 T=3 大小的时间窗口中具有更明显的位移。

---

由于激进的点数、聚类大小或聚类密度过滤，这些过滤针对的是具有人类比例的障碍物，LV-DOT 的 3D 流程未能检测到动态无人机。由于无人机不属于 YOLO 的任何类别，因此视觉模块也未检测到该无人机，导致所有无人机测试的总体精度和召回率为零。

可能是由于激进的点数、聚类大小或聚类密度过滤，这些过滤针对的是具有人类比例的障碍物，LV-DOT 的 3D 流程未能检测到动态无人机。由于无人机不属于 YOLO 的任何类别，因此视觉模块也未检测到该无人机，导致所有无人机测试的总体精度和召回率为零。

### E. 运行时间分析

我们的基于 OGM 和基于学习的并行流水线，平均总运行时间分别为 25.46 毫秒和 69.46 毫秒。 这对应于 OGM 方法的 39.28 Hz 运行频率，以及 14.40 Hz 的模型运行频率，这足以实现实时运行。 由于 GridNet 补充了 OGM 检测结果，因此模型的运行时间不会成为系统的瓶颈，但在拥挤的场景中，对 GridNet 的过度依赖可能会导致检测结果相对于真实值略有延迟（参见图 1），这反映了 GridNet 更高的推理时间。 这种额外的延迟是有限的，并且优于仅依赖 OGM 时观察到的漏检情况。 尽管我们以顺序方式处理点云历史记录，但此过程可以完全并行化。 为了保留信息，我们还处理每个扫描的 20,000 个 LiDAR 点。 我们预计，并行处理点云历史记录、降采样点云以及将 PyTorch 模型导出到 TensorRT 将提供足够的性能提升，从而使我们的系统能够在资源受限的嵌入式设备上部署，例如 Jetson Orin AGX。

在包含以高达 5 m/s 速度移动的障碍物的实验中，该方法在所有方法中都具有最高的召回率。

### V. 结论与讨论

本文提出了 STORM，这是一种基于 LiDAR 的、不区分类别的、多目标检测框架，该框架对拥挤的室内环境中出现的遮挡和由接近造成的故障具有鲁棒性。 通过将时间占据网格运动分割与学习的 2D 动态网格表示相结合，该方法解决了基于聚类的系统的主要故障模式，特别是靠近静态障碍物时出现的漏检。 实验结果表明，随着环境变得越来越拥挤，召回率和 F1 分数始终得到提高，并且与最先进的基于聚类的检测器相比，精度和定位误差相当。 最后，STORM 在相对最先进的方法中，对快速移动物体的鲁棒性得到了证明。

虽然 OGM-GridNet 融合解决了 Dynablox 和 LV-DOT 面临的许多挑战，但我们仍然继承了基于 OGM 检测器的某些局限性。 薄表面会产生虚假伪影，从而导致假阳性，从而降低总体 F1 分数。 此外，由于 GridNet 依赖于三个 LiDAR 扫描的时间窗口，因此该模型在更快的对象上表现更好，因为它们在 0.3 秒的时间窗口内的位移更明显。 实现第 IV-E 节中讨论的 GridNet 改进，以及针对 OGM 分割流程的优化，是未来工作的有前景的方向，这将减少端到端的延迟并实现资源受限嵌入式平台的有效部署。

## 参考文献

[^1]: Z. Xu, H. Shen, X. Han, H. Jin, K. Ye, and K. Shimada, "LV-DOT: Lidar-visual dynamic obstacle detection and tracking for autonomous robot navigation," arXiv preprint arXiv:2502.20607, 2025.

[^2]: L. Schmid, O. Andersson, A. Sulser, P. Pfreundschuh, and R. Siegwart, "Dynablox: Real-time detection of diverse dynamic objects in complex environments," IEEE Robotics and Automation Letters, vol. 8, no. 10, pp. 6259–6266, 2023.

[^3]: R. E. Kalman, “A new approach to linear filtering and prediction problems,” 1960.

[^4]: A. H. Lang, S. Vora, H. Caesar, L. Zhou, J. Yang, and O. Beijbom, "Pointpillars: Fast encoders for object detection from point clouds," in Proceedings of the IEEE/CVF conference on computer vision and pattern recognition, 2019, pp. 12697–12705.

[^5]: Y. Min, D.-U. Kim, and H.-L. Choi, “Kernel-based 3-d dynamic occupancy mapping with particle tracking,” in 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021, pp. 5268–5274.

[^6]: M. Schreiber, V. Belagiannis, C. Gläser, and K. Dietmayer, “Dynamic occupancy grid mapping with recurrent neural networks,” in 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021, pp. 6717–6724.

[^7]: M. Lu, X. Fan, H. Chen, and P. Lu, “Fapp: Fast and adaptive perception and planning for uavs in dynamic cluttered environments,” IEEE Transactions on Robotics, 2024.

[^8]: S. Shi, C. Guo, L. Jiang, Z. Wang, J. Shi, X. Wang, and H. Li, "Pv-rcnn: Point-voxel feature set abstraction for 3d object detection," in Proceedings of the IEEE/CVF conference on computer vision and pattern recognition, 2020, pp. 10529–10538.

[^9]: H. Wu, Y. Li, W. Xu, F. Kong, and F. Zhang, "Moving event detection from lidar point streams," Nature communications, vol. 15, no. 1, p. 345, 2024.

[^10]: T. Yin, X. Zhou, and P. Krahenbuhl, “Center-based 3d object detection and tracking,” in Proceedings of the IEEE/CVF conference on computer vision and pattern recognition, 2021, pp. 11784–11793.

[^11]: A. Elfes, “Using occupancy grids for mobile robot perception and navigation,” Computer, vol. 22, no. 6, pp. 46–57, 2002.

[^12]: J. Redmon, S. Divvala, R. Girshick, and A. Farhadi, “You only look once: Unified, real-time object detection,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2016, pp. 779–788.

[^13]: S. Hoermann, M. Bach, and K. Dietmayer, “Dynamic occupancy grid prediction for urban autonomous driving: A deep learning approach with fully automatic labeling,” in 2018 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2018, pp. 2056–2063.

[^14]: X. Chen, S. Li, B. Mersch, L. Wiesmann, J. Gall, J. Behley, and C. Stachniss, “Moving object segmentation in 3d lidar data: A learning-based approach exploiting sequential data,” IEEE Robotics and Automation Letters, vol. 6, no. 4, pp. 6529–6536, 2021.

## [^15]: B. Mersch, X. Chen, I. Vizzo, L. Nunes, J. Behley, and C. Stachniss, “Receding moving object segmentation in 3d lidar data using sparse 4d convolutions,” IEEE Robotics and Automation Letters, vol. 7, no. 3, pp. 7503–7510, 2022

---

[^16]: B. Mersch, T. Guadagnino, X. Chen, I. Vizzo, J. Behley, and C. Stachniss, “Building volumetric beliefs for dynamic environments exploiting map-based moving object segmentation,” IEEE Robotics and Automation Letters, vol. 8, no. 8, pp. 5180–5187, 2023.

[^17]: B. Zhou, J. Xie, Y. Pan, J. Wu, and C. Lu, “MotionBEV: Attention-aware online lidar moving object segmentation with bird’s eye view based appearance and motion features,” IEEE Robotics and Automation Letters, vol. 8, no. 12, pp. 8074–8081, 2023.

[^18]: X. Chen, B. Mersch, L. Nunes, R. Marcuzzi, I. Vizzo, J. Behley, and C. Stachniss, “Automatic labeling to generate training data for online lidar-based moving object segmentation,” IEEE Robotics and Automation Letters, vol. 7, no. 3, pp. 6107–6114, 2022.

[^19]: C. R. Qi, W. Liu, C. Wu, H. Su, and L. J. Guibas, “Frustum pointnets for 3d object detection from rgb-d data,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2018, pp. 918–927.
