-
Reference: Park J J, Florence P, Straub J, et al. Deepsdf: Learning continuous signed distance functions for shape representation[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 165-174.
-
Key idea: 让decoder学习函数SDF,如果点x在图形内,则SDF(x)<0;在边界上,SDF(x)=0;在图形外,SDF(x)>0
-
loss function for learning SDF:L1距离
L ( f θ ( x ) , s ) = ∣ clamp ( f θ ( x ) , δ ) − clamp ( s , δ ) ∣ \mathcal{L}\left(f_{\theta}(\boldsymbol{x}), s\right)=\left|\operatorname{clamp}\left(f_{\theta}(\boldsymbol{x}), \delta\right)-\operatorname{clamp}(s, \delta)\right| L(fθ(x),s)=∣clamp(fθ(x),δ)−clamp(s,δ)∣,较小的 δ \delta δ 使得网络更注重于物体表面的细节
-
上述方法只能让网络学习到一个图形的SDF,为了让网络可用于多个图形,在输入中加入图形的编码(Learning the Latent Space of Shapes),即下图中的code,作为decoder的输入的一部分,让decoder知道当前输入了什么形状
-
此时decoder的数学表示变为:
f θ ( z i , x ) ≈ S D F i ( x ) f_{\theta}\left(\boldsymbol{z}_{i}, \boldsymbol{x}\right) \approx S D F^{i}(\boldsymbol{x}) fθ(zi,x)≈SDFi(x)
z i z_i zi 是当前形状的编码,x是位置坐标
-
因此,在原有模型的基础上,z成为了另一个需要学习得到的参数。最直觉的做法是使用一个AE模型,但是作者指出:1)训练一个encoder需要消耗大量的资源;2)对于不同的3d输入(points, mesh, etc.),都需要不同的的encoder。所以提出了一种只用decoder的模型(auto-decoder 自动解码机)。
-
☆ 得到code z i z_i zi 的方法:
-
Notations: Dataset contains N N N shapes, 对于每个shape,都有一个对应的SDF,因此将SDF表示为 S D F i = 1 i N S D F_{i=1}^{i^{N}} SDFi=1iN 。每个图形都包含 K K K 个点,每个点可以表示为一个坐标和sdf值的元组,即 X i = { ( x j , s j ) : s j = S D F i ( x j ) } X_{i}=\left\{\left(\boldsymbol{x}_{j}, s_{j}\right): s_{j}=S D F^{i}\left(\boldsymbol{x}_{j}\right)\right\} Xi={(xj,sj):sj=SDFi(xj)}
-
假设先验概率 p ( z i ) p(z_i) p(zi) 是一个标准正态分布,均值为0,方差为 σ I \sigma I σI。先随便给一个,后期再学习。论文中使用的参数为 N ( 0 , 0.0 1 2 ) \mathcal{N}\left(0,0.01^{2}\right) N(0,0.012)。(不太懂为啥要这么做,可能是作者受到VAE的启发,loss中方差的作用仅仅体现在限制z的二范数不能太大)
-
Loss for training: 后验概率可以表示为 p θ ( z i ∣ X i ) = p ( z i ) ∏ ( x j , s j ) ∈ X i p θ ( s j ∣ z i ; x j ) p_{\theta}\left(\boldsymbol{z}_{i} \mid X_{i}\right)=p\left(\boldsymbol{z}_{i}\right) \prod_{\left(\boldsymbol{x}_{j}, \boldsymbol{s}_{j}\right) \in X_{i}} p_{\theta}\left(\boldsymbol{s}_{j} \mid z_{i} ; \boldsymbol{x}_{j}\right) pθ(zi∣Xi)=p(zi)∏(xj,sj)∈Xipθ(sj∣zi;xj)
-
需要最大化后验概率,为了简化计算取对数,即
arg max θ , { z i } i = 1 N ∑ i = 1 N log ( p ( z i ) ) + ∑ j = 1 K l o g ( p θ ( s j ∣ z i ; x j ) \underset{\theta,\left\{\boldsymbol{z}_{i}\right\}_{i=1}^{N}}{\arg \max } \sum_{i=1}^{N} \log(p(z_i)) + \sum_{j=1}^{K} log(p_{\theta}\left(\boldsymbol{s}_{j} \mid z_{i} ; \boldsymbol{x}_{j}\right) θ,{zi}i=1Nargmaxi=1∑Nlog(p(zi))+j=1∑Klog(pθ(sj∣zi;xj)
-
log ( p ( z i ) ) = log ( 1 2 π σ ) + ( − ∥ z i ∥ 2 2 2 σ 2 ) \log(p(z_i))=\log (\frac{1}{\sqrt{2\pi}\sigma})+(-\frac{\left\|\boldsymbol{z}_{i}\right\|_{2}^{2}}{2\sigma ^2}) log(p(zi))=log(2πσ1)+(−2σ2∥zi∥22),当 σ \sigma σ 的值很小时, log ( 1 2 π σ ) \log (\frac{1}{\sqrt{2\pi}\sigma}) log(2πσ1) 的值太大,不利于学习,直接忽略。系数 1 2 \frac{1}{2} 21 也可以忽略。
-
l o g ( p θ ( s j ∣ z i ; x j ) = − L ( f θ ( z i , x i ) , s i ) log(p_{\theta}\left(\boldsymbol{s}_{j} \mid z_{i} ; \boldsymbol{x}_{j}\right)=-\mathcal{L}\left(f_{\theta}(\boldsymbol{z_i,x_i}), s_i\right) log(pθ(sj∣zi;xj)=−L(fθ(zi,xi),si)
-
因此,loss function可以变形为
arg min θ , { z i } i = 1 N ∑ i = 1 N ( ∑ j = 1 K L ( f θ ( z i , x j ) , s j ) + 1 σ 2 ∥ z i ∥ 2 2 ) \underset{\theta,\left\{\boldsymbol{z}_{i}\right\}_{i=1}^{N}}{\arg \min } \sum_{i=1}^{N}\left(\sum_{j=1}^{K} \mathcal{L}\left(f_{\theta}\left(\boldsymbol{z}_{i}, \boldsymbol{x}_{j}\right), s_{j}\right)+\frac{1}{\sigma^{2}}\left\|\boldsymbol{z}_{i}\right\|_{2}^{2}\right) θ,{zi}i=1Nargmini=1∑N(j=1∑KL(fθ(zi,xj),sj)+σ21∥zi∥22)
-
-
-
在Inference时, z i z_i zi 还需要经过计算才能得到(在训练后,固定网络参数 θ \theta θ)。因为这是一个补全任务,所以输入为已知点,求基于已知点最相似的shape code:
z ^ = arg min z ∑ ( x j , s j ) ∈ X L ( f θ ( z , x j ) , s j ) + 1 σ 2 ∥ z ∥ 2 2 . \hat{\boldsymbol{z}}=\underset{\boldsymbol{z}}{\arg \min } \sum_{\left(\boldsymbol{x}_{j}, \boldsymbol{s}_{j}\right) \in X} \mathcal{L}\left(f_{\theta}\left(\boldsymbol{z}, \boldsymbol{x}_{j}\right), s_{j}\right)+\frac{1}{\sigma^{2}}\|\boldsymbol{z}\|_{2}^{2} . z^=zargmin(xj,sj)∈X∑L(fθ(z,xj),sj)+σ21∥z∥22.
-
这个模型的优点:valid for SDF samples X of arbitrary size and distribution
-
缺点: 在预测的过程中还包含一个求z的过程,比端到端的模型速度慢。
-
最终模型: