《Occupancy Networks: Learning 3D Reconstruction in Function Space》是一篇来自CVPR2019的文章,由于最近对NeRF-SLAM这个方向比较感兴趣,所以开始阅读一些相关的基础文章。
Introduction
现有的3D表示方法可以分为:Voxel、Point Cloud、Mesh
体素表示:图像→3D的一般化表示,但是内存占用随像素呈立方增长
点云表示:缺少底层网格的连接结构,从模型中提取3D几何需要额外的过程
网格表示:基于模板变形,不可以任意拓扑
作者提出了一种基于直接学习连续三维占用函数的三维重建方法。和其他方法不同的是,作者用一个神经网络预测了完全占用函数(complete occupancy function),它可以在任意分辨率下评估(减少了内存的占用)。这篇文章的主要贡献可以分为以下三点:
1. 介绍了一种基于学习连续三维映射的三维几何表示方法;
2. 使用此表示法重建各种输入类型的3D几何图形;
3. 实验证明此表示方法能够生成高质量的网格,并且达到先进技术水平。
Related Work
体素表示:由于其简单性,体素是区分性和生成性3D任务最常用的表示。
早期的工作已经考虑了使用在体素网格上操作的3D卷积神经网络从单个图像重建3D几何形状的问题,然而,由于存储器要求,这些方法限于相对小的体素网格
[1] C. B. Choy, D. Xu, J. Gwak, K. Chen, and S. Savarese. 3D-R2N2: A unified approach for single and multi-view 3D object reconstruction. In Proc. of the ECCV, 2016.
[2] S. Tulsiani, T. Zhou, A. A. Efros, and J. Malik. Multi-view supervision for single-view reconstruction via differentiable ray consistency. In Proc. IEEE Conf. on CVPR, 2017.
[3] Z. Wu, S. Song, A. Khosla, F. Yu, L. Zhang, X. Tang, and J. Xiao. 3D ShapeNets: A deep representation for volumetric shapes. In Proc. IEEE Conf. on CVPR, 2015.
有些工作将3D卷积神经网络应用到高达的分辨率,这只能在浅架构和小批量的情况下实现,这导致训练速度缓慢。
[1] J. Wu, Y. Wang, T. Xue, X. Sun, B. Freeman, and J. Tenenbaum. MarrNet: 3D shape reconstruction via 2.5D sketches. In Advances in NIPS, 2017.
[2] J. Wu, C. Zhang, X. Zhang, Z. Zhang, W. T. Freeman, and J. B. Tenenbaum. Learning shape priors for single-view 3D completion and reconstruction. In Proc. of the ECCV, 2018.
[3] X. Zhang, Z. Zhang, C. Zhang, J. B. Tenenbaum, W. T. Freeman, and J. Wu. Learning to reconstruct shapes from unseen classes. In Advances in NIPS, 2018.
输入多个几何视图进行三维重建
[1] M. Ji, J. Gall, H. Zheng, Y. Liu, and L. Fang. SurfaceNet: an end-to-end 3D neural network for multiview stereopsis. In Proc. of the IEEE ICCV, 2017.
[2] A. Kar, C. Hane, and J. Malik. Learning a multi-view stereomachine. In Advances in NIPS, 2017.
[3] D. Paschalidou, A. O. Ulusoy, C. Schmitt, L. van Gool, and A. Geiger. Raynet: Learning volumetric 3D reconstruction with ray potentials. In Proc. IEEE Conf. on CVPR, 2018.
基于VAE
[1] A. Brock, T. Lim, J. M. Ritchie, and N. Weston. Generative and discriminative voxel modeling with convolutional neural networks. arXiv.org, 1608.04236, 2016.
[2] D. J. Rezende, S. M. A. Eslami, S. Mohamed, P. Battaglia,M. Jaderberg, and N. Heess. Unsupervised learning of 3D structure from images. In Advances in NIPS, 2016.
基于GAN
[1] J. Wu, C. Zhang, T. Xue, B. Freeman, and J. Tenenbaum. Learning a probabilistic latent space of object shapes via 3D generative-adversarial modeling. In Advances in NIPS, 2016.
由于体素表示的高存储器要求,最近的工作已经提出以多分辨率方式重建3D对象,但实现复杂。
[1] C. Hane, S. Tulsiani, and J. Malik. Hierarchical surface prediction for 3D object reconstruction. In Proc. of the International Conf. on 3DV, 2017.
[2] M. Tatarchenko, A. Dosovitskiy, and T. Brox. Octree generating networks: Efficient convolutional architectures for high-resolution 3D outputs. In Proc. of the IEEE ICCV, 2017.
为达到子体素精度,一些方法来预测截断的带符号的距离场(TSDF),在一个三维网格中的每个点存储着到最近的三维表面上点的截断带符号距离,但由于要在三维空间中推断距离函数,不再是单纯将体素分为占有与否而更难以学习,且仍受分辨率限制。
[1] A. Dai, C. R. Qi, and M. Nießner. Shape completion using 3D-encoder-predictor CNNs and shape synthesis. In Proc.IEEE Conf. on CVPR, 2017.
[2] L. Ladicky, O. Saurer, S. Jeong, F. Maninchedda, and M. Pollefeys. From point clouds to mesh using regression. In Proc. of the IEEE ICCV, 2017.
[3] G. Riegler, A. O. Ulusoy, H. Bischof, and A. Geiger. Oct-NetFusion: Learning depth fusion from data. In Proc. of the International Conf. on 3DV, 2017.
点云表示:广泛用于机器人技术和计算机图形学
首创了点云作为判别深度学习任务的表示。通过利用一个全连接神经网络独立地应用于每个点再接着一个全局池化,来实现排列不变性。
[1] C. R. Qi, H. Su, K. Mo, and L. J. Guibas. PointNet: Deep learning on point sets for 3D classification and segmentation. In Proc. IEEE Conf. on CVPR, 2017.
[2] C. R. Qi, L. Yi, H. Su, and L. J. Guibas. PointNet++: Deep hierarchical feature learning on point sets in a metric space. In Advances in NIPS, 2017.
点云作为三维重建的输出表示,但需要额外的复杂后处理步骤来生成最终三维网格
[1] H. Fan, H. Su, and L. J. Guibas. A point set generation network for 3D object reconstruction from a single image. In Proc. IEEE Conf. on CVPR, 2017.
网格表示
网格作为三维重建的输出表示,但容易生成自相交网格
①T. Groueix, M. Fisher, V. G. Kim, B. Russell, and M. Aubry. AtlasNet: A papier-mache approach to learning 3d surface generation. In Proc. IEEE Conf. on CVPR, 2018.
②A. Kanazawa, M. J. Black, D. W. Jacobs, and J. Malik. End-to-end recovery of human shape and pose. In Proc. IEEE Conf. on CVPR, 2018.
③C. Kong, C.-H. Lin, and S. Lucey. Using locally corresponding CAD models for dense 3D reconstructions from a single image. In Proc. IEEE Conf. on CVPR, 2017.
④N. Wang, Y. Zhang, Z. Li, Y. Fu, W. Liu, and Y.-G. Jiang. Pixel2Mesh: Generating 3D mesh models from single RGB images. In Proc. of the ECCV, 2018.
与前面提到的方法相比,Occupancy Network的方法得到了高分辨率的闭合曲面,没有自交,并且不需要来自相同对象类的模板网格作为输入。Occupancy Network的方法使用深度学习来获得更有表现力的表示,可以自然地集成到端到端学习pipeline中。
Method
Occupancy Network
理想情况下,我们不仅要在固定的离散的3D位置(就像在体素表示中)考虑占用率,而且要在每一个可能的3D点考虑占用率。称以下函数为3D物体的占用函数:
这个函数的关键是,可以用一个神经网络来近似这个3D函数,该神经网络分配给每个位置一个在0到1之间的占用概率。这个网络相当于一个用于二分类的神经网络,将物体表面隐式表示为一个非线性分类器的决策边界。
根据对物体的观察(如图像、点云等),当使用这样的网络对物体进行三维重建时,必须以输入作为条件。作者使用了下面的简单的功能对等:一个函数,它接受一个观察作为输入,输出一个从点
到
的函数,这可以通过一个函数等价描述:一对(𝑝, 𝑥)作为输入和输出一个实数。后一种表示可以用一个神经网络参数化,该神经网络以一对(𝑝, 𝑥)作为输入,输出一个表示占用概率的实数:
占据网络示意图:
Training
为了学习神经网络的参数,考虑在对象的三维边界体中随机采样点,对于第𝑖个样本,采样K个点,然后评估这些位置的小批量损失如下所示:
其中xi是批次B的第𝑖个观测值,𝑜𝑖𝑗是点云的真实位置,L是交叉熵损失。
该三维表示也可被用来学习概率潜在变量模型:
编码器网络的输入:位置
和占据率
;输出:在
高斯分布
的均值
和标准差
;优化生成模型的负对数似然的下界
,其中KL代表KL散度(相对熵),
是在隐藏变量
的先验分布(通常为高斯分布),
根据
采样。
Inference
为了提取一个新的观测值对应的等值面,引入Multiresolution IsoSurface Extraction(MISE)算法,如下图所示。
首先在给定的分辨率上标记所有已经被评估为被占据(红色圆圈)或未被占据(青色方块)的点。
然后确定所有的体素已经占领和未占领的角落,并标记(淡红色),细分为4个亚体素。
接下来,评估所有由细分引入的新网格点(空圆)。重复前两个步骤,直到达到所需的输出分辨率。
最后使用Marching Cubes算法提取网格,利用一阶和二阶梯度信息对输出网格进行简化和细化。
如果初始分辨率的占用网格包含网格内外各连通部分的点,则算法收敛于正确的网格。
Marching Cubes算法可以看一下MarchingCubes算法讲解
通过marching cubes算法提取的初始网格可以进一步细化。在第一步中,使用Fast-Quadric-Mesh-Simplification算法来简化网格。最后,使用一阶和二阶(即梯度)的信息。为了达到这个目标,作者从输出网格的每个面抽取随机点pk进行采样,并将损失最小化:
Implementation Details
根据输入的类型使用不同的编码器架构。对于单视图3D重建,使用ResNet18架构。对于点云,使用PointNet编码器。对于体素化输入,使用3D卷积神经网络。对于无条件网格生成,使用PointNet作为编码器网络。
Experiments