参考文献:
首先进行评测指标的学习,数据集有semantic3d,S3DIS数据集
s3dis数据集 室内数据集 只能脚本运行 13分类
semantic3d数据集 室外场景数据集 官网可测评 点数巨大 Semantic3D
semanticktti数据集 数据集较大 28分类
pointcnn
pointcnn提出利用局部结构学习的X转换算子(矩阵),将无序点云通过算子之后,转化为有序点云,解决点云的无序性问题。
点云的输入顺序不同,经过普通卷积之后,他的输出也可能不同。
x算子 中心点-邻域点 MLP 得来的 K*K矩阵 (相对位置 随着点输入顺序变化变化)
F*= 中心点减去邻域点(相对位置)mlp学习 然后与中心点特征拼接 在经过mlp学习之后,得到特征。
对特征加权和置换 Fx=x*F*
对特征利用K矩阵进行普通卷积得到最终的特征Fp。
这样既进行了特征聚合,降低了size,每个点包含的信息变多,而且由于X算子的引入,使得点云无序性得到加强。
S3DIS数据集 上测试 MIOU 65.39%
并且文章进行了X算子的消融实验,确实有用。
多次使用X-conv,增加每个点的感受野。
训练中混淆点的输入顺序。
补充说明:
在组会上讲解了这篇文章,但师兄说我理解略有偏颇,应该看看代码。
代码具体没看懂,我目前的理解还是 为了解决点云的无序性问题,作者根据局部特征设计加权矩阵,潜在意义上实现点云的排序(并不是真正的完全消除顺序带来的影响,而是考虑了点云的局部特征),而且在训练的时候,需要对点云打乱顺序进行学习,否则,在输入点云时,考虑局部特征进行点云的训练时,点云的顺序也会影响训练的模型,以至于在test环节出现错误。
新的参考:PointCNN: Convolution On X -Transformed Points 论文和代码详解 - 知乎 (zhihu.com)
x新的理解:X-conv仅仅利用三维坐标进行一系列MLP 卷积等得到K变换矩阵,使得在特定邻近点序列下变的有序,变成一个类似图像的有序对,然后进行普通卷积K,也可以结合局部特征。
每个N*3的点进来之后,经过变化变成融合局部特征的N*32的矩阵;(结合局部信息,经过X的相乘之后实现了数据的规则化。)
经过变化之后,三和四所得的N*32矩阵应该是一致的(一开始的N*3矩阵因为顺序不同应该是不一致的)
再利用K卷积 (类似普通的图像CNN卷积) 将N个点局部结合,提取特征。
K卷积为深度可分离卷积
如有不对,请多多指正。