论文笔记:Geo-CNN

Modeling Local Geometric Structure of 3D Point Clouds using Geo-CNN

GeoCNN

1、四个问题

  1. 要解决什么问题?
    • 3D点云具有不规则的结构,不能输入普通的CNN中。因此,要提出可以直接将点云作为输入的CNN网络。
    • 许多研究对局部几何信息特征提取的关注太少,还要能对局部区域的点的几何结构进行建模。
  2. 用了什么方法解决?
    • 提出了一个通用的卷积操作:GeoConv,用来提取点及其局部领域的特征。
    • 点与点之间的局部几何关系是通过中心点与其领接点的边(特征)来表示的。
    • 首先,将边特征分解到三个正交坐标基上,根据边向量和正交基的夹角对提取的特征加权求和。
  3. 效果如何?
    • 在ModelNet40、KITTI上都取得了目前最好的效果。
  4. 还存在什么问题?
    • 每次GeoConv都需要重新计算所有点的K近邻点,不适合大规模点云处理的情形。

2、论文概述

2.1、简介

  • 目前RGBD相机以及激光雷达快速发展,3D点云可以更容易地获取到。
  • 点云是不规则的数据,无法直接用传统的2D CNN处理。
  • 一种直觉上的方法就是,将不规则点云转换为规则的3D网格,即体素化。这样便可以使用过类似CNN的操作。然而,体素化的方法不能取太大的分辨率,因为3D网格会占用过多的内存。
  • 另一种很重要的架构就是PointNet。通过一个对称函数聚合点的特征。而PointNet++则分层聚合局部区域的特征。但是这些方法仍然忽视了点的一些几何结构,因为这些方法都是将点独立开来作为全局的点集或者局部点集处理。
  • 最近一个对点的几何关系建模的尝试是EdgeConv,从每个点及其k近邻提取特征。但是,EdgeConv只对点之间的距离进行建模,而忽视了向量的方向,也会损失一部分几何信息。
  • 对几何信息建模的难点有以下两点:
    1. 首先,点之间的几何关系可能会被3D坐标的巨大方差掩盖,导致其难以直接从数据中学习得到。
    2. 其次,现在很多方法都将3D坐标投影到某个高维空间中,很有可能不再保留有这些点之前在原始欧式空间中所具有的几何信息。特别是,在网络的层数很深时,这种现象更为明显。
  • 为了解决上述问题,作者提出了GeoConv。

论文笔记:Geo-CNN

2.2、GeoConv

  • 假设CC维点云有nn个点,某个点pp在第ll层的特征向量是XplRCX_{\vec{p}}^{l} \in \mathbb{R}^C
  • 对于每个点pp,给定半径rr,可以构建以点pp为中心的球形邻域N(p)N(\vec{p}),其中N(p)={qpqr}N(\vec{p}) = \{ \vec{q} | \|\vec{p}-\vec{q}\| \leq r \}
  • 则第l+1l+1层的点p可以通过下式计算:
  • 论文笔记:Geo-CNN
  • WcW_c是用来提取中心点的特征的权值矩阵。g(p,q)g(\vec{p}, \vec{q})是建模了边特征的函数。
  • 得到特征后,不同的邻域点qq和中心点pp之间要根据距离d(p,q,r)d(\vec{p}, \vec{q}, r)加权:
  • 论文笔记:Geo-CNN
  • d(p,q,r)d(\vec{p}, \vec{q}, r)有两个理想的性质:
    1. 随着pq\| \vec{p} - \vec{q} \|单调递减。
    2. 随着rr的增大,这也意味着GeoConv的感受野逐渐加大,与中心点pp距离相近的点之间的权重函数d()d(\cdot)的差异也会减小。
  • 接下来,最重要的部分就是GeoConv中的边特征(即公式中的g(p,q)g(\vec{p}, \vec{q}))是如何定义的。
    • 一个最直接的方法就是直接使用MLP来计算每个边的**值。然而这种方法容易过拟合,因为直接使用向量pq\vec{pq}表示的边的几何特征会有较大方差。
    • 另一个隐患就是,直接将特征映射到高维空间中,可能不再保留有原始的欧式几何结构信息。
  • 在3D欧式空间中,任何向量都可以表示为三个正交基(x,y,z)(\vec{x}, \vec{y}, \vec{z})的投影,投影的模长可以表示在那个方向上的“能量”。
  • 因此,将边特征的提取分解为子三个正交基上进行,使用不同的权值矩阵WbW_{\vec{b}}来提取各个方向的边特征。最后再讲三个方向的特征重新聚合以维持欧式几何结构。
  • 实际中,只考虑6个正交基,如下:
  • 论文笔记:Geo-CNN
  • 6个基会将坐标系分为8个象限。给定一个领域点qq,首先确定它位于拿一个象限,随后将这个向量pq\vec{pq}分解到那个象限对应的三个基上,并计算与各个基之间的夹角。
  • 随后使用如下公式计算边的特征:
  • 论文笔记:Geo-CNN
  • 其中XqlX_{\vec{q}}^l是点qq在第ll层的特征,BqB_{\vec{q}}表示根据q\vec{q}所在的象限的三个正交基的几何。在聚合特征时,以系数cos2(θpq,b)cos^2(\theta_{\vec{pq}, \vec{b}})为权值,保证了和为1。
  • 如下图所示,不断叠加GeoConv层,并同时增加近邻点的搜索半径rr,可以逐步扩大感受野,类似常规的CNN。

论文笔记:Geo-CNN

  • 在多层的GeoConv层之后,使用全局最大池化来提取全局特征。而这个全局特征可以送入分类网络,或者分割网络,抑或是检测网络中,做后续处理。

2.3、多视角情况

  • 我们可以旋转3D点云,然后提取多视角的特征来进行数据增强。
  • 在3D空间中,任何旋转都可以分解为绕xyz轴的旋转。为简便起见,这里假设只存在绕z轴的旋转。
  • 对点集进行旋转来做数据增强,是一个很天真的合并多视角的特征的方法。有时,甚至会导致模型的准确率下降。
    • 一个可能的原因是,现有的方法都不能从多个3D视角下的巨大方差中学习到一个紧密的模型。
    • 一个替代方法就是,为每个3D视角训练一个模型,最后再讲所有的结果聚合起来,这样会大大提升网络的复杂度。
  • 文中采用的方法是,在网络的特征层拟合旋转,如下:
  • 论文笔记:Geo-CNN
  • 其中,WvW_v是从多视角的特征下学习到的权重,θpqv,b\theta_{\vec{p q_v}, \vec{b}}是根据固定的正交基和旋转后的边重新计算的角度。

2.4、实现细节

  • GeoConv模块的输入是:n×Cinn \times C_{in} ;输出是:n×Coutn \times C_{out}
  • 对于每个点pp,根据超参数rr计算局部球形领域,得到若干个近邻点。
  • 使用Cin×CoutC_{in} \times C_{out}的权重矩阵WcW_c提取中心点的特征。
  • GeoConv模块还参考了ResNet中的瓶颈模块(bottleneck module),先提取一个低维(CreducC_{reduc})的特征,再输出高维(CoutC_{out})的特征。

论文笔记:Geo-CNN

2.5、实验

论文笔记:Geo-CNN

论文笔记:Geo-CNN

3、参考资料

  1. Modeling Local Geometric Structure of 3D Point Clouds using Geo-CNN