3D点云的旋转不变卷积

高能核物理与粒子物理实验和理论研究产生了大量的点云数据,这几年的研究试着使用点云神经网络以及它的各个变种从核碰撞产生的大量粒子里面识别多粒子之间的长程关联,从而帮助确定物理信号。

最近读到一篇 2019 年的文章,里面的很多方法非常巧妙,这里解读一下。

题目:Rotation Invariant Convolutions for 3D Point Clouds Deep Learning

作者:Zhiyuan Zhang,Binh-Son Hua, David W.Rosen, Sai-kit Yeung

这篇文章的关键思想是如何构造点云上的卷积,使得当 3D 点云发生平移和旋转时,卷积网络的结果不变。

文章里的关键步骤包括:

  1. 构造旋转不变的局部特征

首先使用 farthest point sampling 得到点云的一个采样,这样可以降低计算复杂度。对采样得到的每个点,比如 p 点,寻找其 k 个最近邻粒子,构成一个局部点集,这个点集的中心点坐标为 。

有了 p 和 m,就可以定义一个参考方向矢量,

\vec{pm} = \vec{p} - \vec{m} = \begin{bmatrix} p_x \\\ p_y \\\ p_z \end{bmatrix} - \begin{bmatrix} m_x \\\ m_y \\\ m_z \end{bmatrix}
\vec{pm} = \vec{p} - \vec{m} = \begin{bmatrix} p_x \\\ p_y \\\ p_z \end{bmatrix} - \begin{bmatrix} m_x \\\ m_y \\\ m_z \end{bmatrix}

这个点集中的任一点 a,与 构成三角形,这个三角形存在几个旋转不变的局部特征,

其中两个矢量的点乘等于,

\vec{pa} \cdot \vec{pm} = (p_x - a_x)(p_x - m_x) + (p_y - a_y)(p_y - m_y) + (p_z - a_z)(p_z - m_z)
\vec{pa} \cdot \vec{pm} = (p_x - a_x)(p_x - m_x) + (p_y - a_y)(p_y - m_y) + (p_z - a_z)(p_z - m_z)

这个点集中与 a 点相关的旋转不变的特征因此有,

RIF(a;\vec{pm}) = \left[ d\_0, d\_1, \alpha\_0, \alpha\_1 \right]
RIF(a;\vec{pm}) = \left[ d\_0, d\_1, \alpha\_0, \alpha\_1 \right]

2. 变换到高维特征空间,离散化分bin

使用简单的全连接网络 MLP 将每个点的旋转不变特征变换到高维特征空间,

MLP 的参数被所有点共享,因此也称一维卷积 (1DCNN)。

接下来把所有点按其在 方向的投影分成很多个 bin,每个 bin 内求 global max pooling,得到它的统计信息。这样点集的信息被压缩为一个数组,数组中元素的个数等于 bin 数,而且是排好序的1维数组。再用一次 1DCNN 就能得到点集的特征。

将点集分bin的思路我之前也想过,因为 global max pooling 对信息压缩的太狠,而分bin后可以得到更多的统计信息。分 bin 之后对每个局部点集的特征求和,求平均估计能得到更好的结果。这个要在具体问题中尝试。