拨云见日——SPLATNet文章理解

文章标题:SPLATNet: Sparse Lattice Networks for Point Cloud Processing

这是CVPR2018的一篇文章,作者是Hang Su ,他同时也是2015年MVCNN的作者,自然也是很厉害了。这个作者给我的感觉是基础非常扎实,比如之前的MVCNN,最先把多视角机器视觉运用到三维物体感知中来;包括这次用到的bilateral convolution layers (BCLs) 和permutohedra  lattice 等文章中最重要的两个概念,都并非原创,而是来源于2015和2016年的会议发布出来的成果,而且网上关于这两个东西的博客不多,看来还是有点冷门的,这就提示我们,想要做出创新,就要先把已有研究成果吃透,特别要能够看到那些被别人忽视的文章。

读这篇文章很容易掉进陷阱,作者给挖了两个坑,会直接影响理解论文的效果,我们在下面的讲解中都会重点提到。

拿到论文先看摘要,它这里啰嗦了半边,其实就是一句话,本文用bilateral convolution layers (BCLs) 堆叠起来构造了一种新的网络结构。

相关研究这里就不说了。

直接看第三章,bilateral convolution layers。这个词来自于文献[22]和[25]:

[22]Learning Sparse High Dimensional Filters:Image Filtering, Dense CRFs and Bilateral Neural Networks . CVPR2016

[25]Permutohedral Lattice CNNs.  ICLR 2015 

但是笔者去看了这两篇文章,感觉这里其实叫Permutohedral Lattice CNNs更贴切。文献[22]写得乱七八糟得,提出了Bilateral Neural Networks这么个词,其实根本就只是把文献[25]里的Permutohedral Lattice CNNs换了换名字、换了个场合。

接着看文章,为了讲解方便,我们就继续用文中BCL这个名词。

第三章比较重要,首先讲了BCL的输入。这里先区分两个词,input features 和lattice features ,前者是实打实的输入特征,其维度为df,既可以是低阶特征,也可以是神经网络提取的高阶特征,维度从几到几百均可;而后者是用来构造Permutohedral Lattice的特征,只用低阶特征,如位置、颜色、法线,维度一般为个位数。例如第四章文中给的SPLATNet3D 的实现结构,lattice features是位置,维度就只有3。

接着,就是文章的核心了,介绍了BCL的三个基本操作:Splat、Convolve、Slice,这里文章介绍的不细致,而且容易误导人,建议有时间的同学去看看文献[25]以及文献[1]“Fast High-Dimensional Filtering Using the Permutohedral Lattice”会有个更深入的理解。

Splat。

这个操作就是把欧式空间变换成另外一个空间,怎么变换?通过乘一个变换矩阵。变换矩阵一般是这样

具体为什么定义成这样就是数学问题了,在此就不赘述了。这里d表示Permutohedral Lattice空间的维度。

为了便于理解,给一个例子:欧式空间定义三个点,分别是(0,0,0)、(1,0,0)、(1,1,0)。令Permutohedral Lattice维度取d=2,则

用B2乘坐标,得到经过变换后新的三点坐标(0,0,0)、(2,-1,-1)、(1,1,-2)。这一过程如下图所示:

右图中,带颜色的数字0,1,2都是余数(即文献[1]中的remainder)。这个余数是怎么算的呢?举例说明,如(2,-1,-1)这个点,2和-1两个数对3进行取模运算,得到的余数都是2,所以这点就标成2;再比如(1,1,-2)对3取模,余数都是1,所以这点就标成1。在整个Permutohedral Lattice空间都遵循这种规则进行标注,后面做卷积运算时会根据这些余数进行相应操作。

如上图所示的那样,Permutohedral Lattice空间就是有多个单形不留缝隙地拼接而成,它不像欧式空间那样坐标轴互相垂直,而是成一定角度,分布在平面上。它具有以下特点:

  1. 平面中任意一点所在的单形顶点都能以的时间内定义;
  2. 单形顶点周围所有的顶点也能以的时间内定义;
  3. ...还有一些更专业,就不再列了。

关于这两点我的理解仅限于,这种空间对于稀疏无序的数据,能够更加高效地进行组织,便于查找和各种运算的进行。

把欧式空间里的点变换到Permutohedral Lattice空间后,还要进行一步“炸裂”操作(这个名字是我杜撰的),如下图:

也就是把单形里的某个点的信息炸开到周围三个顶点上,当然了,这个点带的信息也就是它的特征,不管64维也好128维也好,都要炸开到周围三个顶点。这个所谓的“炸开”也是有一定依据的,会根据距离分配不同的权值,但是基本上炸开之后的特征维度是不变的。

至此,Splat操作完成。所以,现在大家应该能够体会到Splat的作用了,就是把原本在欧式空间中又稀疏、又不均匀的点按照一种新的形式组织了一下,方便进行后续运算。下面就是Convolve。

Convolve说起来就简单了,Splat操作之后,点的特征已经按照一定原则“分配”到各个单形的顶点上了,所以,位置也就很比较规整了,按照哈希表做索引,进行卷积操作就行了。

Slice。这是Splat的逆过程,把卷积运算后得到的Lattice顶点上的信息,“汇聚”到原来点的位置上。当然,如果“汇聚”到新的位置上也可以,新的点数也可以比原来的点数少,也可以分布在不同维度的欧式空间上。这就和卷积操作变换图片尺寸的效果有点类似。

至此,就把Permutohedral Lattice CNN模块讲完了,这就是BCL的核心内容了。

第四章就简单了,无非就是介绍网络的超参是如何设定的、网络结构如何设计的,都是比较容易理解了。

第五章介绍了2D-3D融合的实现版本,无非就是多加了几个concate的操作,网络更加复杂一些,根据语义分割的任务特点加了多层次信息融合等等,也都不难理解。

第六章是实验,证明了本文所提网络的有效性。

第七章总结。

附录部分——附录部分可以看看网络的设计参数,例如BCL的输出特征维度64-128-128-64-64-7等等,可以加深对网络的认识。我最开始搞不清楚Splat投影是做什么的,受到文中一句话的误导:

以为要把高维(如64,128)的特征映射到低维(如3,6),非常别扭。

直到看到附录部分关于BCL输出特征维度的介绍,维度还是很高的,就才恍然大悟,才知道Splat中的“炸开”是带着厚厚的特征一块“炸开”的。

小结

总体来说,这篇文章读的还是挺费劲的,一方面是需要看很多额外资料,另一方面作者的论述确实容易把人带偏。论文的代码是用Caffe写得,笔者还没运行过代码。后期有时间的话有可能会写文章介绍代码,看情况吧。

关于这篇文章的思路,有的同学可能会认为比起PointNet、pointCNN来说好像复杂了很多,不知道意义何在。

但我觉得这篇文章可以拿来和基于树的点云处理网络进行对比,比如KdNetwork、OCNN、octNet,这类基于树的网络也是要对点云进行高效地组织,然后再套用成熟的神经网络进行处理,但是需要额外步骤对数据进行处理,所以在端到端处理方面存在劣势。而SPLATNet与之不同,它利用Permutohedral Lattice CNN层,把对点云的组织这一步骤放到了每一次卷积操作中,实现了端到端的处理。从这个角度来说,SPLATNet还是有一定意义的。
 

猜你喜欢

转载自blog.csdn.net/qq_33278989/article/details/80786726