如何在点云上执行卷积?点云中点的无序性,以及每个点的位置的随机性,使得在图片上表现出色的卷积操作,不好直接运用到点云上。这篇文章通过学习一个“连续”的卷积核,实现了对点云执行卷积操作。文章、代码地址:
PointConv: Deep Convolutional Networks on 3D Point Cloudsopenaccess.thecvf.com https://github.com/DylanWusee/pointconvgithub.com1. 卷积概念回顾、论文核心思想
在《信号与系统》里面,卷积的含义是:系统在t时刻的输出,不仅与系统在t时刻的输入有关,还与它在t时刻之前的输入有关,并且不同时刻的输入,有不同的权重。所以,卷积本质上做的事情是:不同时刻的输入的加权求和。权重是一个关于时间t的连续函数。
把以上概念映射到2D图片卷积上:对于2D图片来说,某个位置的输出,不仅与该位置的输入有关,还与此位置周边位置的输入有关,不同位置的输入,具有不同的权重。卷积所做的事情,同样是一个加权求和。由于位置坐标是固定的有限个值,所以,权重是一个关于位置的离散函数。现有的convolution操作实现了这个操作,只是并没有显式的将权重作为一个关于位置的函数,而是直接给每个位置设置一个权重系数。
把以上概念映射到3D点云卷积上:对于3D点云来说,某个位置的输出,不仅与该位置的输入有关,还与此位置点的K个最近的邻居点有关。位置具有随机性,取值空间在3D空间中是连续的。按照卷积的原理,不同位置的权重不同,所以,权重应该是一个关于3D坐标的连续函数。如果能得到这个“连续”的权重函数,就可以解决3D点云上的卷积问题。这大概就是这篇论文的核心思想。
2. 具体实现
2.1 权重函数
论文主要通过一个MLP网络来学习出连续的权重函数。以上图中Compute Weight标记的模块,即为学习出权重函数的MLP。主要由两个共享的
2.2 密度模块
该模块主要目的是处理点云采样不均的情况。由于卷积本质上是一个加权求和的操纵,如果某些位置的采样点比较密集,而某些位置的采样点比较稀疏,直观感受来看,最终的计算结果主要受到采样密集的位置的点的影响。为了处理这个问题,论文先离线计算出每个点的Density,然后使用一个MLP网络学习出inverse density,来对输入
3. 优化
从内存消耗和运行效率的角度出来,论文对以上网络结构进行了优化,最终结果为:
4. 总结
之前的一些文章通过人工构建一些规则的形状(3D grid、Ball、Shell),先将连续的3D空间离散化,然后模拟2D图片卷积的逻辑来处理3D点云。相对于位置,权重是离散的。
这篇论文从卷积的定义出发,使用MLP学习出不同位置的不同权重,实现了权重的连续性。