今天要聊的论文是斯坦福大学Charles等人在CVPR2017上发表的论文,提出了一种直接处理点云的深度学习网络——PointNet。
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation.
可以说,这篇论文具有里程碑意义。为什么这么评价?
因为在PointNet之前,点云没办法直接处理。
由于点云是三维的、无序的,别说深度神经网络了,就是普通算法很多都不能奏效。
于是人们想出来各种办法,比如把点云拍扁成图片(MVCNN),比如把点云划分成体素(类似游戏“我的世界”里的场景),再比如把点云划分成节点然后按顺序拉直(O-CNN)等等。总之,点云先要被处理成“非点云”。这些想法怎么样呢?其实也挺不错的,也能取得较好的结果。比如MVCNN的有些指标就不输PointNet。
这时候我们就会觉得,冥冥中一定存在一种网络,可以摆脱上面这些操作。于是,PointNet出现了,从此点云处理领域分成“前PointNet时代”和“后PointNet时代”。接着,各种直接处理点云的网络也纷纷出现,如PointCNN、SO-Net,效果也是越来越好。
由于做点云的人对这篇论文肯定都比较熟悉了,这里就不按照论文顺序详细展开了,只把PointNet的几个创新点简单提一提。
1
针对点云无序性——采用Maxpooling作为对称函数。最大池化操作就是对所有成员进行比较,把最大的留下来,其余舍弃掉,所以,不管顺序如何变化,最大值是不会改变的。
对称函数是什么意思?例如加法就是对称函数,1+2+3+4=10,换个顺序,2+4+3+1=10,不管顺序如何变化,对结果不会产生影响。
2
针对刚体变化——对齐网络T-net。T-net对性能的提升作用也还是有的,两个T-net加上regularization 贡献了2.1个百分点,但奇怪的是在PointNet++的代码中,已经看不到T-net了(这一点论文没有提及,github上也有人提问,但是作者没有回复)。
3
特征提取阶段采用MLP(多层感知机,说白了就是全连接层),这种结构用到的运算只有乘法和加法,都是对称函数,所以不会受到排序影响。
实验效果
1、分类
数据集是ModelNet40,包含40类物体的CAD,通过采样获得点云。这里作者没有把MVCNN列出来,因为精度没有比过它,不过后来的改进版已经超过了。
2、物体分割:
3、参数量与MVCNN的对比:明显占优。
代码部分将在下一篇文章讲解。
后续还会陆续讲到其他网络,并与PointNet做对比。