首先先得理解点云是什么
点云的概念:点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。
点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等,不一一列举。
一般的3D点云都是使用深度传感器扫描得到的,可以简单理解为相比2维点,点云是3D的采样
真实世界的点云数据通常是通过使用激光扫描仪、立体相机或低成本的RGB-D扫描仪捕获的。然而,由于遮挡、光反射、表面材料的透明度以及传感器分辨率和视角的限制,它将导致几何和语义信息的丢失,从而导致不完整的点云。
所以,这里的方式就是输入不完整的点云,计算得到完整的点云,但这里计算有一点特殊,输出的仅仅是点云却是的部分,而不是整个对象,这样不仅能保存原始点云的几何特征(即不做改变),其次能更注重确实部分的局部细节
整体结构分为三个部分,Multi-Resolution Encoder (MRE)多分辨率编码部分, Point Pyramid Decoder (PPD)点云金字塔解码部分,Discriminator Network(DN)鉴别器部分
首先先是输入处理部分,这里首先先是提取出输入点云中的特征点,特征点是能映射整个点云形状的代表点。这里采用的方法是IFPS
简单来说就是很简单,取一个随机点,然后取与这个点距离最远的点,以此进行迭代
这就是IFPS的结果
然后是第二部分MRE部分
这里提出的一个特征提取网络名为CMLP
常见的MLP(这里称为PointNet-MLP)这里考虑到它没有很好的结合低层和中层特征,因为如图这里是一步步顺序计算的,然后将最后一层(深层特征)进行max pool
CMPL的区别就是将后面四层均进行max pool操作,得到各层的结果(理解为都获得了浅层、中层、深层特征)然后将所有的结果concatenate起来
然后解释下这个部分的结构,先是将输入通过上面所说的IFPS进行特征点提取,将得到的结果和原来的点云三个点云分别经过CMLP,得到各自的Latent Vector Fi{i=1,2,3},将三个Fi再度concatenate起来后,通过一个MLP得到最后的feature map V
至此,经过特征提取之后的各模块点云经过CMLP和MLP的结合后得到了原input的final feature map
然后是下一部分,PPD部分
输入自然是前面得到的final map V,输出是想得到三种点云,首先经过三个linear即全连接层得到三种不同维度下的结果FCi{i=1,2,3},就是为了获取不同分辨率下的预测点云,没错,这熟悉的感觉,正是FPN!
FPN
然后展示具体结构
这里将结果分为三个,首先是最上层即FC3最深层的点云结果,这里预测出来的结果是Yprimary理解为整体中心点结果。
然后是第二次中心点的预测结果,即Ysecondary这里用到了Yprimary的结果,以前面结果的每个点作为中心,结合FC2提取出来的特征来进行每个点的相关secondary点的生成
最后是Ydetail,生成的方式跟上面secondary点的生成方法完全相同,这里最后生成的Ydetail就是整个模型最后的结果(需要拟合GT的采样点的结果)
最后是LOSS,整个LOSS由两个部分组成,multi-stage completion loss(MSC)多阶段完成损失和adversarial loss(A loss)对抗损失
首先是MSC,这个LOSS是为了使预测出来的三个阶段的点云与GT之间的差异最小
首先定义两个点云之间距离的计算方法,即average nearest squared distance平均最近平方距离,上式也很好理解
由于PPD解析出了三个分辨率的点云,所以这里也采用了三个分辨率下的距离之和作为整个LOSS
这里的Ydetail等与上面PPD得到的解释相同,Ygt即完整的点云GT, Ygt’则是GT经过一次IFPS得到的。后面的同理。
然后使第二个LOSS,A loss,这个LOSS是为了使预测的点云看起来更真实,就像生成人脸等经常干的discrimination
这里的F()定义的就是模型整体过程,是一个由输入x(原不完整的点云)到输出y(点云缺失部分)的映射。然后是D(),就是discrimination部分,鉴别F函数得到的点云损失部分和GT的点云损失部分的真假
最后将两个LOSS joint起来
1.为了了解点云才看的文章,整体来说的话似乎没什么特殊的地方,相比于以往的生成完整的点云,这里则是生成缺失的点云
2.FPN太香,很多应用都可以采用类似的多维度结构(毕竟低层深层特征结合啥的太好水了)