StyleRig: Rigging StyleGAN for 3D Control over Portrait Images

1. 简介

文章《StyleRig: Rigging StyleGAN for 3D Control over Portrait Images》发表于CVPR2020,讲述了一种操控styleGAN生成我们想要的人脸图像的方法

1.1 motivation

  1. styleGAN可以生成逼真的人脸图像,但是缺乏姿态,表情,光照等属性的可控性,因为这些属性在latent code space都是高度耦合的
  2. 一般的3DMM方法进行三维人脸重建后,渲染出的图像不真实,并且缺乏人脸的其它部分,比如头发,嘴巴内部,背景等
  3. 有许多感性的损失,能帮助我们重建更加真实的人脸图像,但是对于真实感人脸渲染来说却没有帮助
  4. 一般的三维人脸重建都没有怎么考虑头发、背景等的建模

2. 方法

本文的流程大致分为两个步骤,即先进行DFR的训练,再进行RigNet的训练

2.1 DFR训练

这一部分称作Differentiable Face Reconstruction(DFR),具体是干啥呢,看下面画的一个图:
dfr

  1. 其中的w就是styleGAN的latent code,Iw就是通过styleGAN生成的图像,一开始我们有许多这样的配对的数据,用于接下来的训练
  2. 其中的p我们就可以假定为w所对应人脸的3DMM系数,而如何从w去得到这个3DMM系数呢,作者就设计了DFR这个映射网络
  3. p通过可微分渲染,能够得到合成人脸图像Sw,比较Iw与Sw的差异,就能将误差反向传播至DFR,优化好这个DFR网络了

其中的损失函数为
render
phot
land
第一个就是简单的像素差异比较,当然得是人脸对应的部分,而不是背景等部分,于是加入了个遮罩M进行剔除;第二个是landmark比较,用于修正人脸的角度。最终的一个效果如下所示:
duibi
分别是Sw与Iw

2.2 RigNet训练

现在为止,我们有的是w到p的一个映射关系,但是我们的目的是通过p来操控w,从而达到操控styleGAN去生成我们想要的人脸的目的。所以我们还需要一个p到w的映射关系,但是这个映射关系不是简单的输入p,得到w,而是输入p和w,生成 w ^ \hat{w} w^,记作
rignet
而这个RigNet内部包含一个编码器和解码器,其中

  1. 编码器:将输入的w看作是 18 ∗ 512 18*512 18512的向量,记作w1-w18,将他们编码成18*32的低维向量,记作l1-l18
  2. 解码器:将编码的l1-l18分别都给拼接上p的子集(我们想要改变的部分,比如3DMM的旋转参数),再经过解码器得到d1-d18,这些d再加上开始的w得到最终的 w ^ \hat{w} w^

至于为啥这样做,个人认为关键点在于把l1-l18分别都给拼接上p这一步骤,因为我们可以认为l1-l18这18个特征编码都或多或少地控制着人脸的不同特征,彼此之间并非解耦,那么我把相同的p都分别给他们拼接上,其实并不算是一种浪费。后面应该是通过解码网络,来调节p在这18个维度里分别造成的不同影响,最终反映为w的残差。
了解了RigNet的内部,再来看看他是怎么训练的,用了三个损失函数:

2.2.1 重建损失

rec
这里的F指的就是DFR那里w到p的映射,结合DFR那里那张图我们其实很容易理解这个重建损失:w经过DFR得到对应的p,那么我再使用RigNet把p给变回 w ^ \hat{w} w^之后, w ^ \hat{w} w^和w肯定得相同才对啊,于是得到这样的损失函数。

2.2.2 编辑损失和一致性损失

这俩损失有点绕,结合流程图可以方便理解:
edit
这俩损失分别对应右上角与右下角,我们来梳理下具体流程:

  1. 我先取俩styleGAN的latent code,分别为v与w,得到两张图像,对应右上角与右下角
  2. v经过DFR得到pv,w经过DFR得到pw(图中未体现),不出意外的话pv和pw应该不一样,因为他们分别控制不同图像的人脸属性,而从另一个角度来说,pv可以看做pw进行了某项属性的改变后的结果
  3. 我将pv的一个子集(比如控制旋转的部分)与w丢入RigNet得到 w ^ \hat{w} w^,然后再将 w ^ \hat{w} w^经过DFR得到 p ^ \hat{p} p^
  4. 自然, p ^ \hat{p} p^我希望旋转部分是尽可能与pv一致的,而其它部分尽可能与pw一致,但是MoFA这篇论文(《MoFA: Model-based Deep Convolutional Face Autoencoder for Unsupervised Monocular Reconstruction》ICCV2017)显示直接比较俩3DMM系数的差异得出的结果并不好
  5. 于是本文采取的方法是:替换pv中的控制人脸旋转的部分为 p ^ \hat{p} p^中相应的部分,得到 p e d i t p_{edit} pedit,进行可微渲染得到图像,该图像与Iv进行差异的比较,损失函数记为
    edit
    注意这里的损失函数和DFR那里的损失函数一样,只不过是替换了不同的I和p!因为我们想的是 p ^ \hat{p} p^的旋转部分和pv一致,那么替换pv中旋转部分为 p ^ \hat{p} p^中的对应值得到 p e d i t p_{edit} pedit后,pv与 p e d i t p_{edit} pedit应该八九不离十,所以才有了上面的损失,但是也有值得注意的 一点,这个损失并非比较的是pv与 p e d i t p_{edit} pedit经过相同的渲染方式渲染后的结果(按理说我觉得这样做会更加直接与简明一点)
  6. 与之类似,我将pw中替换非旋转部分,那么就有了如下类似的损失,称之为一致性损失:
    cons
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>