作者提出了一个新的深度学习网络来生成某一类物体的连续SDF表示。主要贡献:  1. 相较于传统的SDF只能表示某一个形状的隐式表示,DeepSDF可以直接表示一类物体的SDF函数。所谓shape conditioned 3D modeling  2. DeepSDF提出了一个auto decoder网络结构来实现SDF估计  3. 应用较广泛, 有很好的体积压缩. 由于表示一类物体, 同时还具有很好的shape completion特性

用最简单易懂的语言来说,对于一个已知的三维模型,SDF(Signed Distance Function)就是一个三维空间中的函数,输入一个坐标点 ,返回该点到三位模型表面的距离同时这个距离是有符号的,一般来说,对于模型外面的点,距离为正,而模型内部的点则为负。或者从观察者的角度,如果点在表面面向观察者的一侧,则为正,在背离观察者的一侧,则为负。

DeepSDF论文官方的兔兔说明一下:

各个方法对于SDF函数的存储往往是离散的,比如将三维空间是做一系列的“体素”(类比二维空间的“像素”),每个体素中存储一个SDF值,之后尝试用体素中等于或接近零的部分重建一个三维表面
 而DeepSDF论文呢,则尝试将SDF解析为一个连续的函数。虽然文章把这一点作为一个创新提出(包括将模型表面视作SDF回归的决策边界),因为根本上来讲,SDF本来就应该是一个连续函数才对,只是受制于各种原因,我们无法为每个三维物体写出这个连续函数的完整形式。这也就是DeepSDF的思路,用神经网络这个“万能插值机”去近似这一函数。

文章一开始提出了一个显而易见的结构,就是直接拿个神经网络,输入坐标,输出SDF值,然后对每一个三维模型单独训练,充分发挥“插值机”的原始作用。不过显然,这种方法在现实中是很难应用的,因为对于每个新模型都要训练一个新神经网络,实在是太低效太不~~Generalizablism~~了,那么自然地,为了发挥深井网络Generalizability的优势,团队自然而然想到了使用一个Latent Vector去表示三维模型的原始形态,于是新的神经网络就变成了,给定一个用来表示三维模型的Latent Vector,附带一个用以查询的坐标点,返回这个坐标点所在位置的SDF值。

众所周知(~~并不~~)获得一个原始输入数据的Latent Vector Representation,大家最喜欢的方法之一就是训练一个AutoEncoder。然而DeepSDF则使用了一个稍有不同的东西,他们叫做AutoDecoder,故名思义,就是一个不训练Encoder的Decoder。
 这里我想吐个大嘈,他们的论文说了一大堆不要Encoder的理由,比如AutoEncoder大家一般都只用一半而把另一半另一半扔掉什么的,说来说去没说到点上。强烈怀疑他们组提出使用AutoDecoder架构的人和最后执笔写论文的人沟通不畅。我自己读下来的感觉是,AutoDecoder的选用本质上是一个在FeedForward过程的速度,和数据本身潜在的复杂度和变数之间的取舍(如果我的理解有错,欢迎指正)  下面简单讲一下这个传说中の AutoDecoder:

如图所示,标准AutoEncoder的架构大体上是,一个输入,若干层(称为Encoder)之后有一个关键的瓶颈层(Code),瓶颈层后面若干层(称为Decoder)之后有一个和输入层长得一样的输出层。训练的时候努力让输出等于(甚至优于——比如修复类任务)输入,最后训练出来的瓶颈层,就是对输入数据的一种更紧凑的压缩,也叫做关于原始数据的Latent Vector。Latent Vector往往包含了原始数据最关键的那些信息,更加便于提取特征,等等等等。
 而DeepSDF则提出,我们可以不要Encoder部分,而直接取用Decoder部分。
 这就很TM诡异了,如果我只有一个Decoder,我怎么知道哪个Latent Vector对应原始输入呢?
 官方给出的示意图长这样:

不是很好懂,没错,不仅这图不太好懂,论文里的描述也乱七八糟,不过且慢,容我再画一张图:

这个训练过程则是:

所以,答案是,AutoDecoder的结构不能像AutoEncoder一样面对新数据时只需要一个Forward过程,而是需要根据后面的Decoder中隐含的先验知识,进行少量的训练,以找到一个Latent Code出来。

那么问题来了,为什么要使用一个无法进行实时推断而是每次都要训练的AutoDecoder来代替原有的AutoEncoder呢?

一个不那么具备说服力(但是论文里似乎确实提出了)的理由是,因为Decoder不必还原原始数据,而可以是近似目标函数,所以训练出来的Latent Vector,对于我们目标函数所需要的信息会更加友好。但是仔细想一想就会发现,如果我们直接使用原始数据进行输入,构建一个神经网络,然后在某一隐藏层拼接上  查询。那么训练之后,我们就可以得到一个在预测时只需要Forward过程而无需再训练的神经网络,而被拼接了 ​​​​ 的那一层也就可以视作Latent Vector。

所以……用AutoDecoder的深层原因到底是什么?

于是我去费劲巴拉地又读了一遍他们的代码,着重看了看Reconstruction部分,想办法搞明白这个神经网络到底在做什么之后,谜题便渐渐解开了。

首先,这个模型在重建的时候到底在干什么?这个问题在我读论文和代码的时候一度困扰了我很久,尤其是在我看到这个预期输出是SDF Value的神经网络在 Test - Evaluation 阶段,依然在测试数据集中包含SDF Value进行训练。进一步捋顺之后我反应过来他们在神经网络中的那一步Evaluation,实际上是在衡量这个神经网络能构造出一个多好的Latent Vector来近似测试数据集中的SDF Value,而不是尝试计算Reconstruct Error。而在真正的表面重建过程中,这个收敛出来的Latent Vector将和任意输入坐标一起得出一个SDF Value,进而实现任意精度的重建。

那么问题就逐渐明朗了,DeepSDF在做的事情,其实是对于有限精度采样的SDF数据,在包含先验知识的Decoder的帮助下,回归出一个连续的SDF函数,从而实现将有穷精度的数据转换成任意精度的查询器,以便进行精细重建。

返回来看这个AutoDecoder在测试数据上的训练过程(即寻找Latent Vector的过程),我们发现,可以将一个模型的所有采样点作为一个完整的epoch,而不是把单个模型的全部采样数据一股脑输入进去。这么做的好处是什么呢?

  1. 如果是AutoEncoder,为了得到代表一整个模型的Latent Vector,我们将不得不想办法统一模型原始数据的分辨率(比如每三个神经元代表一个采样点,那么一个模型最多只能有input_size / 3个采样点)。而对于AutoDecoder,一个模型对应的采样数量只影响其epoch的大小,而不会影响单个输入本身的尺寸,所以AutoDecoder的架构支持对每个输入模型有任意数量的采样点。
  2. 另一个非常重要的是,对于模型的采样点,一个显著的特征就是它是Orderless的,即你交换任意两个采样点的顺序,也不应当影响最终输出的结果。传统的神经网络结构并不是很善于解码orderless vector的输入,但是如果我们不将整个模型的所有采样点编码为一个巨大的input vector,而是将每个采样点作为一个input vector,整个模型的所有采样点作为一个epoch去训练,那么我们就可以应对这种orderless的特征了。

DeepSDF : Learning Continuous Signed Distance Functions for Shape Representation相关推荐

  1. 详解DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation

    Reference: Park J J, Florence P, Straub J, et al. Deepsdf: Learning continuous signed distance funct ...

  2. DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation

    目录 1. 概述 2. 相关工作 2.1 表示学习技术 2.2 3D形状补全 3. DeepSDF 4. Auto-decoder 4.1 训练阶段 4.2 推理阶段 5. 实验与应用 5.1 表示已 ...

  3. SDF(signed distance field)

    一般来说,无论2d或者3d资产都有隐式(implicit)和显式(explicit)两种存储方式,比如3d模型就可以用mesh直接存储模型数据,也可以用sdf.点云(point cloud).神经网络 ...

  4. signed distance field 算法

    将二值图转化成signed distance field后,可以在双线性插值下实现平滑放大. 定义: 到前景的distance field:各点到最近前景点的距离. 到背景的distance fiel ...

  5. Truncated Signed Distance Function: Experiments on Voxel Size

    论文:Truncated Signed Distance Function: Experiments on Voxel Size 简称:TSDF 作者:Diana Werner等 时间:2014 相关 ...

  6. Godot 4.0中的基于有向距离场SDF(Signed Distance Field)的实时全局光照技术

    原文地址 Godot官网 <Godot 4.0 gets SDF based real-time global illumination> 作者 Juan Linietsky 6月28日 ...

  7. 什么是终身学习(Life Long Learning / Continuous Learning / Never Ending Learning / Incremental Learning)

    文章目录 1. 概念区分 1.1 Life Long v.s. Multi task 1.2 Life Long v.s. Transfer 2. 终身学习 2.1 Selective Synapti ...

  8. End-to-end Learning for Inter-Vehicle Distance and Relative Velocity Estimation in ADAS with a Monoc

    Paper name End-to-end Learning for Inter-Vehicle Distance and Relative Velocity Estimation in ADAS w ...

  9. 论文阅读 [CVPR-2022] BatchFormer: Learning to Explore Sample Relationships for Robust Representation Lea

    论文阅读 [CVPR-2022] BatchFormer: Learning to Explore Sample Relationships for Robust Representation Lea ...

最新文章

  1. 《走出软件作坊》书评活动图书奖品名单
  2. 久在樊笼里,复得返自然
  3. 作为本科大学生比较适合的水准比较好的,嵌入式软件系统的会议
  4. LR中如何添加事务,参数化,检查点,集合点,思考时间等
  5. java中List、Map、Set、Collection、Stack、Queue等的使用
  6. openshift_为Openshift + MongoDb应用程序编写验收测试
  7. 让height: 100%生效
  8. Python | 字符串isdecimal(),isdigit(),isnumeric()和Methods之间的区别
  9. new操作符的作用是什么
  10. 树莓派 编译live555_树莓派raspberry4B入坑指南 part-6 docker编译古灵币钱包
  11. 从exe程序反汇编得到py源码
  12. 服务器口令怎么修改,畅捷通不能连接到服务器怎么修改口令
  13. 比色皿洗涤不干净会造成很大实验误差
  14. word转pdf转换器2015注册码
  15. 超多淘宝京东抢购秒杀软,脚本,易语言软,有作者
  16. hdu6287 口算训练
  17. (附源码)springboot火车票订票系统 毕业设计 171538
  18. 云计算机运用 技术,云计算技术在计算机数据处理中的应用
  19. ArcGIS 制作3D遥感影像图
  20. 郁金香搜索引擎的方案(2017版)

热门文章

  1. Hudson Jameson将在柏林硬分叉后卸任以太坊基金会社区经理
  2. 去中心化保险协议InsurAce完成100万美元种子轮融资,DeFiance Capital领投
  3. 关于GPS定位反欺诈研究
  4. springboot中配置过滤器以及可能出现的问题
  5. javaScript语法基础
  6. 骑行318、 2016.7.14
  7. BZOJ 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
  8. intrinsicContentSize和Content Hugging Priority
  9. Processing中PDF格式输出
  10. # [银联复赛]-整数对:数论