点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

概述

深度隐式表达 (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.

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

深度隐式表达:为什么不用mesh,点云,体素等表示方法?相关推荐

  1. 深度隐式表达系列 (二)

    *本文是文章的第二部分,请大家持续关注原创作者文章~ 接着上一次的话题,我们再一次使用下面这张图来阐述深度隐式表达(Deep Implicit Representation, DIR) 的核心思想: ...

  2. 深度隐式表达系列 (一)

    *本文是文章的第一部分,请大家持续关注原创作者文章~ 概述 深度隐式表达 (Deep Implicit Representation, DIR) 在 2019 年同期发表了一系列代表性的工作. 本文主 ...

  3. 隐式欧拉解常微分方程c语言,利用欧拉方法求常微分方程近似数值解.doc

    利用欧拉方法求常微分方程近似数值解,欧拉微分方程,欧拉运动微分方程,欧拉平衡微分方程,欧拉型微分方程,微分方程的欧拉算法,微分方程的欧拉解法,欧拉型常微分方程,偏微分方程数值解,微分方程数值解法 利用 ...

  4. python selenium 中显示等待与隐式等待同时存在,发生冲突时,解决方法

    当我们在一个基类中写了一句隐式等待,如下面的 self.driver.implicitly_wait(30) 可以为整个程序都设置一个30秒的等待时间,但是当我们有段代码不想等待30秒这么久,那该怎么 ...

  5. CVPR2021 | 实现图像的“无限放大”,超详细局部隐式图像函数(LIIF)解读

    作者| flow 编辑| 3D视觉开发者社区 论文链接https://openaccess.thecvf.com/content/CVPR2021/papers/Chen_Learning_Conti ...

  6. Scala 隐式(implicit)详解

    文章正文 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 1.Spark 中 ...

  7. Scala入门到精通——第十九节 隐式转换与隐式参数(二)

    本节主要内容 隐式参数中的隐式转换 函数中隐式参数使用概要 隐式转换问题梳理 1. 隐式参数中的隐式转换 前一讲中,我们提到函数中如果存在隐式参数,在使用该函数的时候如果不给定对应的参数,则编译器会自 ...

  8. scala 隐式转换与隐式参数

    隐式转换函数 指的是以implicit关键字声明的带有单个参数的函数,这种函数会自动引用,将值从一种类型转换为另一种类型.就是说如果类型不匹配时,会自动寻找一个隐式方法,把这个格式不匹配的事情解决掉. ...

  9. 深入理解Scala的隐式转换系统

    原文链接:http://www.cnblogs.com/MOBIN/p/5351900.html ---------------------------------------------- 摘要: ...

最新文章

  1. C语言中positive用法,sprintf - C语言库函数
  2. 基于fedora23的karora23初始版本安装crt信赖libpng升级glibc造成系统无法进入...
  3. Swift 烧脑体操(五)- Monad
  4. html算术计算,js实现计算器 提供算术表达式求值
  5. 易维帮助台:论工业产品售后服务升级转型的正确打开姿势
  6. 云堆栈三大服务模式解析
  7. 嵌入式linux mongodb,小白在Ubuntu安装mongoDB与mongo-c-driver
  8. python中*args **kwargs
  9. 2.Rails程序框架
  10. 话单分析账单分析行踪分析三合一数据分析,即可话单、账单、行踪、涉税数据独立分析,也可混合分析。
  11. mysql返回上一层_mysql常用命令大全
  12. LCD12864(ST7565P)字符汉字显示(STM32F103)
  13. mpa和pis_压力单位pis、bar与Mpa换算
  14. fisher精确检验(fisher’s exat test)和超几何分布
  15. 时空序列预测之Convolutional LSTM Network
  16. 21 年年度最佳开源软件!
  17. SAP方丈 SAP常见问题与解决办法 转
  18. 计算机桌面闪烁,电脑屏幕总是闪烁怎么办?这样就能解决
  19. Android4.4之后休眠状态下Alarm不准时的问题
  20. 使用cvMatchShapes对旋转物体的跟踪

热门文章

  1. Java Swing 探索(一)LayoutManager
  2. Servlet3——注解
  3. web.py使用要点
  4. Java基础篇:IO流
  5. 2021CVPR顶会冠军带你解密图像分割
  6. 漫画:骚操作系列(灯泡开关的经典面试题)
  7. 使用BigQuery ML预测天气(6.19)
  8. 看源码,我为什么推荐IDEA?
  9. 程序员,唯有锻炼与读书不能辜负
  10. B2B2C网站系统建设的常见误区