项目主页:https://www.mmlab-ntu.com/project/meshinversion/
方法名称:MeshInversion
输入:单目图像 (in the wild,有背景的,没有抠图的)
输出:textured 3D mesh
key challenge: 缺少3D或multiview supervision
方法核心:先预训练一个3D GAN ,可以从latent code z生成textured mesh。然后在inference的时候,从输入的图片倒推最符合的z。(这是一个inferece optimization的方法!!)
image-3D object pairs [46,35,32,39]
multi-view images [33,28,51,47,34]
SMPL for humans and 3DMM for faces [8,40,18],
CMR [19] reconstructs categoryspecific
textured mesh
texture一般有两种方法,一个是direct regression of pixel values in the UV texture map – often blurry 但作者用的这个。
主流方法是learning the texture flow。
6.Learning to predict 3D objects with an interpolation-based differentiable renderer.
In: NeurIPS (2019)
重建的mesh可微渲染之后,用渲染得到的multi view images做discriminaive 监督
13.Leveraging 2D data to learn textured
3D mesh generation. In: CVPR (2020)
VAE 方法,face colors instead of texture maps
38.Convolutional generation of textured 3D meshes
topology-aligned texture maps and deformation maps in the UV space. (本文就用了他的pretrained model)
看起来大体方法是用Generator从latent code生成geometry和texture,然后用chamfer mask loss和chamfer texture loss来监督。
mesh表示为O = (V,F,T), 即点,面,texture map。
其中,由于
An individual mesh is iso-morphic to a 2-pole sphere.
因此点的位置可用球体的deformation ΔV\Delta \mathbf{V}ΔV表示:
V=Vsphere+ΔV\mathbf{V} = \mathbf{V}_{sphere} + \Delta \mathbf{V}V=Vsphere+ΔV
以前的方法大多用MLP来regress delta V,本文使用CNN。
渲染是,使用弱透视投影。(区别于透视投影和正交投影的一种投影方法),参数为π, 包含scale s, translation t和rotation r。
这个阶段训练了一个3D GAN。主要参考ConvMesh和PatchGAN。
目的:find the z that best recovers the 3D object from the input image Iin\mathbf{I}_{in}Iin.
需要:原始的image,其对应的mask,还有将3Dshape进行渲染的相机参数。
如何预测相机参数π:如果直接regress camera pose from scratch,存在camera-shape ambiguity问题。[24] 所以我们用CMR来initialize the camera。
由于这个相机位置是不断oprimize的,image不可能完美对齐,需要一个鲁棒的texture loss,见下文
这个东西挺有用的,请看消融实验:
等下仔细看看代码,尤其是这个latent space loss。
以及那个feature level是咋搞啊。
Texture Flow 更常用,但在invisible的地方容易出错;因为容易copy foreground pixies including the obstacles.
Pre-training:
600 epochs, with a batch size of 128,
15 hours on four Nvidia V100 GPUs.