一、前言
主要介绍处理点云时用的深度学习方法:
- VoxNet,IROS 2015
- MVCNN,ICCV 2015
- PointNet,CVPR 2017
- PointNet++,NIPS 2017
二、VoxNet
VoxNet为了模仿2D CNN,直接把点云影射到voxel grid中,然后执行3D CNN,最终处理成一个向量。
三、MVCNN
MVCNN,在点云周围不同的虚拟相机位置产生不同的2D图,然后用2D CNN处理这些图,最后做分类。
四、PointNet
PointNet网络结构:
创新点:
- 通过max pool产生global feature,n*1024,对应每一个点的特征,max pool相当于获取了所有点最有效的特征,构成global feature。
- 为了解决点云的旋转不变性,设计了T-Net。
- PointNet is able to simulate any function on the point cloud。
详细说明第三个创新点:
第三个创新点翻译成数学的语言:
课上老师给的证明:
从Critical Points Set可以看出PointNet确实很牛,Critical Points Set是什么意思呢?最终global feature中的特征包含哪个点的特征,那个点就是critical point。
可视化结果如下:
但是PointNet没有像2D CNN那样逐层提取特征,所以就有了PointNet++。
五、PointNet++
网络结构如下:
每一个set abstraction包含三部分:
每一个圆圈的中心点就是sampling出来的点,grouping时使用k nearest neighbors更好一些,可以保证点的个数,方便网络处理。每一个group需要normalize。
另外还有其他的grouping方式:
也有其他提取特征的方式,从多层数据构造当前层的特征:
PointNet++的分类网络很简单,有意思的是他分割网络的设计:
分割网络主要由interpolate和unit pointnet。有点像auto-encoder,蓝色块中的特征d+C2+C1,其中d+C1来自于之前层的,C2时蓝色块中的点映射到红色中后,差值得到的特征。unit PointNet可以理解为没有max pool的PointNet。
PointNet++的结果:
Triks: