标题:FENeRF: Face Editing in Neural Radiance Fields
链接:https://arxiv.org/pdf/2111.15490
本文做的是迭代式的3D人脸重建。文章整体结构基于pi-GAN,通过分支结构让NeRF预测每个像素的语意,密度和纹理,从而构建出密集3D对齐的语意图,纹理图和密度图。进而可以通过逆映射(inversion)来编辑人脸(旋转,风格,局部变换)。
模型结构
虽然看着大不一样,但文中基础模块都是照搬的pi-GAN:使用基于siren的网络做NeRF空间,然后使用单独的mapping网络来将纹理和形状隐码转换到适合网络的空间后输入网络。其中形状隐码直接输入整个网络而纹理隐码只输入颜色分支。
其中有一点不同的是作者还从图像中提取了一个基于3D像素的特征输入颜色分支,说是可以加强颜色细节。
可以很清楚的看到,NeRF网络的输出有三个分支,分别是语意分支,密度分支,纹理分支,三个分支的输出都是点对点对齐的。最后通过体渲染得到语意图与合成图,进而用两个判别器分别做损失。
损失函数
(这里作者只列了式子,并没有详细介绍,因此只能连蒙带猜)
本文的损失函数分为三个部分,分别针对语意判别器,图像判别器,和生成器G。
针对有最小化语意坐标与纹理坐标的距离损失,以及用于判断语意图和真实图片是否是正确的对抗损失,和一个梯度惩罚项(应该是为了避免模式崩溃)
针对有判断输出图像是否真实的对抗损失,和一个梯度惩罚项
针对G有两个判别器分别产生的对抗损失,以及用于将3D脸对齐到基准姿势的相机位姿修正损失
实验
文章开头就提到,这个模型最终的目的是使得得到的3D人脸可编辑,但模型中似乎只是多提取了个语意图而已,到底怎么编辑呢?这里就用到了一种名为反演(inversion)的技巧,即给定一个GAN模型和真实图像,要求找到GAN的隐空间中这张图像对应的那组latent code,使用这组latent code就可以使得GAN生成一张和真实图像非常相似的图片。进而可以通过改变这寻找到的latent code来调整生成图像的各种特征。而文中引入了语意图真是希望借此来改变图像中的各个特征。
比如下图:
作者可以通过直接修改语意图,然后让网络反演出对应的形状隐码,然后再将形状隐码与真实图像的纹理隐码一起输入网络,生成符合对应语意图的人脸图像,最终得到这些特征被改变过的图像。
个人想法
对于图像反演我这还是第一次接触到,因此本文阅读多有困难,需要进一步补充知识。但另外有一点值得吐槽的是,这篇文章的对比实验实在是有些问题,比如图5
作者说sofGAN的语意图预测错误,且有的图左右眼不对称,但自己的FENeRF用的根本不是人家的困难样本,而是另外挑了不同的样本测试,这能证明个什么玩意?
另外,图11中:
作者想要通过消融实验证明他的基于3D像素的特征是有效的,但问题是他三个消融实验又用的不是同一个样本,这咋对比。
另外,关于反演怎么做,文章中提都没提,但这明明是支持文章图像可编辑性的至关重要的技术,操作起来也并没有那么简单,不知道咋想的。
总而言之,个人感觉槽点颇多。