三维深度学习之pointnet系列详解(一)

目前二维深度学习取得了很大的进步而且应用范围愈来愈广,随着三维设备的发展,三维深度学习获得了很大的关注。网络

最近接触了三维深度学习方面的研究,从pointnet入手,对此有了一点点了解但愿记录下来并分享,如有误但愿指正~持续更新学习

如下全部的解读基于点云分类
spa

1、三维深度学习简介.net

2、点云存在的问题orm

3、pointnet网络结构详解blog

4、pointnet代码详解
图片


1、三维深度学习简介ip

  1. 多视角(multi-view):经过多视角二维图片组合为三维物体,此方法将传统CNN应用于多张二维视角的图片,特征被view pooling procedure聚合起来造成三维物体;
  2. 体素(volumetric):经过将物体表现为空间中的体素进行相似于二维的三维卷积(例如,卷积核大小为5x5x5),是规律化的而且易于类比二维的,但同时由于多了一个维度出来,时间和空间复杂度都很是高,目前已经不是主流的方法了;
  3. 点云(point clouds):直接将三维点云抛入网络进行训练,数据量小。主要任务有分类、分割以及大场景下语义分割;
  4. 非欧式(manifold,graph):在流形或图的结构上进行卷积,三维点云能够表现为mesh结构,能够经过点对之间临接关系表现为图的结构。流形表达比较抽象,用到拉普拉斯特征什么的,我也不太懂……

2、点云存在的问题ci

  1. 无序性:点云本质上是一长串点(nx3矩阵,其中n是点数)。在几何上,点的顺序不影响它在空间中对总体形状的表示,例如,相同的点云能够由两个彻底不一样的矩阵表示。 以下图左边所示:
 咱们但愿获得的效果以下图右边:N表明点云个数,D表明每一个点的特征维度。不论点云顺序怎样,但愿获得相同的特征提取结果。

  

咱们知道,网络的通常结构是:提特征-特征映射-特征图压缩(降维)-全链接。get

  下图中x表明点云中某个点,h表明特征提取层,g叫作对称方法,r表明更高维特征提取,最后接一个softmax分类。g能够是maxpooling或sumpooling,也就是说,最后的D维特征对每一维都选取N个点中对应的最大特征值或特征值总和,这样就能够经过g来解决无序性问题。pointnet采用了max-pooling策略。


 2.旋转性:相同的点云在空间中通过必定的刚性变化(旋转或平移),坐标发生变化,以下图所示:

咱们但愿不论点云在怎样的坐标系下呈现,网络都能正确的识别出。这个问题能够经过STN(spacial transform netw)来解决。二维的变换方法能够参考这里,三维不太同样的是点云是一个不规则的结构(无序,无网格),不须要重采样的过程。pointnet经过学习一个矩阵来达到对目标最有效的变换。


3、pointnet网络结构详解

先来看网络的两个亮点:

  1. 空间变换网络解决旋转问题:三维的STN能够经过学习点云自己的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D表明特征维度,pointnet中D采用3和64)。至于其中的原理,个人理解是,经过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正作了什么变换,只要有利于最后的结果均可以。pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,好比把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。
  2. maxpooling解决无序性问题:网络对每一个点进行了必定程度的特征提取以后,maxpooling能够对点云的总体提取出global feature。

再来看网络结构:


 其中,mlp是经过共享权重的卷积实现的,第一层卷积核大小是1x3(由于每一个点的维度是xyz),以后的每一层卷积核大小都是1x1。即特征提取层只是把每一个点链接起来而已。通过两个空间变换网络和两个mlp以后,对每个点提取1024维特征,通过maxpool变成1x1024的全局特征。再通过一个mlp(代码中运用全链接)获得k个score。分类网络最后接的loss是softmax。

4、pointnet代码详解

好像也没有特别须要讲的……重点我都框出来了

网络模型部分




变换矩阵部分,以第一个STN为例