PointNN:一种无参数化的高效点云特征提取方法

前言

本文需要一些三维点云相关基础,非常适合深蓝学院修过相关课程的同学阅读。

点云处理从最早期的手工设计特征,到之后渐渐有一些深度学习的尝试,经历了 multi-view或者3D卷积等等的混沌时期,知道 pointnet 的横空出世,开始蓬勃发展,于是有了后来的 pointnet++, DGCNN, SONet, KPConv, PointMLP 和 Point tranformer 等等,后期的工作没怎么跟了,比较巧合的是,前阵子听师兄讲,在使用point pillar的时候,pointnet的算力都没办法满足,pillar的特征还是手工设计的。随后看到了这篇区分度很高的工作, pointNN (CVPR 2023),原来真的可以做到 parameter free 还能保证高质量提特征。

正文

预备知识是要了解过 pointnet 和 pointnet++,如果了解了这两篇文章,那么下面三个操作应该不会陌生:

farthest point sampling (FPS):因为点云不规则,所以不能像图像卷积一样便捷的定义锚点,因此需要使用 FPS 对点云做层次化操作,每一次操作得到的结果就是一系列的“中心点”,其实就是锚点。FPS算法不具体讲解了,作用就是对点云进行采样,采到的点之间距离要尽可能的远,又要尽可能的包含整个点云。

knearest neighbors (k-NN), 参考卷积操作,比如一个3*3卷积是对中心点及周围的8个像素进行操作,层数多了之后,感受野也随之增加。点云的领域一般用K-NN或者radius neighbor 来定义,各自包含一个超参 K 和 radius 半径。具体怎么操作后面会具体说明。

pooling operations,pooling是 pointnet 中最重要的操作,主要解决的是点云无序性的问题,每个点的特征concat在一起之后,不论顺序如何,pooling之后的结果都一致。

接下来进入正题,如何提取点云特征

首先对于一个空间中的一个点需要对其做 embedding,这个在 literature 里已经有不少这方面的工作了,比如 nerf 的 positional encoding,fourier feature,transformer 的位置编码等等。PointNN 提了一种类似的编码方法,这个可能需要一定的尝试,具体为什么这么设计很难理解。总之在对原始坐标进行过位置编码之后,每个原始点的就有了一个高纬特征

,为了便于区分,我们用来表示非中心点特征。来表示中心店特征。

有了每个点的特征之后,就要对特征进一步进行聚合了。我们用单一算子来具体表述,对于一个中心点及其最近的 K 个点,首先把每个点的特征和中心点特征做一个及联:

,到目前为止编码的都是绝对信息,参考以往工作的经验,我们还需要一些相对信息。简单来讲,就是全局坐标系里,两个点的坐标就是全局信息,而两个点的距离就是相对信息,在局部特征提取的时候,中心点需要一个局部坐标系,将领域范围的点的特征进行聚合,于是便有了以下操作:

这里

就是相对坐标,具体操作的时候一定要注意要做 normalization. PosE 就是之前提到的位置编码。到目前为止,每个点的特征都与中心点进行了交互,但是还未完成聚合。

聚合操作其实就是 pooling 操作,max pooling 和 average pooling 都可以,只要保证 permutation-invariant 即可。pointnet 用 max pooing 因为这个效果好,pointNN 两个都用了说这样效果好,这里不多说明了。

这样的过程经过多次,就能层级提取点云特征了,最后得到的是一个 global 的点云特征。和大多数点云特征提取网络一致的是,可以适配多种任务,区别在于不需要参数就能有很好的结果,因为结构比较简洁灵活,也可以将上述的一些操作用 linear 算子来操作,引入极少量的参数即可达到 SOTA 效果。

关于 paper 提到的 Point-Memory Bank 以及 ensemble 等操作是比较好理解的内容了,这里就不多陈述了。

非参数化的优势在于不需要训练,在网络搭建好之后,只需要过一遍训练集,过一遍测试集即可,实验成本很低,个人觉得后续工作如果能有一些类似 pointnet 的证明和解释就更好了。

   ABOUT 

    关于我们 

深蓝学院是专注于人工智能的在线教育平台,已有数万名伙伴在深蓝学院平台学习,很多都来自于国内外知名院校,比如清华、北大等。

猜你喜欢

转载自blog.csdn.net/soaring_casia/article/details/130107454