Introduction

关于肖像生成的方法,目前主要有两种,2D GANs和3D-aware GANs,两者各有擅长的方面。2D GAN可以生成高分辨率图像并具有很高的可编辑性,但是生成不同视图时的一致性很差,3D-aware GAN则相反,能生成一致性很高的视图,但是视图的分辨率和可编辑性不高

该文章主要目的是克服3D-aware GANs可编辑性不高的问题,但还是只能生成较低分辨率的图片

Method

方法的流程图如上,它与其他NeRF不同的地方在于,除了生成密度σ\sigma和颜色CC两个场,还要生成一个语义场SS,负责和密度场σ\sigma生成对应的mask

其中ZtZ_tZsZ_s以及相机的位置方向都是从高斯分布采样的,ZtZ_tZsZ_s都先通过一个Mapping网络,然后从NeRF中如图所示的位置输入进去,最后分别用三个mlp生成语义场SS、密度场σ\sigma和颜色场CC,然后使用NeRF中的体积渲染生成对应的mask和image,再输入到判别其中判断真假

需要注意的是,判别器DSD_S输入的是mask和image拼接后的tensor,DCD_C输入的只有image但是输出除了判断真假外,还会输出对于相机位置方向的预测

为了结果具有更多的高频信息,该网络的输入还有一个ecoorde_{coord},关于这部分论文讲的并不详细,看了代码才大致理解,应该是设置了一个可以训练的三维的tensor,然后用从光线上采样的点的位置,从这个tensor对应的位置使用三维的双线性插值采样,然后将采样后的值连起来做成的辅助编码,再将这个编码和相机方向拼接起来输入到网络中,不同的输入位置会有不同的结果,在后面的实验中会说到

Loss

LDc=Ezs,ztN,ξpξ[f(Dc(xc))]+EIpi[f(Dc(I))+λcDc(I)2]\begin{aligned} \mathcal L_{D_c}=&\mathbb E_{\mathbf z_s,\mathbf z_t\sim\mathcal N, \xi\sim p_{\xi}}[f(D_c(\mathbf x_c))]+\\ &\mathbb E_{\mathbf I\sim p_i}[f(-D_c(\mathbf I))+\\ &\lambda_c||\nabla D_c(\mathbf I)||^2] \end{aligned}

LDs=Ezs,ztN,ξpξ[f(Ds(xs,xc))]+EIpi[f(Ds(L,I))+λsDs(L,I)2]\begin{aligned} \mathcal L_{D_s}=&\mathbb E_{\mathbf z_s,\mathbf z_t\sim\mathcal N, \xi\sim p_{\xi}}[f(D_s(\mathbf x_s,\mathbf x_c))]+\\ &\mathbb E_{\mathbf I\sim p_i}[f(-D_s(\mathbf L,\mathbf I))+\\ &\lambda_s||\nabla D_s(\mathbf L,\mathbf I)||^2] \end{aligned}

LG=Ezs,ztN,ξpξ[f(Dc(xc))]+Ezs,ztN,ξpξ[f(Ds(xs,xc))]+λpξ^ξ\begin{aligned} \mathcal L_{G}=&\mathbb E_{\mathbf z_s,\mathbf z_t\sim\mathcal N, \xi\sim p_{\xi}}[f(D_c(\mathbf x_c))]+\\ &\mathbb E_{\mathbf z_s,\mathbf z_t\sim\mathcal N, \xi\sim p_{\xi}}[f(D_s(\mathbf x_s,\mathbf x_c))]+\\ &\lambda_p||\hat\xi-\xi|| \end{aligned}

上式中,f(t)=log(1+exp(t))f(t)=-\log(1+\exp(-t))λc,λsλp=10\lambda_c,\lambda_s\lambda_p=10I\mathbf IL\mathbf L分别是真实图片和真实语义图,ξ^\hat\xi是通过判别器预测的相机参数,取样时相机的位置位于一个球体的表面,方向指向球体的中心

Result

数据集使用了CelebAMask-HQ和FFHQ,CelebAMask-HQ本身有对应的mask,FFHQ则使用BiseNet进行预测

与π-GAN的比较。π- GAN无法学习精确的几何形状(如面部边界、头发、背景),并遭受了严重的伪影。

语义图与SofGAN在极端姿态下的比较。SofGAN在极端姿态时做出错误的语义标签,导致合成图像中有不一致的伪影。

Applications

风格混合,随机采样两组编码(Zt1,Zs1),(Zt2,Zs2)(Z^1_t, Z^1_s), (Z^2_t, Z^2_s),然后做插值输入到网络中的结果,证明了解纠缠面部表征的有效性。

3D反演,可以很清晰得看出2D GAN和3D GAN的区别,该方法有很好的一致性

同时该方法也支持和stylegan一样的风格混合以及风格迁移,并能在风格迁移后保持有一定的一致性

本文最主要的目的就是能支持对3D的编辑,它使用的方法是对语义图进行操作,因为在训练时保持了语义图与图像的高度对齐,所以对语义的操作通过反演会体现在生成的图像上

总结

读过这篇论文后,我想起来之前看过的一篇2D GAN编辑的论文,不同于一般StyleGAN那样对latent code的编辑,也是编辑对应的语义图,通过与图像高度对齐的性质,对生成的图像进行一定程度的编辑,这说明一些2D的方法可以扩展到3D上

这篇论文不足的地方也很明显,首先是不能生成高分辨率的图像,其次生成的图像中,不论是编辑还是风格迁移等等应用,最后的结果感觉都缺少高频的信息,该方法中所运用的ecoorde_{coord}可能能起到一定的补充高频信息的作用,但是这个问题还是在结果中普遍存在