标题:Visual Object Networks: Image Generation with Disentangled 3D Representation
链接:https://arxiv.org/pdf/1812.02725
本文目的是进行无监督的3D形状与纹理生成。主要思路就是直接用3D-GAN给出对应类的形状,然后使用2D图像预测纹理,并通过2.5D sketches作为中介与3D模型进行渲染,最后将渲染结果丢到判别器中构建gan loss来提升整体效果。主要的局限性在于输入的图像要求没有背景。
模型结构
如图所示,模型主要分为三个部分:形状网络,渲染网络,纹理网络。
形状网络
主要思路就是借鉴了3D-GAN,然后在此基础上添加了W-GAN的约束,从而达到更好的视觉效果。因此形状网络就是负责输入一个随机向量,然后输出一个3D形状(由voxel表达,这里作者使用了distance function,因此表面比较平滑)。
渲染网络
从这里开始就需要2D图像的介入了,目标就是把输入的2D图像(称之为原图)“贴合”到3D模型上去。
这里先假设我们有一个相机内参,然后按照图形学中的方案,就是从相机焦点往外发射光线,通过计算光线与3D模型的碰撞来获得模型对应的深度以及可见度图(即2.5d sketches)。
而这个相机内参则可以通过同时选取多个不同的角度对模型进行渲染,然后用渲染得到的剪影图与原图计算IOU,获得最大IOU值的内参就认为他是图像对应的相机参数了。
纹理网络
渲染网络主要解决了2D图像相机角度的问题,但是光照,纹理,如何贴合都还没有处理。而这里作者直接将之转换成了图像翻译的工作,即使用一个encoder输入原图,直接预测对应的纹理向量(提供了各种各样的2D纹理信息),基于图像的剪影图和深度图。然后将预测结果统一输入生成器从而获得最终的结果。
作者参考cycleGAN构建了一系列的cycle-consistency loss对最终渲染的结果进行约束。其中包括:
图像真实性损失:通过判别器对比原图和最终生成的图
2.5D真实性损失:通过判别器对比3D图像获得的2.5d sketches和2D图像获得的2.5d sketches
图像cycle-loss:计算原图与渲染结果的l1距离
2.5d cycle-loss:将渲染结果丢到纹理网络中的编码器中,预测对应的2.5d sketches,并与原图获得的结果做l1损失
纹理融入损失:为了避免生成器不使用纹理向量,作者使用纹理网络中的编码器提取渲染结果的纹理向量并与原纹理向量做l1损失
kl损失:在纹理向量上添加了kl损失,主要是为了后免测试的时候可以在隐空间中较为方便的进行向量插值。