您现在的位置是:首页 >技术交流 >DiffusionRig: Learning Personalized Priors for Facial Appearance Editing网站首页技术交流
DiffusionRig: Learning Personalized Priors for Facial Appearance Editing
论文作者:Zheng Ding,Xuaner Zhang,Zhihao Xia,Lars Jebe,Zhuowen Tu,Xiuming Zhang
作者单位:UC San Diego;Adobe
论文链接:paper
代码链接:code
发表于2023 CVPR
论文简介
作者团队解决了一个问题:从特定人物的小批量数据集(大约20张左右)学习到个性化的先验信息,从而允许模型(DiffsuionRig)对特定人物在保持个性轮廓信息、细粒度信息的同时进行更细致的人脸编辑包括光照、表情等。具体来说,DiffusionRig是一种基于扩散模型的方法,其模型是由从现有图像估计的简化的3D面部模型条件化或“装配”的。DiffusionRig首先从大规模面部数据集中学习通用的面部先验知识,然后从感兴趣人物的少量肖像照片集合中学习个体特定的先验知识。通过使用这种个性化的先验知识来学习从计算机生成的图像到照片之间的映射,DiffusionRig可以在保留个体身份和其他高频特征的情况下,对肖像照片进行“装配”,包括光照、面部表情、头部姿态等。
引言
在进行人脸编辑的时候,如果我们有一个高度解耦的数据分布的话,就可以很好地对光照、表情、头部动作进行控制,而3DMM模型提供了这样的一个条件。在论文中,作者采用了DECA作为3D face estimators,但是直接对DECA的输出结果进行渲染,结果会如图1中的第2列所示,损失的大量的id信息和细节信息,且结果较为粗糙,且DECA无法对发型、配饰进行建模,而最近Diffusion大火,其具有生成高质量图片的能力,且允许加入控制条件来引导图片的生成。为了很好地利用DECA和Diffusion,作者提出了‘DiffusionRig’。模型框架如下图:
其中:
前三列是DECA的输出结果,第四列是输入数据,第五列是输入数据经过阶段1的结果,倒数第二列是输入数据在其自身的小批量数据集微调后的的结果。可以看出,经过‘个人相册’的微调后,模型学习到了很多个性化、细节化的特征,可以很好地重建图片。
模型框架:
-
第一阶段:在大数据集合上面学习总体先验信息,让模型具备生成高质量人脸的能力。具体来说,第一阶段的训练数据集是FFHQ(70000张图片),首先将数据经过DECA进行Physical Buffers的提取,同时将图片经过一个encoder(resnet-18)进行全局特征的提取,随后,将Physical Buffers与同样尺度的噪声图进行拼接,并加入控制条件送入扩散模型之中,在扩散模型的每一层注入全局特征信息。注入全局特征信息是为了让模型提取到发型、配饰等特征信息。在这里,作者提到,被提取的全局信息中可能也包含了Physical Buffers中的一些信息,可能会造成模型直接忽略了Physical Buffers。但实验过程并没有出现这样的结果,作者给出的解释是:Physical Buffers中特征信息与原图像是像素对齐的,模型可以很轻易地进行学习,因此,模型忽略了全局特征中的这部分信息。(Physical Buffers–就是图二中的前三列)
-
第二阶段:fixed第一阶段用于提取全局特征的encoder,在个人相册上进行模型的训练。
训练细节
在第一阶段,作者在FFHQ数据集上训练DiffusionRig,该数据集包含70000张图像。使用Adam (学习率为10e-4)作为优化器,作者对DiffusionRig进行50000次迭代,批量大小为256(因此模型看到的样本总数为12800000)。在第二阶段,作者只使用一个人的10-20张图像。在下文中,展示了四个名人,名人(奥巴马,拜登,斯威夫特和哈里斯)和两个非名人。在每个小数据集上对模型进行了5000次迭代,批量大小为4(因此在微调期间看到的样本总数为20,000)。且第二阶段的学习率降低到10e-5,让模型能学习到更细粒度的特征。第一阶段的训练使用八个A100 GPU需要大约15个小时,第二阶段的微调在单个V100 GPU上在30分钟内完成。
全局特征的注入:根据附录上所述,全局特征的注入应该是采用类似于AdaIN算法。
对不同个性化模型进行交叉,结果表明每个微调后的个性化模型都保留这其各自的id信息:
训练
- 第一阶段在FFHQ上进行训练,我直接采用了作者训练好的模型
- 第二阶段在个人相册上进行训练,
由于没有合适的个人相册,所以我截取了一段说话的视频作为个人相册
训练完后直接推理
python scripts/inference.py --source 000702.png --target vera-198.jpeg --output_dir output
--modes pose --model_path /root/autodl-tmp/code/JM/diffusion-rig/log/stage2/model005000.pt
--meanshape source_data/personal_deca.lmdb/mean_shape.pkl --timestep_respacing ddim20
其中source为你想要编辑的图片,你可以从target中提取‘light’、‘pose’、‘expression’参数作为全局特征注入到source中去,根据你所训练的模型,有256×256、512×512两种分辨率。
输入source:
target:
选择pose转换(看到这个结果的时候,我的心情和这个表情一模一样的):
结果并不好呀,我把很大一部分原因归结于个人相册没有做好,在论文中,作者所构建的个人相册是:
论文所使用的个人相册有很多类型包括不同光照不同姿势和表情,故个人相册的影响很大,其次,模型是在FFHQ上面就行训练的,模型在问世之前只见过大头像,如果输入图像包含着肩膀等以下部位,可能会造成意想不到的结果,最后一点造成结果不好的原因就是,人脸域的问题,FFHQ是外国人脸数据集,如果输入为中国人脸的话,可能会因为人脸域的不同而影响输出结果。
又试了一下哎,截了大头图,source和target如图所示:
source小姐姐是Diffusion生成的,截了个头部
*
改变Pose、Light、expression的结果别如下: