3D点云重建原理及Pytorch实现

3D点云重建原理及Pytorch实现

Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruction

一种Pytorch实现方法:学习高效的点云生成方法用于稠密三维物体重建

一.论文概要

传统的三维对象生成建模方法是利用三维卷积运算的深度网络来训练3D预测,这与经典的二维方法是直接类似的。然而,这些方法在试图预测三维形状时计算上是浪费的,因为只有表面上的信息才是丰富的。本文提出了一种新的三维生成模型框架,以有效地生成密集点云形式的目标形状。使用二维卷积运算从多个角度预测三维结构,并将几何推理与二维投影优化相结合。引入伪渲染器(pseudo renderer)这一可微模块来近似真实的渲染操作,以合成新的深度图进行优化。对单图像三维物体重建任务的实验结果表明,在形状相似性和预测密度方面,优于最新的方法。

神经网络pipeline

二.贡献总结如下:             

•主张具有二维卷积运算的深网络能够生成密集的点云,从而在未加密的三维空间中塑造三维物体的表面。             

•引入一个伪渲染管道作为真实渲染的可微近似。进一步利用伪渲染深度图像进行二维投影优化,以学习生成密集的三维形状。             

•展示了的方法在单图像三维重建问题上的有效性,这显著优于最新方法。

三.主要原理

1.  Pseudo-rendering概念

前向绘制是计算机图形学中一个古老而成熟的概念。真实渲染通常是通过在每个像素位置使用Z缓冲区来保持相机的有效可见值(RGB或深度)来实现的。虽然这是可并行的,可以在gpu上有效地运行,但通常是不可微的,不能直接利用和纳入深度学习框架。在这里,给出了这种操作的可微逼近的一个解。

2. 实验

1)进行二维优化。             

从新的角度论证了第二阶段网络优化训练的必要性。比较了表3中联合2D投影优化步骤前后网络的性能。看到,虽然只在固定视点上进行优化会导致更多生成的点更接近真值曲面,但也会在形状精度损失中创建大量噪声点。图7展示了进行优化消除大部分噪声点的效果,说明了这种额外步骤的必要性。

变形过渡是平滑的,并且具有合理的插值形状,这表明结构生成可以从编码潜在向量的凸组合中生成有意义的三维预测。结构生成还能够根据潜在空间中的算法结果生成合理的新形状-从图6观察到桌子高度/形状以及椅子扶手/靠背的语义特征替换。结果表明,在潜在向量中编码的高层语义信息是可操作的,可以通过结构生成对生成的稠密点云进行解析。

2)生成表征分析             

通过观察潜在空间中操作的三维预测来分析学习到的生成表示。以前的研究已经证明,深度生成网络可以通过在潜在空间中执行线性操作来生成有意义的像素/体素预测(Radford、Metz和Chintala 2015;Dosovitskiy,To bias Spring enberg,and Brox2015;Wu etal.2016);这里,探索在未加密空间中对稠密点云进行这种操作的可能性。在图5中显示了由嵌入在潜在空间中的嵌入向量生成的密集形状。

3)主要实验数据

2中列出了量化结果,其中按类别显示数据。本文方法在两个指标上都达到了较低的总体误差

 

 四.   代码实施步骤

Original TF implementation: https://github.com/chenhsuanlin/3D-point-cloud-generation

训练/评估网络             

必要条件             

此代码是用Python3(Python3)开发的。需要Pythorch 0.4+。             

数据集             

(在TF的repo中提供)可以通过运行命令下载数据集(8.8GB)

wget https://cmu.box.com/shared/static/s4lkm5ej7sh4px72vesr17b1gxam4hgy.gz

此文件包括:              

训练/测试分割文件(从透视变换网络)             

输入RGB图像(从透视变换网络)             

用于训练的预渲染深度图像             

测试分离的地面真值点云(密度为100K点)

下载后,在主目录下运行

run tar -zxf s4lkm5ej7sh4px72vesr17b1gxam4hgy.gz

文件将被提取到data目录。(使用此数据集包,可引用相关论文。)

运行代码             

以下脚本提供了运行代码的示例。             

网络预训练:scripts/train-stg1.sh             

进行二维优化微调:scripts/train-stg2.sh             

在测试集上求值:scripts/evaluate.sh             

计算错误度量:scripts/evaluate_dist.sh             

检查点存储在models/${experiments}中,摘要存储在runs/${experiments}中,计算的点云存储在results{GROUP}中。执行python3 train-stg1.py--help可以找到可选参数列表。

绘制真实深度图像             

(在TF的repo中提供)提供了用于呈现深度图像的代码以供监督。             

先决条件             

此代码要求以下内容:             

  • Blender作为渲染引擎。此代码是使用Blender 2.78开发的。安装后,请确保该命令blender是可调用的(用于which blender检查安装)。
  • 用于将.exr转换为.mat文件的OpenEXR Python绑定 

数据集             

原始ShapeNet数据集可以在这里下载。此呈现代码是为使用ShapeNetCore v2开发的。(提供的深度图像是从ShapeNetCore v1渲染的。)             

运行代码             

在渲染中,运行/运行.sh03001627 8为固定和任意视点渲染深度图像,并将其转换为.mat文件。这将转换ShapeNet椅子类别(03001627)中具有8个固定视点的所有对象。呈现的文件将存储在输出目录中。

评估CAD模型密集点云的生成             

(在TF的repo中提供)还提供了代码来将CAD模型的顶点加密到指定的数字。此代码可以独立运行;只需要ShapeNet数据集。重复将顶点添加到三角形网格最长边的中心,然后重新对网格进行三角剖分的过程。这将创建(通常)均匀致密的CAD模型。

运行代码

在致密下,运行

run  ./run.sh 03001627

进行加密,加密的CAD模型将存储在output目录中。

 

posted @ 2020-06-10 17:57  吴建明wujianming  阅读(6014)  评论(1编辑  收藏  举报