摘要
我们提出了一个三维感知生成器FENeRF,它可以生成视图一致的局部可编辑的人像图像。 我们的方法使用两个解耦的潜在代码在空间对齐的具有共享几何的三维体中生成相应的面部语义和纹理。 FENeRF利用这种底层的三维表示方法,可以联合绘制边界对齐图像和语义掩码,并利用语义掩码通过GAN反演对三维体进行编辑。
涉及到的知识点
latent code:例如图像中,企图用小的特征映射来表示原图像。例如,夹在encoder-decoder中的得到的张量C。
反演:GAN反演的任务是使用预先训练的GAN模型将给定的图像反转回潜在代码,将图像编码为latent code然后再解码生成图像。
解耦:降低耦合度。
siren:使用周期函数来做神经网络表征
贡献
利用语义、几何和纹理在空间上对齐的三维表示,提出了第一个局部可编辑且严格视图一致的人像图像生成器。
我们使用成对的单目图像和语义映射来训练生成器,而不需要多视图或三维数据。 这保证了数据的多样性,增强了生成器的表示能力。
在实验中,我们发现联合学习语义体和纹理体可以帮助生成更精细的三维几何。
结构
本文做的是迭代式的3D人脸重建。文章整体结构基于pi-GAN,通过分支结构让NeRF预测每个像素的语意,密度和纹理,从而构建出密集3D对齐的语意图,纹理图和密度图。进而可以通过逆映射(inversion)来编辑人脸(旋转,风格,局部变换)。这个编辑人脸是通过语义信息来进行的。
本文的大体流程是可以看到有三个输入,首先是原图图像输入,还有两个latent code Zt 和 Zs。将两个latent code解耦,经过Mapping网络映射成latent space。之后输入到生成器中。之后NeRF网络的输出有三个分支,分别是语意分支,密度分支,纹理分支,三个分支的输出都是点对点对齐的。最后通过体渲染得到语意图与合成图,进而用两个判别器分别做损失。
图的左边是NeRF生成器:
简单的回顾一下NeRF,输入三维信息和二维观察点,输出颜色信息和密度信息。从这个图中也能清楚的看到,这个密度分支只有三位位置信息有关,而颜色与三维信息和二维观测点有关。该网络结构与经典的NeRF不同的是,输出还有语义信息。
下面是颜色和语义信息的公式,跟NeRF是一模一样的。
细节分析
有两个东西Zt和Zs,这两个是latent code。
latent code一种降维或者说是压缩,旨在用更少的信息去表达数据的本质。上图是一个简单的encoder-decoder架构,如果把整个网络看成一个花瓶,最细的地方则称之为瓶颈。我们知道,压缩一般都是有损的,这里也不例外,但如果损失的是噪声或者是无用信息是我们最喜欢的了(这样就可以达到信息压缩的目的) 通过encoder压缩之后,更重要的是恢复,我们理应认为,能恢复的才算成功压缩了的,那么我们就可以认为这个latent space representation是真的表达出了input image中最关键的信息。潜在空间可以用少量的数据表示某一个(类)信息。
为什么要解耦呢?
为了更好的对数据进行分类或生成,需要对数据的特征进行表示,但是数据有很多特征,这些特征之间相互关联,耦合性较高,导致模型很难弄清楚它们之间的关联,使得学习效率低下,因此需要寻找到这些表面特征之下隐藏的深层次的关系,将这些关系进行解耦,得到的隐藏特征。
我们还利用映射网络将采样码映射到中间潜在空间W,并输出频率γ和相移β,通过特征线性调制控制发生器。这其实就是个解耦的过程。根据生成器MLP的层数,提供给每一层中的FiLM。这一步也是解耦过程。
我们引入了一种可学习的三维特征网格来补偿高频图像细节。 具体来说,为了预测二维视图方向为D的三维点X的颜色,我们通过双三次插值从特征网格中抽取一个局部特征向量ecoord,然后将其作为附加输入输入到颜色分支中。这个三维特证网络是可学习的,我们希望有一些共性的人脸的高频信号保存在grid里面。
回顾一下大致流程:
我输入原始图片,通过优化Ws和Wt来得到最终的人脸图片和人脸语义信息。之后,通过输入编辑后的带有语义信息的图片来优化Ws,获得编辑后的人脸图片和语义信息。
数据来源:
在我们的实验中,我们考虑了两个用于评估的数据集:Celebamask-HQ[23]和FFHQ[21]。 Celebamask-HQ包含30,000张来自Celeba[30]的高分辨率人脸图像,每个图像都有面部属性的分割掩码。 该模型的分辨率为512×512,包括皮肤、眉毛、耳朵、嘴巴、嘴唇等19类。FFHQ包含70,000张高质量的人脸图像,并利用BiseNet[51]对其进行语义分类。
损失函数