网络的输入:点云
网络的输出:同一个物体每个点的类别(分割)/物体所属的类别(分类)
该网络本质还是端到端的
主要思想:因为点云本身是无序的,因此文章主要针对“无序性”这个思想进行发散。假设每个数据有三个特征值,即大小为1x3,现在有n个数据,所有数据在一个集合中,集合大小为nx3。我们对集合的每一列求max,得到的输出结果为1x3。由于max是对列进行操作,因此集合中数据的次序对输出结果并无影响(无序性的体现)。但是由于输出大小只有1x3,而输入数据大小为nx3,这意味着有很多信息被max函数给忽略了。为了解决这个问题,我们可以对nx3的输入进行升维,把其变成nx1024,这样重新做max后,输出的结果(global feature)便为1x1024。相比1x3的输出,保留了更多的信息。
其中h(x)就是完成1x3到1x1024的转换,这个过程在网络中不是一步到位的,而是在经过多个mlp后才逐渐变成1024的。在代码中这个过程用一维卷积实现。而g(t)就是上文中我们提到的max函数(最大池化)。
拿到1x1024的特征图后,可以继续利用全连接层进行降维,使大小变换到k(k为类别数),并且连接到softmax,来完成分类。
也可以对全局特征进行复制(nx1024),拼接到之前提取到的特征块(nx64)中[将局部信息与整体信息进行拼接],变成nx1088的特征块,并且进行降维,假设有对于每个点来说,有m可能的类别,就将特征块压缩成nxm,输出的是n各点,对于m个类别的可能性,目的是用来做分割。
其实我不太理解为什么要进行两次矩阵变化,查阅资料后好像是说第一次旋转是为了找一个更有利于分类或分割的角度(视角变换);第二次旋转是为了对提取出来的64维特征进行对齐(对齐后由于不同视角导致输入的不同所造成的影响就没有了)。(我觉得好像不是很重要的样子,因为在pointnet++中好像没这东西了)
定理1:证明了该网络可以拟合到任意的连续集合函数,只要是该函数是在hausdorff空间是连续的,那么就可以通过增加神经网络的深度以及宽度,来对这个函数进行逼近。
定理2:对于任何输入都存在关键集和最大集,使得对和之间的任何集合,其网络输出都一样。
因为特征变换矩阵维度高于初始输入空间,因此为了降低最优化难度,文章在softmax训练基础上加了一个正则项
A是迷你网络预测的特征对其矩阵,该正则项要求学习到的矩阵是正交矩阵,因为正交矩阵不会丢失输入信息。
PointNet只是将所有输入进行连接,最终获得一张包含全局信息特征图,但是即使点云本身具有无序性,但是在局部范围内,私认为点与点之间还是有一定联系的。像在空间中距离相邻较近的点,属于同个类别的概率一般来说都比相隔较远的点大。如果要在此网络上进行改进的话,感觉可以从特征提取方面入手,比如点与点之间的权重进行调整(自注意力机制),近点相互间权重较高,远点相互间权重较低。