*本文是文章的第一部分,请大家持续关注原创作者文章~
概述
深度隐式表达 (Deep Implicit Representation, DIR) 在 2019 年同期发表了一系列代表性的工作。
本文主要介绍 Deepsdf [4] 以及 Occupancy Networks [2] (OccNet) 两篇文章,之后会介绍一些其他的工作,本系列仅涉及部分代表性的 DIR 工作,读者感兴趣的话可以自行查找其他相关的工作。
值得注意的是,这里 DIR 的说法是比较严格的,Openreview 上关于GRF[5] (当然 GRF 也是很好的工作) 的评论中提到:
也就是说,implicit function 的说法是不推荐的。那么什么是 DIR 呢?用下面这张图可以概括:
输入一个点 p,输出 p 的属性,如果属性是该点是否被占据,那么这就是Occupancy Networks,如果属性是 SDF 值,那么这就是 DeepSDF,到这里其实已经介绍完了 DIR 的相关概念。如果读者是更关注 NeRF 的内容,剩下部分可以选择跳过。
DeepSDF
DeepSDF 的作者之一是 Newcombe,也是 KinectFusion 的作者之一, 现在在 Facebook Reality Labs,对重建这一套是再熟悉不过了。
在表示方面,传统方法都会使用 Mesh, 点云,体素,面片等,其实这些表示方法都各有各的优缺点,很多文章都踩过了我们就不踩了,那么使用 DIR 的表示方法有什么好处呢?
首先它是连续的,神经网络具有很强的插值能力。其次使用深度学习的方法就一定会想到要具有一定的泛化性。
如果你对传统重建方法有所了解的话,一定会发现,传统重建会有许多空洞,那么能不能使用 DIR 方法补全一下缺失的几何。
当然还有 compact 的优点,少量参数的内存开销即可,还有很多其他优点不一一赘述。下面我们进入主题。
首先距离符号函数 (SDF) 是一个连续函数:
SDF (x) = s : x ∈ R3, s ∈ R, (1)
这里 x 表示采样点的坐标,|s| 表示距离表面的最近距离,s 的符号为正表示在物体外部,符号为负表示在物体内部,上面这张图是 SDF 的示意图, 物体的表面被隐式的表达为 SDF (.) = 0 的等值面。
DeepSDF 使用 MLP 来拟合这个连续函数:
fθ(x) ≈ SDF (x). (2)
这样一个函数是没有什么意义的,对每个物体都要训练测试训练测试...... 因此 DeepSDF 引入了 Auto-Decoder 来增加泛化性。
其实这个概念并不陌生,但是按照论文的说法在 3D learning 方面是首次提出的。
用白话讲就是为每个形状分配一个 latent code z,然后与采样点坐标一同输入到网络中,把这个 code 与网络的参数一同进行优化即可:
fθ(x, z) = sˆ, (3)
论文里比较 sao 气的给了概率证明,对于理解 DIR 来说意义并不大,我们不多涉及。
接下来我们完整的回顾一下 DeepSDF:
1. 数据准备。对与每个 3D 模型取一些列的采样点 (x, s),采样方式是个比较繁琐的过程:
假设是watertight 的mesh 模型。先将模型 normalize 到一个单位球,接着在表面采 250000 个点,并保留其法向量。
然后对250000 点加扰动,每个点扰动得到 2 个点,一共会有 500000 个扰动空间点,对这些空间点计算 SDF 值,计算方式就是从 250000 个表面点中找最近的点,然后计算符号与距离。
2. 训练:将大批量的采样点与随机初始化的 latent code z 一同输入到网络,通过 gt SDF 值做监督,对网络参数以及 z 一同做优化。
3. 测试:同样需要采样点,但是此时的采样点可以是稀疏的,甚至可以仅仅根据一张深度图即可完成推理。但是需要优化 latent code z,网络参数保持不变。
4. 可视化:使用 Marching Cubes 或者 raycasting 算法即可。
结果我们不过多展示了,大家可以参考论文。DeepSDF 的效果在当时是十分惊艳的,当然也存在一些问题。
比如,姿态问题没有考虑,训练测试的模型都是处于 canonical pose 的;部分区域过于平滑;
仅适用于单个物体,不能拓展到大场景等。感兴趣的读者可以自行查找一下相关的 task,DIR 的研究是多种多样的,在 3D 视觉领域能挖掘的东西还有很多很多。
Occupancy Networks
这张图我很喜欢,它很直观的表达出 DIR 在表示方面的优势,相信 reviewer 一看到也是类似的反应。
DIR 最大的优势就是紧致连续,仅使用少量的内存开销即可将 3D 信息嵌入到神经网络的参数当中。
使用 SDF 值作为点的属性表达是一种方式,当然也可以使用该点是否被占据,OccNet 没有使用额外的类似 DeepSDF 的 latent code,而是选择将观测 (如图片、点云、体素等) 作为输入然后提取 code,可以概括的表达为以下形式:
fθ(p, x) = oˆ, (4)
这里 oˆ ∈ [0, 1] 表示点 p 被占据的概率,x 表示观测输入。表面所在的位置为 oˆ = τ 的等值面,这里 τ 是 OccNet 中唯一的超参数,文中给出的建议值为 τ = 0.2。
相比 SDF 值,occupancy 值的 gt 更容易获取一些,在提取几何部分 OccNet 也做了特殊的处理,提出了 Multiresolution IsoSurface Extraction (MISE),有效利用了 fθ 的梯度信息做约束,使得提取到的 mesh 既不会太复杂,又相对准确,本文对 MISE 不做深入讲解。
OccNet 与 DeepSDF、IM-NET[1]、Deep Level Set[3] 是同期的工作, 这四篇工作都是在 2019 年发表的,也从此引发了以 DIR 为表示方法的热潮。
下面给出两张 OccNet 的网络结构图帮助读者理解:
图 1 OccNet 网络架构
(a)Single Image 3D Reconstruction.
(b)Point Cloud Completion.
(c)Voxel Super-Resolution.
图 2 Encoder
结语
对于 loss function 是个开放性的问题,本文两篇文章都没涉及。核心本质的 DIR 思想相信大家已经初步建立概念了。
接下来的更新我们会提到一些典型的 DIR 工作,由于作者本身也要做一些 research 工作,希望在深度和广度方面尽可能地拓展一些,如有不正确的地方欢迎大家指正。
参考文献
[1] Z. Chen and H. Zhang. Learning implicit fields for generative shapemodeling. In Proceedings of the IEEE/CVF Conference on ComputerVision and Pattern Recognition, pages 5939–5948, 2019.
[2] L. Mescheder, M. Oechsle, M. Niemeyer, S. Nowozin, and A. Geiger.Occupancy networks: Learning 3d reconstruction in function space. InProceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pages 4460–4470, 2019.
[3] M. Michalkiewicz, J. K. Pontes, D. Jack, M. Baktashmotlagh, andA. Eriksson. Deep level sets: Implicit surface representations for 3dshape inference. arXiv preprint arXiv:1901.06802, 2019.
[4] J. J. Park, P. Florence, J. Straub, R. Newcombe, and S. Lovegrove.Deepsdf: Learning continuous signed distance functions for shape representation. In Proceedings of the IEEE/CVF Conference on ComputerVision and Pattern Recognition, pages 165–174, 2019.
[5] A. Trevithick and B. Yang. Grf: Learning a general radiance field for 3dscene representation and rendering. arXiv preprint arXiv:2010.04595,2020.