笔记源于B站视频 中科院模式识别国家重点实验室在读博士生刘永成:深度学习在3D点云处理中的探索.
1. motivation
对于一张2D图像,如果把它的RGB信息去掉,只剩下gird网格,我们就无法识别它的信息,我们认为2D图像的核心信息是RGB。对于3D点云并不是这样,当我们把这些点的颜色或法向的属性去掉,仅保留坐标我们还是可以识别出来,我们认为3D点云的核心信息是点的空间分布。
假如我们需要识别区分一个“T型”网络和“7型网络”,这样的分布它的点与点之间是有关联的,我们去单独学习每一个点是不合理的。它有一个dependency(图中的蓝色虚线),对于一系列点它可能有很多个dependency,比如像pointweb那样,每个点都和其它点有dependency或relation。我们认为这样稍微有点复杂,尝试用“优雅一点的方式”:选取一个中心点,以这个中心点为参考点,我们来找中心点和其它点的relation。然后对这个relation进行一个学习。学习完后我们把这局部的点云里面的所有relation进行一个聚合,然后来得到这个shape的表示。中间可用卷积神经网络来做这样一个事情。
2. method
怎么做呢?首先从原始点云里面去采集这个局部的点云子集,然后把它建成一个球形的邻域,比如它有一个中心点
x
i
x_{i}
xi和邻域点
x
j
x_{j}
xj,然后我们去直接highlight一个比较抽象的卷积操作。首先对于点云内的每一个点我们做一个特征变换,对变换后的特征做特征聚合,再进行一个非线性的卷积得结果。对于这样一个比较抽象的卷积,其实现在很多的方法都属于这样的一个类别里边。2D的卷积比较类似,先进行一个变换然后求和聚集,然后非线性卷积得到结果。我们仔细看一下这样的卷积方式,要满足置换不变性,我们有两个条件,聚集函数是对称的(像pointnet那样它是一个maxpooling),
T
T
T函数是共享的(也就是说它学习的weight是在整个的特征上是共享的)。传统卷积的缺陷第一个是它的权重没有共享,第二个是它在求梯度的时候只与一个点有关。怎么把这个局限性打破?我们把思想转换一下,我们从关系中学习。我们把
T
T
T函数里的
w
j
w_{j}
wj转为
w
i
j
w_{ij}
wij,
w
i
j
w_{ij}
wij学习的是
x
i
x_{i}
xi和
x
j
x_{j}
xj的关系。怎样去学习这样的关系?我们知道点云是处在3D的几何空间,这个关系还是要从这个几何空间中来,通过一种几何的方式来学习这种关系的表达,以此来进行卷积操作。具体做法是我们首先通过这个三维坐标去定义一些几何的关系,或是叫几何的向量,它是low-level关系的向量然后通过一个
M
M
M函数去映射(一个共享的多层感知机),将低维的关系映射到高维的关系表达,以此来做卷积操作。最终把这样的
T
T
T函数带到前面的式子我们发现,它其实就是在通过卷积的方式去聚集这个局部点云里面中心点与邻域点关系的一个表达,然后来捕捉一个3D的形状。
如图,定义一个
h
i
j
h_{ij}
hij,使用mapping function(M函数)映射到一个
w
i
j
w_{ij}
wij,且这个
w
i
j
w_{ij}
wij的维度是和
x
j
x_{j}
xj的特征(
f
x
j
f_{x_{j}}
fxj)是相等的,将两者相乘,乘完了就得到这个邻域点的特征,将所有临域点的特征进行一个聚合,再进行非线性,得到卷积表示。但是我们发现说我们这个卷积结果的输出维度是和输入的特征维度是相等的,这其实不是很好的,因为我们知道传统卷积这个生成的维度会增加,所以我们又引入channel-raisng mapping,使特征的维度提升,使用的就是共享的多层感知机。以此得到一个局部点云的卷积的结果。
现在讨论
h
i
j
h_{ij}
hij将如何定义。最直观的是说既然是个几何空间,并且我们想从这个点云去学习它的shape,就想去找两个点之间沿表面shape走的侧壁线测壁距离,但我们知道这是不能实现的,因为本来点云的表面shape本来就不知道。那我们就换一个角度思考,直接想用3D欧氏距离试一下,发现也可以取得不错的效果。整个
h
i
j
h_{ij}
hij是10维的
3. properties
该卷积的性质:
-
置换不变性
-
对刚体变换有鲁棒性
(主要在 h i j h_{ij} hij关系学习的定义上,我们采用了3D欧氏距离等或其他一些旋转不变的一种关系,那么在关系学习这part内就对旋转具有抗性)
-
对点与点之间有显式的一个capture
(我们知道 h i j h_{ij} hij定义的时候是根据 x i x_{i} xi和 x j x_{j} xj去定义的,并且interaction是在3D的集合空间的,我们不是在特征中间进行点与点关系的关联)
-
权值共享
(在2D的卷积里面我们是卷积核进行滑动,然后在feature
map上这个卷积核是共享的,在滑动到不同的位置时,这两个局部作用域它不同的就是RGB像素值,相同的是grid的这个结构,所以它从不同的RGB值里面学习到了该RGB值所反映的局部的patten,卷积核通过这样来学习;在3D的点云邻域,我们这样一个M函数权值共享,我们是在 h i j h_{ij} hij关系中共享,涵义就是说,我们是在学习不同局部点云当中点与点之间几何关系所反应出来的shape patten,意思是说我们从这个不同的关系当中去学习这样的一个patten)
4. RS-CNN
卷积做好了之后我们就可以搭建卷积神经网络。(a)结构为分类网络,(b)结构为分割网络。分割网络中参考了pointnet++中的propagation layers的思想来进行上采样,以得到分割的结果。整个网络的重要过程为最远点采样、球形邻域和卷积,最主要的还是卷积。
该网络的效果如图