3D 稀疏模式重建

在此页面中,我们将介绍一个简单的演示示例,该示例训练一个 3D 卷积神经网络,该网络从 one-hot 向量重建 3D 稀疏模式。 这类似于 Octree Generating Networks, ICCV’17。 输入的 one-hot 向量指示 ModelNet40 数据集中的 3D 计算机辅助设计 (CAD) 椅子索引。

我们使用 MinkowskiEngine.MinkowskiConvolutionTranspose 以及 MinkowskiEngine.MinkowskiPruning 逐步地将体素上采样 2 倍,然后删除一些上采样的体素以生成目标形状。 一般网络架构看起来类似于下图,但细节可能有所不同。

../_images/generative_3d_net.png

在我们继续之前,请先阅读 训练和数据加载教程

构建稀疏模式重建网络

要从向量创建在 3D 网格世界中定义的稀疏张量,我们需要从 \(1 \times 1 \times 1\) 分辨率体素中逐步上采样。 在这里,我们使用一个块,该块由 MinkowskiEngine.MinkowskiConvolutionTransposeMinkowskiEngine.MinkowskiConvolutionMinkowskiEngine.MinkowskiPruning 组成。

在前向传播期间,我们为 1) 主要特征和 2) 稀疏体素分类创建两条路径,以删除不必要的体素。

out = upsample_block(z)
out_cls = classification(out).F
out = pruning(out, out_cls > 0)

在输入稀疏张量达到目标分辨率之前,网络会重复一系列上采样和剪枝,以删除不必要的体素。 我们在下图中可视化结果。 请注意,最终的重建非常准确地捕获了目标几何。 我们还可视化了上采样和剪枝的分层重建过程。

../_images/generative_3d_results.gif

运行示例

要训练网络,请转到 Minkowski Engine 根目录,然后键入

python -m examples.reconstruction --train

要可视化网络预测,或尝试预训练模型,请键入

python -m examples.reconstruction
../_images/demo_reconstruction.png

该程序将可视化两个 3D 形状。 左边一个是目标 3D 形状,右边一个是重建的网络预测。

整个代码可以在 example/reconstruction.py 中找到。