3D Object Detector Point-GNN

概述

如下是三种常见的点云表示和处理方法: 点云数据表示

如下图所示,网络架构主要由三部分组成:图构建、T次迭代GNN和边界框合并和评分。

网络架构

图构建

点云表示

定义一个包含 \(N\)个点的点云集合\(P = \{ p_1,..., p_N \}\),其中, 每个点\(p_i=(x_i,s_i)\)包含3D坐标信息\(x_i \in \mathcal{R}^3\)和一个长度为\(k\)的向量表示点的属性的状态信息 \(s_i \in \mathcal{R}^k\)。状态值\(s_i\)可以是激光的反射强度或者周围对象特征的编码。 使用点\(P\)作为顶点以固定半径\(r\)连接其邻近点构建图\(G=(P,E)\),其中 \[E = \{(p_i,p_j) | \|x_i-x_j\|_2 < r\}\]

Cell list查找算法

通过使用单元列表查找给定截止距离内的点对,我们可以有效地解决问题,运行时间复杂度为\(\mathcal{O}(cN)\),其中\(c\)是半径内邻居的最大数量。

cell list查找算法

具体做法如下:

  1. 将空间划分为多个小的单元格(cell)。
  2. 将每个点都存储在对应的单元格中。
  3. 对于需要查找邻域的某个点,只需要检查该点所在单元格及其周围邻居单元格内的点,就可以高效地找到在给定截断距离内的所有点对。 这种基于cell list的方法可以大大提高邻域搜索的效率,避免了逐一检查所有点对的开销。

体素下采样算法

实际点云包含数万个点,哪怕基于上述的cell list查找算法,仍然会带来巨大的计算负担。

故,作者提出基于体素的下采样点云,得到\(\hat{P}\)来进行图构建。 其中,体素下采样指的是:

  1. 将原始的点云数据划分成多个三维体素(voxel)。
  2. 对于每个非空的体素,选择该体素内的一个代表性点作为下采样后的点。通常选择该体素内点的平均位置或中心点。

这样做的目的是:

  1. 降低点云的数据量,加快后续的图构建和计算过程。
  2. 消除原始点云中可能存在的噪声和不均匀分布,使得图结构更加稳定。

注:这里的体素仅用于降低点云的密度,并不用作点云的表示,仍然使用图来表示下采样后的点云。

如何在体素网格中保留原始点云信息?

将原始点云的信息编码(encode)到体素网格的初始状态值\(s_i\)中,具体操作如下:

  1. 对于体素网格中的每个顶点,搜索其半径为\[r_0\]的邻域内的原始点云数据。
  2. 对于每个顶点的邻域点云数据,使用神经网络模型提取它们的局部特征,不仅要保存它的平均属性,还要提取它所包含的原始点云数据的局部几何特征。这里使用了一种能够处理无序点集的神经网络架构(backbone),如PointNet或PointNet++。
    • 利用MLP(多层感知机)对每个点云数据点的反射强度和相对坐标进行嵌入编码。这可以学习到每个点的局部特征表示。
    • 然后使用Max pooling对这些局部特征进行聚合,得到每个体素的特征向量。这种聚合操作可以捕获体素内部点云数据的最显著特征。
    • 将这些聚合后的特征向量作为体素网格中每个顶点的初始状态值。这样可以在后续的优化过程中,利用这些丰富的局部特征信息来指导网格的优化。
  3. 将提取的局部特征编码到对应的体素中,以此来保留原始点云的细节信息。

具备自动注册功能的图神经网络

图神经网络消息传递

典型的图神经网络通过聚合沿边的特征来细化顶点特征。

\(t+1\)次迭代中,以如下形式更新每个顶点的特征:

\[e_{ij}^{t} = f^t(v_i^t, v_j^t)\] \[v_{i}^{t+1} = g^{t}(\rho(\{ e_{ij}^t |(i,j) \in E\}), v_i^t )\]

  1. \(v^t\):表示第t次迭代的顶点特征;
  2. \(e^t\):表示第t次迭代的边沿特征;
  3. \(f^t(.)\):计算两个顶点间的边沿特征;
  4. \(\rho^t(.)\):是一个集合函数,聚合每个顶点的边沿特征;
  5. \(g^t(.)\):采用聚合的边沿特征来更新顶点特征;

针对对象检测的改进

我们设计 GNN 来细化顶点的状态,以包含有关顶点所属对象的信息。为了实现这个目标,优化了上述公式,使用它的邻近状态更新顶点的状态: \[s_{i}^{t+1} = g^{t}(\rho(\{ f^t(x_j-x_i, s_j^t) |(i,j) \in E\}), s_i^t )\] 使用相对坐标作为函数\(f^t(.)\)的输入来提取边沿特征。使用相对坐标可以消除整个点云的全局平移对特征提取的影响,但其对邻域内的平移仍然是敏感的。

当顶点添加一个小的平移,其邻域内的局部特征仍然是相似的,但是邻域内的相对坐标都变化了,这就引起了函数\(f^t(.)\)的输入方差变大。

为了减少平移方差,使用中心顶点的结构特征而不是其坐标来对齐邻近节点的坐标。因为中心顶点的已经从上一次迭代中捕获了邻近点的结构特征信息,使用它预测对齐偏移,提出如下 自动注册机制: \[\varDelta{x}_{i}^{t} = h^{t}(s_i^t)\] \[s_{i}^{t+1} = g^{t}(\rho(\{ f^t(x_j-x_i+\varDelta{x}_{i}^{t}, s_j^t) |(i,j) \in E\}), s_i^t )\] 关于模型中的\(f^t(.)\)\(h^t(.)\)\(g^t(.)\)使用 多层感知器(MLP) 去学习函数参数,并在函数\(g^t(.)\)内添加残差连接\(\rho^t(.)\)函数选择 MAX 用于提升鲁棒性。 图神经网络单次迭代步骤如下: \[\varDelta{x}_{i}^{t} = \mathbf{MLP}_h^{t}(s_i^t)\] \[e_{ij}^{t} = \mathbf{MLP}_f^{t}([x_j-x_i+\varDelta{x}, s_j^t])\] \[s_{i}^{t+1} = \mathbf{MLP}_g^{t}(\mathbf{Max}(\{e_{ij}|(i,j) \in E\})) + s_i^t\]

  1. 每次迭代中使用不同的\(\mathbf{MLP}^{t}\),各个迭代之间不共享;
  2. 经过多次迭代后,使用顶点的状态值去预测类别和对象的边界框;
  3. 多类分类分支负责预测对象类别的概率。
  4. 定位分支负责预测每个对象类别的边界框坐标。

边界框的合并与评分

NMS算法

\[o_i=\frac{1}{l_iw_ih_i}\prod_{v\in\{v_i^l,v_i^w,v_i^h\}}\max_{p_j\in{b_i}}(v^Tx_j)-\min_{p_j\in{b_i}}(v^Tx_j)\]

实验数据

实验数据