标题:Self-supervised Single-view 3D Reconstruction via Semantic Consistency
链接:https://arxiv.org/pdf/2003.06473
本文做的是基于单图的无监督3D物体重建。文中模型只需要图像中的剪影信息以及要求输入的所有图片需要是同一类物体(比如全是车,全是鸟,或者全是马等等)就可以完成无监督的3D重建,且不需要任何优化过的模板(例如3DMM或SMPL)。本文主要的思想是将同一类物体通过语义分割建立联系,通过3D模板(初始模板就是一个球)与语义分割模型相互之间的促进来迭代式的增强模型的重建能力。
本文的主要思路建立于以下逻辑:“我们可以将同一类物体分割成蕴含同样语意的几个小块,且每个语意块之间是跨物体一致的”,例如,鸟类之间的翅膀是相对一致的,车辆之间的车轮是相对一致的。按照这一逻辑可以做出以下陈述:同一类物体的对应点之间的语意必然是相同的,因此当我们形变某一物体的mesh的时候,理论上这个mesh上每个点对应的语意标签都是不变的。
模型结构
CMR模块
首先可以看到,模型的最左边是一个绿色框,这个就是CMR模块(详见Learning category-specifc mesh reconstruction from image collections.)。这个模块输入一张图,输出对应的纹理流,形变值,以及相机参数。
纹理流:在过往的大部分模型中,我们都是直接预测一个UV纹理图,图上每一像素就对应3D物体每个点的纹理,对应关系是预先制定好的。但在这里,作者是直接预测UV纹理图中的每个点在原始图片中的位置。简单来说就是原来大家是直接在UV图上预测颜色(RBG),而现在作者是直接在UV图上通过预测坐标(原始图像中的x,y)来得到颜色(允许双线性采样来获得更准确的颜色过渡)。之所以这么做的原因是为了获得3D图与输入的2D图之间点到点的关联性,有助于下文的语义分割任务。
形变值:这个形变值就是基于模板的一个逐顶点的位移值,用于将类模板拟合到当前物体。如图中所示,通过直接加到原始模板中来获得新的3D形状。
相机参数:相机参数在原始的CMR中是通过landmark来预测的,而本文中使用的是语义分割的结果,其实和landmark本质上没有太大差别,都是基于相对点的一致性来获得信息的。
语义分割模块
这一模块就位于蓝色框的上半部分,可以看到这里分为了三个步骤,第一步是直接基于输入图像预测一个语义分割图,第二步是从中预测出对应3D模型的纹理流,第三步是将多个纹理流求平均,得到一个基准纹理流,即基准UV图。
2D语义分割:这部分使用的是SCOP,可以预测基于输入物体不同语意部位的语意图。如果我没理解错的话,本文的模型里就内置了SCOP,因此在训练的过程中可以进一步优化SCOP的结果。
预测纹理流:上文已经说了,纹理流本质上就是一个UV图,当中每个像素的坐标就指向了原始2D图片中对应的一个点,因此每个像素就是一个x,y坐标。但这并不完全,因为我们文章中使用纹理流本质上是想要借助语意一致性信息的,因此这里除了x,y坐标还有一个n标签,这个n标签就是用于表示当前像素属于哪个语意。由此就可以有机的将原始2D图,语义分割图,纹理与3D模型结合到了一起。
基准UV图生成:由上图我们也可以看到,即使是同一类物体,每个个体的纹理流也并不是完全相同的,这一方面是因为SCOP的分割其实并不准确,比如你看蓝色左上角的两个2D语意分割图,一个蓝色部分标到了脚,一个蓝色部分标到了翅尖。因此,这里作者通过选取最优的几个纹理流做了平均,从而得出一个应用于所有此类物体的基准纹理流(UV图)。
训练
讲完了以上的部分,事实上我们已经了解了模型的所有模块,接下来就是如何组装这些模块以及如何优化的问题了。
首先,为了将图像还原为3D物体,肯定得先有个3D表示方式。这里作者选用的是网格表示法,但由于我们事先没有任何的3D先验信息,因此初始的3D模型就是一个球,这一部分位于蓝色框的下半部分,可以很明显的看到随着不断的优化,模板才一步步的变成像是鸟的样子。然后每个图像都会根据这个模板应用自己的形变值来得到自己的3D模型。最后将上文预测出的纹理流贴合到3D模型上通过可微渲染器根据相机位置渲染出与原始2D图像对齐的语义分割图,再与我们一开始预测出的2D语义分割图做重建损失,这就像是其他重建任务中的像素损失一样,只不过这里换成了语意图重建而已。这样就构建出了我们的自监督训练框架
另外,其实可以发现我们的流程中有一个问题,那就是CMR模块怎么开始训练?如果CMR模块不能输出好的纹理流和形变值,那纹理流和3D图自然无法给出好的重建结果,反过来又会导致CMR无法接收到正确的下降梯度。这就产生了一个矛盾。因此作者提出了EM算法,即轮流优化两个模块。
E步
在E步中,我们固定住纹理流和模板,只使用以下损失训练CMR模块:
1.基于剪影的IoU损失
2.输入图像与重建图像的像素损失
3.基于语意图的损失(a.基于2D语意图的重建像素损失,b.基于2D语意图的重建Chamfer距离)
4.基于语意图的cycle损失
M步
在M步中,我们固定住CMR模块,一步步更新基准纹理流和3D模板