0%

<论文阅读>(六)Three-D Safari Learning to Estimate Zebra Pose, Shape, and Texture From Images “In the Wild”

<论文阅读>(六)Three-D Safari: Learning to Estimate Zebra Pose, Shape, and Texture from Images “In the Wild”

论文链接

Github

Contribution###

  • 提出了一个基于已有统计模型的,构造合成数据集的方法
  • 针对四足动物有更复杂的形状问题,改进了已有纹理预测的方法
  • 为了进一步对不同实例的改进,提出了per-instance optimization

Method

  • Net Architecture

输入图片经过Encoder(主要是ResNet-18),输出为一个特征向量,接着送入三个分支网络。由于网络最后会生成一个一个full texture map,作者基于此对于每个实例做了进一步优化(per-instance optimization)。

  • digital dataset

这篇论文是基于作者之前的两篇工作SMALSMALR。其中前者是利用一组动物玩具扫描进行统计建模得到一个统计模型,也就是上图的SMAL horse template。之后在根据一系列优化函数进行给定输入图像的优化,三维模型可以建模为:

$v = M(\beta,\theta,\gamma) \tag{1}$

$v_{shape}(\beta) = v_{horse} + B_s\beta \tag{2}$

其中$\beta$为一组基$B_s$的系数,表示为动物形状,$\theta$为pose参数,$\gamma$为相机参数。后者较于前者,输入由单张图片变为对于同一个动物的(可以是)不同相机角度,不同姿态的若干张图片。作者首先利用SMAL对输入的多张图片进行拟合,得到对应的三维模型$v_i = M(\hat \beta_i,\hat \theta_i , \hat \gamma_i)$。由于不同照片所对应的是同一动物,所有用以描述形状的$\hat \beta_i$应该是一致的,所以可以任选一个。接着,作者对上面所获得的三维模型进行进一步的优化,以期获得待重建动物独有的形状特征,例如犀牛的角。

$v_{shape}(dv^{SMALR}) = v_{horse} + B_s \hat \beta + dv^{SMALR} \tag{3}$

其中$dv^{SAMLR}$就可以看作待重建动物独有的形状特征。

作者利用有限的,真实的动物图片,通过SMALR合成了10个不同的三维模型。然后这个10个不同的模型,再加以不同的,合理的相机参数$\gamma$,pose参数$\theta$,形状参数$\beta$,然后投影在不同的二维背景上,以获得合成数据。这些数据用来作为网络的训练集,而测试集和验证集均为真实的图片。因此,对于每一组训练数据,都包含了:1、一张RGB图片,2、Texture map $T_{gt}$,3、texture uv-flow $uv_{gt}$4、剪影(sihouette) $\mathcal S_{gt}$,5 、pose参数 $\theta_{gt}$,6、相机参数 $\gamma_{gt}$,7、形状参数 $\beta_{gt}$,8、vertex displacements $dv_{gt}^{SMALR}$,9、特征点 $K_{2D,gt}$。为了更好的预测作者将9和7结合在一起得到10、$dv_{gt} = B_s\beta_{gt} + dv_{gt}^{SMALR}$

  • uv-flow predictor

大体思路与CMR一致,不同的是,作者认为,由于四足动物有着更大的articulated model,导致了在空间上具有不连续性(我估计可能是四肢之间具有较大空当的意思)。这就是个原本的纹理预测方法效果较差。作者的方法就是将其分成四个子块,同四个不同的编码,解码器来预测。但具体是如何做的,不清楚。

或者换种角度看待,这个问题.CMR 中初始模型是由一个单位球体得来的,这使得从中心到各个点的连线上不会存在第三个点。而对与这个工作中的统计模型,即使把点单位化,从中心到各个点的连线上也可能会存在第三个点,从而导致UV展开后的坐标一致,不利于网络预测。

  • shape prediction

$dv = Wf_s + b \tag{4}$

其中$b$是偏置项,$W$被初始化为SMAL的$B_s$,为了获得更好的三维模型,$B_s$会随着迭代进行优化。

$L_{train} = L_{mask}(S_{gt},S) + L_{kp2D}(K_{2D,gt},K_{2D}) + L_{cam}(f_{gt},f)+L_{img}(I{input},I,S_{gt})+L_{pose}(\theta_{gt},\theta)+L_{trans}(\gamma_{gt},\gamma)+L_{shape}(dv_{gt},dv)+L_{uv}(uv_{gt},uv)+L_{tex}(T_{gt},T)+L_{dt}(uv,S_{gt}) \tag{6}$

  • per-instance optimization

Given an input image, we run the regression network and then perform a per-instance optimization where we keep the network layers fixed and optimize over the feature space variables. In this way we eploit the correlation between variables learned by the network.

由于不是很确定这个方法是如何对特征空间进行优化的和优化的先后顺序是怎样的,所以就不下结论了,等开源之后,再补回来。这里就记录一下关于这个方法的一些可能的意义。

网络的输入为input image,将其输出的三维模型投影回二维平面的图片记为prediction(与网络结构图一致)。作者的意思就是将prediction加上具有一定意义的background之后(记为back-prediction),再跟input image进行比较。其中优化函数就包括了perceptual loss

  • per-instance optimization有何用

由于Encoder所编码的features包含了很多的噪声,而这些噪声会干扰接下来三个分支网络的结果预测。如果去除这些噪声,毫无疑问,会有利于参数的预测。我们可以将一幅图片分为前景和背景两个部分,从而可以将perceptual loss的评价方法分为前景损失和背景损失两种。在per-instance optimization中,由于网络所有层的参数都是固定的,导致了back-predictioninput image的背景都是一致的,那么为了降低损失,网络就势必要尽可能提高两者在前景上的相似度,从而就去除了features中的噪音。

  • 为什么要加background model

文中说的很清楚,如果在不加background model,那么在测试时,就要求输入图片一定具有所对应的剪影,否者单单有prediction是没法跟input image进行peceptual loss上的比较。而background model,如文中所提,就是预测一个平均的背景像素值,来代替真实的背景值。文中提到这个模型使用构造SMALR模型所用的图片来训练的

  • 为什么需要预测背景的平均值

尽管这是一个说服力很弱的猜想,但是记录一下。

横轴可以看作难易度,纵轴可以看作背景的相似度。back-model的作用就可以看作为左侧橙色的线,而要预测剪影的话,就可以看作右侧黄色的线。尽管back-model的效果较弱,但其所需的成本较剪影预测要少很多,同时获得的效果也可以达到预期的效果。

Experiments