这是一篇清华大学和微软亚洲研究院合作发表在CVPR的论文,关于3D物体变形工作的,感觉读的时候还是花了比较大的功夫,可能是我太菜了。。。在此记录一下,一来是怕自己看时间长忘记了这个非常有影响力的工作,二来也希望能够帮到同样对这个文章感兴趣的朋友,第二次写博客,很多东西还不懂,希望大家多多和我交流,批评指正,感激不尽(要是路过能点个赞支持新人就太好啦hhh)。
我们提出了一种新的变形隐式场(DIF)表示,用于对一个类别的三维形状进行建模,并在形状之间生成密集的对应关系。使用DIF,3D形状由类别间共享的模板隐式字段表示,以及专用于每个形状实例的3D变形字段和校正字段。利用变形场可以很容易地建立形状对应关系。我们的神经网络被称为DIFNet,它可以在不使用任何对应关系或零件标签的情况下,为属于一个类别的3D对象联合学习形状潜在空间和这些field。所学习的DIF网络还可以提供反映形状结构差异的可靠的对应不确定度测量。实验表明,DIF网络不仅能产生高保真的三维形状,而且能在不同形状之间建立高质量的密集对应关系。我们还展示了一些应用,如纹理转移和形状编辑,其中我们的方法获得了以前的方法无法获得的令人信服的结果。
可以看到这个效果还是很让人眼前一亮,不仅完成了几何上的变形,甚至还能在变形中保留纹理信息,右边两行显示这个工作可以用来编辑物体,应该后续会单独成为一个应用。
其实这篇文章的大体思路就是,我们想要把一个3D物体变形为另外一个3D物体,首先需要先把这一个类别的物体(变形只能在同一类别的物体间进行)的共同特征看作一个模板空间。(例如,所有的汽车都由车身和轮胎组成,大多数椅子都有靠背、座位和腿),我们要先通过原始物体点坐标的变换,来将这个物体变换到模板空间,然后通过改变模板空间的值来完成对这个物体形状结构的改变,如果还是和GT有差距的话,再直接改变模板空间物体对应部分的值来进行结构上的微调。后续有详解。
1、我们提出了DIF,一种新的基于隐式场的3D shape来表示某个特定物体类别中的shapes(即为物体姿态)。
2、我们提出了DIF网络,这是第一个致力于三维形状建模的方法,它以无监督的方式学习具有结构变化的对象的密集对应关系。
3、我们表明,我们的方法可以实现高质量的密集对应和引人注目的纹理转移和形状编辑结果,这是以前的方法所不能实现的。我们相信我们的方法可以应用于广泛的3Dshape分析和操作任务。
给定一个类别的3D物体集合 { O i } \left\{\mathcal{O}_{i}\right\} {Oi},我们的目标是学习一个潜在的shape空间 L \mathcal{L} L以及一个可以生成这些物体并提供密集shape对应的神经shape模型 f f f。每个形状可以由潜在编码 α ∈ R k \alpha \in \mathbb{R}^{k} α∈Rk表示,并且将形状模型 f f f将潜在代码映射到相应的3D形状,
f : α ∈ R k → O f: \alpha \in \mathbb{R}^{k} \rightarrow \mathcal{O} f:α∈Rk→O
这里借鉴了[DeepSDF]中提出的auto-decoder框架来联合学习给定对象的shape编码 α \alpha α和模型 f f f的权重。该自动解码器框架可以产生[DeepSDF]中所示的合适的潜在空间。这个文章有兴趣的童鞋可以去搜索以下,CSDN里有一个大神总结的非常好。
经过训练后,可以通过潜在空间采样生成新的形状,并且可以通过逆优化将形状嵌入到潜在形状中。
为了生成高置信度的shapes,我们采用有向符号距离场(SDF),它可以高度还原表面几何细节。SDF是一个连续的表示,它使得任何点 p ∈ R 3 p \in \mathbb{R}^{3} p∈R3对应于一个标量 s ∈ R s \in \mathbb{R} s∈R:
S D F ( p ) = s S D F(p)=s SDF(p)=s
SDF的定义
其中 s s s的大小表示从点 p p p到物体最近的表面的距离, p p p在形状内部的话 s s s的值为负,反之为正,有了SDF,形状表面可以用 S D F ( ⋅ ) = 0 S D F(\cdot)=0 SDF(⋅)=0的等值面隐式表示。可以使用现成的算法从该隐式曲面中提取3D网格,例如Marching Cubes。使用SDF来表示形状,我们的神经形状模型可以重写为:
f : ( α , p ) ∈ R k + 3 → s ∈ R f:(\alpha, p) \in \mathbb{R}^{k+3} \rightarrow s \in \mathbb{R} f:(α,p)∈Rk+3→s∈R
上一步的式子需要我们从潜在编码 α \alpha α中解码出形状信息,并预测3D points的SDF值。这一步,我们应用两个网络来分解这个任务,一个 D I F − N e t DIF-Net DIF−Net用于SDF预测,一个 H y p e r − n e t Hyper-net Hyper−net用于形状信息解码(解码出 α \alpha α所代表的形状信息),如图2所示。超网络 ψ ψ ψ预测DIF网络 φ φ φ中神经元的权重ω,这两个网络可以写成:
此外,这个DIF-Net φ φ φ又包括两个子网络:一个模板SDF生成网络 T T T和一个Deform-Net D D D。下一节会对这两个网络有介绍。
对于给定的对象类,我们假设对象实例主要由一些常见的模式或语义结构组成。这是一个温和的假设,适用于许多现实世界的对象类。例如,所有的汽车都由车身和轮胎组成,大多数椅子都有靠背、座位和腿。我们试图找到一个模板隐式字段,它描述了类的公共结构,并可以通过3D变形和校正为不同的对象导出SDF。
这一步是用来获取能够代表一个物体类别的模板空间,目标是:
以用于将3D点p映射到一个标量 s s s。这个 s s s是后面用于deform和correct特定对象的SDF。这里T的网络权重在整个类中共享,因此必须学习到类中常见的结构。
这里有个很绕的地方,原文中说,虽然一个对象的SDF可以从T中导出,但是T本身不需要是任何某个对象的有效SDF。如图3所示, T T T中自由空间的值是一个类别中不同对象个体shape的“融合”SDF值,而不是单纯到等值面的值。
我理解的这个意思就是,改变T中s的值,就像数据库一样,可以找到拥有共同模板的所有对象个体的结构,就像这个图,s=0.01和s=0.02并不是单纯的到等值面的距离,而是两种相似个体的不同结构,而且这个地方作者也说,他的模板字段通过其在体积中的不同等值面记录一个类别中的所有结构变化,而基于mesh的模板仅在其表面有意义。因此相比以往的基于mesh的模板能够更好的学习具有结构差异的对象的对应关系,
为了获得某个对象个体的SDF,这里学习了一个Deform-Net D D D(就是之前提到的DIF-Net φ φ φ的模板网络 T T T以外的另一个子网络)来预测一个变形场和基于模板场 T T T的校正场。(deformation field 和correction field,就是之前说的deform和correct)
v ∈ R 3 v \in \mathbb{R}^{3} v∈R3就是用于deformation的预测,然后这个 Δ s ∈ R Δ s \in \mathbb{R} Δs∈R就是用于校正的一个标量(后续改变模板空间中物体与GT偏差的区域的s值即可),这个 D D D的权值是特定于实例的,从Hyper-Net中提取的,见图2,且在下标 ω ω ω处表示,根据 T T T和这个 D D D,一个对象实例点 p p p储地SDF值可以通过以下式子获取:
每点偏移 v v v将点 p p p变形到模板空间,以通过模板场 T T T获得其SDF值,这自然会导致对象实例和模板场之间的紧密对应。通过将两个对象shape的表面变形到对齐的模板空间,然后用最近邻法搜索,可以进一步建立两个对象shape之间的紧密对应。如果每点修正值与地面真实值仍有差异,则每点修正值会修改指定的 Δ s Δs Δs值。因此,如图4所示,校正字段有助于添加或删除结构以增强形状表示能力。
对于correction field(就是和deformation filed一起由 D D D预测的那个),也可以从图4中看出效果,以这个椅子为例,要是想变形出模板空间没有的结构(这里原文用了stretcher part,翻译软件翻译成拉伸器结构,我觉得应该就是椅子腿下面那个连起来的地方),仅通过这个deformation field是很难的,因为这需要一些表面点必须变形到期望的位置,这需要复杂的 deformation field,该变形场( deformation field )难以通过网络 D ω Dω Dω来学习。即使这样的变形场可以被学到,由它导出的这个 stretcher part 也是错的。
文章中提到,使用校正场(correction field可以通过简单地改变该区域中的SDF值来添加stretcher part,而不是使现有的表面点变形)。这样,不仅可以避免错误的对应关系,而且可以通过网络容易地学习简单、平滑的变形场。
总之,神经shape模型(就是最开头那个 f f f,用于将潜在编码空间解码成SDF来恢复物体表面,形成一个完整物体)可以写成以下形式:
由网络 ψ ψ ψ和 T T T的权重参数化
整体步骤就是(可搭配图2食用),对于shape编码 α \alpha α(用DeepSDF中提出的auto-decoder结构来学习shape编码 α \alpha α),Hyper-Net预测DIF-Net的一部分权重,然后DIF-Net预测defomation field和correction field,先通过deformation field(就是公式中的那个v,代表点坐标的偏移)将初始shape的点变形到模板场 T T T(模板空间)中,改变模板空间的值(也称为SDF,但是不同于标准意义的sdf值)来完成同一类别下不同对象个体结构的更改,如果这个步骤结束还是和GT有差距,再改变对应位置的SDF值来完成结构的微调。
本文加了很多括号是为了防止大家忘记前面所提到的一些内容,或是出现中英文对应不上的问题,例如,deformation field 和变形场(因为我本人开始看的时候符号一多就会出现记不住的的情况),后续是一些关于网络训练的loss设置和实验结果,这篇博客有200访问量就把下一部分内容也整理好放出来!!!(来自新人博主的卑微~)