留个笔记自用
Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Convolution Networks for Point Cloud Analysis
做什么
首先先得理解点云是什么
点云的概念:点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。
点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等,不一一列举。
一般的3D点云都是使用深度传感器扫描得到的,可以简单理解为相比2维点,点云是3D的采样
做了什么
这里提出了提取点云数据特征的一种方式,3D-GCN也就是三维图卷积,它被设计为从跨尺度的点云提取局部3D特征,同时引入了平移和尺度不变性,主要的特点是定义了可学习的kernel,并带有max-pool机制
怎么做
这篇文章的核心就是新定义的三维图卷积这个结构,用于获取点云特征
首先还是定义,定义P={pn | n = 1, 2, . . . , N}表示点云输入∈N×3(用坐标(xn,yn,zn)来进行表示,即物体表面扫描到的点的空间坐标)
经过3D-GCN得到的逐点特征表示为f(p)∈RD(即D维特征)
为了得到逐点的局部特征信息,这里定义每个点pn的感受野是与它空间位置上最近邻的M个点,定义
这里的N(pn,M)表示||pm-pn||下点pn的M个最近点,M表示数量,同时定义dm,n为两点相减的方向向量,在后面的图卷积中有用到
然后结合前面特征定义,就可以定义点p的邻域感受野
为{f(pn), f(pm)| ∀pm ∈ N (pn, M)}即邻域每点各自的特征向量
图示↓
接下来是定义可学习的卷积核,常见的2D卷积核是这样的
但在空间下,数据点位置是无序的,无法使用这种规整化的kernel直接对应计算,于是这里设计了一个kernel方式KS,该kernel包含了S+1个核点kj∈R3(位置)
这里每个k都是一个点,kc是核中心点(0,0,,0)
然后对每个点k都定义一个权重向量w(k)∈RD和方向向量ks-kc(到核中心点的方向向量)
这里除了中心点,其他都是可学习的
图示↓
然后就是定义实际运算了
2D CNN中,卷积运算可视为计算2D核和相关图像块之间的相似性。输出值越大,表示视觉相似度越高。利用上述三维点云数据的感受野和核定义
这里的KS就是卷积核,RnM就是点pN的邻域,这里就是为了计算这两者之间的相似度
即
这两者之间的
这里的f§就是点p的特征,w(K)是核卷积中心点的特征, <·>表示内积操作(常见的计算向量相似度的方法),而A=
简单来说,这里的sim函数的意义就是通过cos相似度计算f(pm)和w(ks)之间的内积(每一对,即邻域每个点和核的每点),g(A)就是从A中找出相似度值最大的那个值,这里的dm,n在前面定义过,是m和n点的方向向量
于是计算方法最后定义为
简单来说R和K的计算方法就是,计算两个中心点的相似度,再计算核每个点和邻域中每个点相似度中的最大值之和(即核点找原邻域中最相似的那个值)
这里的领域数M和核点数S都是超参数
图示↓
定义完卷积计算方法,就是具体定义层了,即3D Graph Convolution Layer,每层定义为包含L个核KS
然后是定义单层的输入输出
简单来说,对于每个feature map∈RN×D,即N个点D维特征的特征图,经过一次kernel运算后得到的feature map是RN×L的,这里的L是核数量。即
这里的Fiout是Fout的第i个channel,这里的KIS就是第i个kernel,这里理解起来就跟卷积计算很相似了。
然后是Max-pooling层
这里的Pin是N×3是输入的点云,Fin是N×D是输入的feature map,Pout数(N/R)×3,这里的R是一个sample比例,就是pool的比例,FOUT是(N/R)×D,同理。
总结
1.即插即用!永远的神!
2.总感觉这种计算卷积点的方式有些奇怪,直接舍弃掉邻域中的大部分点,纯粹地根据核中点来匹配,太过于局部了。
3.文中似乎没有讲到pool层中具体的sample方式,但我认为这样sample的话背弃了2D中max pool这种的集最大性质,或许这里有所增强的点