作者Hang Zhou 香港中文大学
多视角人脸合成技术,自监督模型

摘要:

仅使用野外单视图图像合成真实旋转人脸
key point: 3D空间中旋转并将其重新渲染至2D平面。

1.介绍

传统方法都采用了3DMM,困难是当旋转3D-fitted人脸时会有invisible区域。过去研究者普遍通过对称编辑和不可见区域充填(symmetric editing and invisible region filling)来解决该问题。这种充填方法会引入伪影(visible artifacts)导致结果并不真实。

基于重建的方法会丢失局部细节 eg.人脸纹理和形状(facial textures and shapes),这又导致了身份信息的混乱(confusion of identity information)。基于重建的方法最显著的缺点是必须提供同一个人多视图数据作为直接监督。(作者温馨小提示:Multi-PIE和300W-LP是好用的多视角数据集~)这个缺点造成的结果是训练结果无法泛化并且图像分辨率低于128*128。

提出了本文是一种仅使用单视图图像来合成任意角度的旋转人脸,缺点呐就是细节和身份信息在编码过程有丢丢退化了,作者就强烈建议了keep as much known information about the given face as possible with 3D model.[emmm, 大概可能也许是你提供比较多的3D人脸信息,退化就比较少了?一脸困惑?!]

key insight!!! 通过在3D空间内旋转人脸并重新渲染到2D平面作为自监督。使用了3DDFA和neural renderer。
一个姿态为PaP_{a}Pa​的人脸将其3D-mesh旋转至任意姿态PbP_{b}Pb​,然后将其渲染到2D空间获得2D渲染图像RdbRd_{b}Rdb​。随后我们使用RdbRd_{b}Rdb​提取的纹理将它旋转至原始位置并渲染至Rda′Rd_{a'}Rda′​。最后,使用了图像到图像的转换网络(image-to-image translation network)填充了不可见部分,并将渲染的图片映射至真实图像域。好处是GAN可以修复遮挡的部分,原有的局部纹理信息被保留下来。

主要贡献:
(1). 可用于野外场景的无监督Rotate-and-Render框架,无需成对数据和标签
(2). 使用image-to-image translation network将不完整的渲染图像转为真实图像
(3). 验证结果在strong baseline models依然适用于大规模人脸识别

2.相关工作

2.1 Face Rotation and Multi-View Synthesis

人脸旋转目的是给定单个人脸图像合成多视角人脸图像,在当前研究工作中,大多研究了正面人脸。

基于重建的方法:DRGAN首次使用GAN利用encoder-decoder结构生成正面人脸,不使用多视图,有伪影。TP-GAN使用全局和局部网络,利用multi-task learning strategy生成正面人脸。CAPG-GAN使用了face heatmap指导生成多视图人脸。共同点是都用了Multi-PIE数据集,这样就会导致只适用于该数据集环境,不易推广。FNM结合了有标签数据和无标签数据,生成MultiPIE-like正面人脸。

基于3D几何方法:FF-GAN将3DMM系数的回归集成至网络。UV-GAN使用image-to-image translation完成UV-map,与本文类似。HF-PIM利用人脸纹理图和对应场实现高质量正面人脸。需要成对数据进行训练。

2.2 Image-to-Image Translation

图像到图像转换的目的是将来自于不同模态(modality)或者域(domain)的输入图像转换为相应的输出图像。其核心思想是通过编码器-解码器体系结构和低级连接直接预测像素值。

无监督image-to-image translation的循环一致性(cycle consistency):CycleGAN使用非成对数据。GANimation无监督生成动画。该论文采用了Cycle consistency思想,区别是其他论文专注于训练神经网络进行跨域映射,该论文操作时off-line。
(Question:mapping across domain与off-line的区别?)

Inpainting with GAN:利用GAN进行了图像平移和修复操作。

3.本文方法

三部分组成:3D人脸拟合,训练数据准备的旋转和渲染策略(rotate-and-render strategy for training data preparation),render-to-image translation module。

3.1 3D人脸模型和渲染
3D人脸拟合依赖于给定人脸进行粗略的3D参数拟合。
给定具有n个顶点的3D人脸模型一个定义,人脸的形状预测V=[v1,v2,...,vn]V=[v_1,v_2,...,v_n]V=[v1​,v2​,...,vn​]表示器顶点在3D空间vi=[xi,yi,zi]Tv_i=[x_i,y_i,z_i]^Tvi​=[xi​,yi​,zi​]T的正则化位置。3D形状在2D图像上的投影可以写为
∏(V,P)=f∗pr∗R∗V+h2d,(1)\prod(V,P)={f}*{p_r}*R*V+h_{2d},(1)∏(V,P)=f∗pr​∗R∗V+h2d​,(1)
其中∏\prod∏时将模型顶点映射到其2D位置的投影函数。矩阵乘法用“∗*∗”表示。fff是比例因子,prp_rpr​是正交投影矩阵,R是旋转矩阵,h2dh_{2d}h2d​是2D位移。这里,将定义的所有与投影相关的参数视为面部相对姿势P={f,R,h2d}P=\{f,R,h_{2d}\}P={f,R,h2d​}的联合表示。

获取纹理将完整的3D表示转换到2D空间时,纹理扮演了重要角色。对于每个顶点viv_ivi​在彩色脸上存在这关联的纹理ti=[ri,gi,bi]Tt_i=[r_i,g_i,b_i]^Tti​=[ri​,gi​,bi​]T。我们使用最简单的垂直投影从原始图像III中获得顶点颜色。每个顶点的颜色可以写成:
ti=I(∏(vi,P)),(2)t_i=I(\prod(v_i,P)),(2)ti​=I(∏(vi​,P)),(2)
其中∏(vi,P)\prod(v_i,P)∏(vi​,P)是顶点viv_ivi​的投影2D坐标。我们可以获得所有相关的纹理T=[t1,...,tn]T=[t_1,...,t_n]T=[t1​,...,tn​]。这个过程可以由图3来描述。我们将统一获取纹理的整个过程参考:
T=GetTex(I,{V,P}),(3)T=GetTex(I,\{V,P\}),(3)T=GetTex(I,{V,P}),(3)
由于正交矩阵PrP_rPr​,投影结果∏(V,P)\prod(V,P)∏(V,P)与顶点z坐标无关。对于2D空间上每个位置(xj,yj)(x_j,y_j)(xj​,yj​),在3D空间的线{x=xj和y=yj}\{x=x_j和y=y_j\}{x=xj​和y=yj​}可能存在多个旋转顶点,为他们分配相同的纹理。对于所有vk∈{v∣(xj,yj)=∏(vk,P)}v_k\in\{v|(x_j,y_j)=\prod(v_k,P)\}vk​∈{v∣(xj​,yj​)=∏(vk​,P)},只有z轴值最大的最外面的一个可以获得正确的纹理。它的指数是
Kj=arg max⁡k([0,0,1]∗vk),(4)K_j=\argmax_{k}([0,0,1]*v_k),(4)Kj​=kargmax​([0,0,1]∗vk​),(4)
其余的实际上是由于2D空间中的遮挡而不可见的顶点。我们保留了获取的纹理,并将其视为我们要处理的人工伪影。
渲染给定人脸{V, P, T}的一组3D表示,渲染就是将其映射到2D空间并生成图像。渲染过程与获取纹理相反,如图3(b)所示。与等式4相同,已知KjK_jKj​是给定二维点(xj,yj)(x_j,y_j)(xj​,yj​)的最外层顶点的索引。渲染的彩色图像Rd可以计算为:
Rd(xj,yj)={T{Kj},∃Kj∈N,0,∄Kj∈N.(5)Rd(x_j,y_j)=\left\{ \begin{aligned} T\{K_j\}, \exists K_j \in N, \\ 0, \not\exists K_j \in N. \\ \end{aligned} \right. (5)Rd(xj​,yj​)={T{Kj​},∃Kj​∈N,0,​∃Kj​∈N.​(5)
最后,我们将整个渲染过程表示为
Rd=Render({V,P,T})。(6)Rd=Render(\{V, P, T\})。(6)Rd=Render({V,P,T})。(6)
使用开源Neural Mesh Renderer来执行渲染,无需任何训练。

3.2 旋转和渲染训练策略
目标是用正确的纹理填充不可见的顶点,以获得另一个面部视图。
提出了一个简单的策略来创建训练对称为旋转渲染(R&R)由两个旋转渲染操作组成。关键思想是创建因将遮挡的面部表面旋转到前方而产生的伪影。因此,利用自监督来训练网络,流程如图4。

给定输入图像IaI_aIa​,我们首先利用一个3D人脸拟合模型获得3D模型参数:
{V,Pa}=Fitting(Ia),(7)\{V, P_a\}=Fitting(I_a),(7){V,Pa​}=Fitting(Ia​),(7)
其中a表示该人脸在2D空间的当前视图,Pa={f,Ra,h2d}P_a=\{f,R_a,h_{2d}\}Pa​={f,Ra​,h2d​}。其顶点的纹理可求为:
Ta=GetTex(Ia,{V,Pa})。(8)T_a=GetTex(I_a,\{V, P_a\})。(8)Ta​=GetTex(Ia​,{V,Pa​})。(8)
然后我们通过将RaR_aRa​与另一个旋转矩阵RrandomR_{random}Rrandom​相乘,将该人脸的3D表示旋转到另一个随机2D视图b,得到Pb={f,Rb,h2d}P_b=\{f,Rb,h_{2d}\}Pb​={f,Rb,h2d​}。并且我们渲染当前的3D表示为Rdd=Render({V,Pb,Ta})Rd_d=Render(\{V, P_b, T_a\})Rdd​=Render({V,Pb​,Ta​})。这就完成了第一个旋转和渲染操作。
在种情况下可以获得另一组纹理:
Tb=GetTex(Rdb,{V,Pb})。(9)T_b=GetTex(Rd_b,\{V, P_b\})。(9)Tb​=GetTex(Rdb​,{V,Pb​})。(9)
我们发现在视图b下纹理正确的顶点集(Q:如何判断纹理正确???)是在视图a下纹理正确的顶点集的子集。因此,这里无需有监督,采用了以TbT_bTb​为输入来恢复TaT_aTa​。
具体的说,旋转3D位置下的PbP_bPb​到PaP_aPa​,并将其渲染至原始2D位置,利用如下公式:
Rda′=Render(V,Pa,Tb)。(10)Rd_{a'}=Render({V,P_a,T_b})。(10)Rda′​=Render(V,Pa​,Tb​)。(10)
其中Rda′Rd_{a'}Rda′​基本上是通过在2D空间将人脸从视图b旋转至a而产生的伪影的渲染图像。通过这种方式,我们获得了用于训练的输入/真实对{Rda′,Ia}\{Rd_{a'}, I_a\}{Rda′​,Ia​}。

3.3 渲染到图像生成
为了消除伪影并将渲染图像RdbRd_bRdb​和Rda′Rd_{a'}Rda′​从渲染域映射到真实图像域,我们建议渲染到图像生成模块使用生成器G创建Fa′=G(Rda′)F_{a'}=G(Rd_{a'})Fa′​=G(Rda′​)和Fb=G(Rdb)F_b=G(Rd_b)Fb​=G(Rdb​),如图5所示。

生成器G采用了CycleGAN。多层判别器和感知损失采用Pix2PixHD。判别器损失函数包括对抗性损失:
LGAN(G,D)=EI[logD(Ia)]+ERd[log(1−D(G(Rda′)))]。(11)L_{GAN}(G, D)=\mathbb{E}_I[logD(I_a)]+\mathbb{E}_{Rd}[log(1-D(G(Rd_{a'})))]。(11)LGAN​(G,D)=EI​[logD(Ia​)]+ERd​[log(1−D(G(Rda′​)))]。(11)
和一个特征匹配损失。特征匹配损失由多层判别器提取特征并规则化输入和生成图像之间的距离来实现。对于输入III,我们使用FD(i)(I)F^{(i)}_D(I)FD(i)​(I)来表示从鉴别器第iii层提取的特征。对于全部NDN_DND​层,特征匹配损失可以写为:
LFM(G,D)=1ND∑i=1ND∣∣FD(i)(Ia)−FD(i)(G(Rda′))∣∣1。(12)L_{FM}(G, D)=\frac{1}{N_D}\sum_{i=1}^{N_D}||F_D^{(i)}(I_a)-F_D^{(i)}(G(Rd_{a'}))||_1。(12)LFM​(G,D)=ND​1​i=1∑ND​​∣∣FD(i)​(Ia​)−FD(i)​(G(Rda′​))∣∣1​。(12)
感知损失通过使用ImageNet预先训练的VGG网络来实现。它用于正则化生成结果和生成的身份。感知损失与LFML_{FM}LFM​非常相似,其特征由Fvgg(i)F^{(i)}_{vgg}Fvgg(i)​表示,损失函数为:
Lvgg(G,D)=1Nvgg∑i=1Nvgg∣∣Fvgg(i)(Ia)−Fvgg(i)(G(Rda′))∣∣1。(13)L_{vgg}(G,D)=\frac{1}{N_{vgg}}\sum_{i=1}^{N_{vgg}}||F^{(i)}_{vgg}(I_a)-F^{(i)}_{vgg}(G(Rd_{a'}))||_1。(13)Lvgg​(G,D)=Nvgg​1​i=1∑Nvgg​​∣∣Fvgg(i)​(Ia​)−Fvgg(i)​(G(Rda′​))∣∣1​。(13)
最终的目标函数可以写为:
Ltotal=LGAN+λ1LFM+λ2Lvgg。(14)L_{total}=L_{GAN}+\lambda_1L_{FM}+\lambda_2L_{vgg}。(14)Ltotal​=LGAN​+λ1​LFM​+λ2​Lvgg​。(14)
在测试过程,目标输出可以通过分配目标视图PcP_{c}Pc​来形成Rdc=Render({V,Pc,Ta})Rd_c=Render(\{V,P_c,T_a\})Rdc​=Render({V,Pc​,Ta​}),并将渲染RdcRd_cRdc​送入训练过的生成器G。

3.4 构建块详细信息
3D拟合工具 旋转的3D人脸模型是3D Morpohable Model (3DMM)。它的平顶矩阵V可以表示为S=[v1T,v2T,...,vnT]TS=[v_1^T, v_2^T, ..., v_n^T]^TS=[v1T​,v2T​,...,vnT​]T。它对3D人脸的描述是基于PCA的:
S=S‾+Aidαid+Aexpαexp。(15)S=\overline{S}+A_{id}\alpha_{id}+A_{exp}\alpha_{exp}。(15)S=S+Aid​αid​+Aexp​αexp​。(15)
这里S‾\overline{S}S是平均形状,AidA_{id}Aid​和AexpA_{exp}Aexp​分别是身份ID和表情的主轴。
使用3DDFA的开源实现和预先训练的模型来进行3D人脸拟合。这是一个基于深度学习的模型,用于从单个2D人脸图像回归参数[PT,αid,αexp][P_T,\alpha_{id},\alpha_{exp}][PT​,αid​,αexp​]。因此,可以预测人脸的3D形状及其在2D空间{V,P}中的相对位置。请注意,这里没有训练3DDFA。它的使用仅限于快速应用,其在三维形状预测中的未对准会给最终结果带来影响。另一种方法是使用身份标签调整3D模型。然而,在完全无监督的情况下,我们建议使用一种新的腐蚀预处理来解决这个问题。

预渲染和腐蚀 由于3D拟合方法的不精确性,错误拟合的顶点的投影有时位于面的真实边缘之外。当这种3D未对齐发生时,背景像素将被分配给这些顶点。在旋转和渲染过程中,那些错误获取的纹理将被渲染到旋转的RdbRd_bRdb​(参见图6左栏)。然而,这样的伪影很难通过旋转和渲染过程直接在Rda′Rd_{a'}Rda′​上创建,这意味着它们不存在于训练输入-输出对中。因此,生成器不能处理它们。
解决这一问题的方法是将拟合的3D表示、V,Pa,Ta、{V,P_a,T_a}、V,Pa​,Ta​预渲染到Rda0Rd_{a0}Rda0​,并将渲染的图像侵蚀某些像素。侵蚀是基于所有顶点的平均颜色的V的投影边来执行的。然后将纹理TaT_aTa​更新为
Ta=GetTex(erode(Rda),{V,Pa})。(16)T_a=GetTex(erode(Rd_a), \{V, P_a\})。(16)Ta​=GetTex(erode(Rda​),{V,Pa​})。(16)
因此RdbRd_bRdb​只能包含Rda′Rd_{a'}Rda′​中存在的伪影。侵蚀后的输出可见图6。

4.实验过程

4.1 实验设置
实施细节 首先对所有数据集运行3DDFA,以获得所有图像的参数{V,P}。在已知V的情况下,能够知道人脸的关键点,并根据人脸的眼睛中心和鼻子进行人脸对齐。生成器G包含4个下采样块和4个上采样块以及9个残留块。对所有层应用Spectral Normalization和Batch Normalization。鉴别器由两个scales组成。
模型使用Pytorch在8个配备16 GB内存的Tesla V100 GPU上进行培训。两块图形卡用于渲染,另一块用于训练。旋转一张图像的时间约为0.1秒。权重λ1和λ2都设置为10。

数据集 CASIA-WebFace和MS-Celeb-1M被选为渲染到图像模块和人脸识别网络的训练集。具体来说,采用了在ArcFace中清理的名为MS1MV2的版本。在标准的LFW、IJBA(在视频中包含个人脸)和MegaFace 100万挑战上进行了测试。MegaFace是评估人脸识别结果的最具挑战性和应用最广泛的数据集。

4.2 定性结果
(1)基于3D方法的比较
(2)基于GAN方法的比较
(3)数值结果

4.3 人脸识别结果
人脸识别设置 使用了ArcFace和标准的ResNet18主干,用于人脸识别。给出了在CASIA和MS1MV2上训练的结果。提出了一种不同的方法来使用正面化数据来提高人脸识别的性能,方法是用我们生成的3D数据来扩充原始数据集。然后根据扩充的数据集对网络进行训练。
量化结果

4.4 消融研究
用相同的参数集和训练策略另外训练相同的网络,缺少(1)VGG损失;(2)使用多尺度鉴别器和特征匹配损失。在原始的Pix2Pix文件中将其更改为PatchGAN。在图像级别上增加了额外的L1损失用于正则化。
定量结果:利用FID度量生成图像域和真实图像域之间的距离。
定性结果

5.结论

自监督是本文的关键,采用了一个固定角度的人脸通过映射到任意角度姿势的3D人脸后旋转并渲染回原来角度的人脸形成自监督。优点:1)不需要多视图,不需要成对数据,不需要任何标签(包括身份信息)。2)单视图可以旋转到任意想要的角度,并非只有正面。3)保持了细节和光照条件。 4)可用于扩充数据集。

读后小结。
无需成对数据,保留纹理和身份信息。

CVPR2020 Rotate-and-Render: Unsupervised Photorealistic Face Rotation from Single-View Images论文笔记相关推荐

  1. ICCV 2017 《Unsupervised Learning from Video to Detect Foreground Objects in Single Images》论文笔记

    本学弱喜欢在本子上记笔记,但字迹又丑. 望看不懂我的字的大佬不要喷我,看得懂的大佬批评指正.

  2. 【论文笔记】Unsupervised Deep Embedding for Clustering Analysis(DEC)

    [论文笔记]Unsupervised Deep Embedding for Clustering Analysis(DEC) 文章题目:Unsupervised Deep Embedding for ...

  3. 论文笔记:DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs

    论文笔记:DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs co ...

  4. 论文笔记:Evolving Losses for Unsupervised Video Representation Learning

    Evolving Losses for Unsupervised Video Representation Learning 论文笔记 Distillation Knowledge Distillat ...

  5. Unsupervised Monocular Depth Estimation With Left-Right Consistency 论文笔记

    文 | 陈十三 公众号首发 | 一只在路上的哈士奇 公众号ID | super_Mrchen 关注可了解更多.问题或建议,请公众号留言 0x00 补充知识 1.视差:左右双目图像中,两个匹配块中心像素 ...

  6. 【KGE】RotatE Knowledge Graph Embedding by Relational Rotation in Complex Space

    1. 前言 论文链接:https://openreview.net/forum?id=HkgEQnRqYQ github:https://github.com/DeepGraphLearning/Kn ...

  7. [论文笔记]Arbitrary-Oriented Scene Text Detection via Rotation Proposals

    Arbitrary-Oriented Scene Text Detection via Rotation Proposals 论文地址:https://arxiv.org/abs/1703.01086 ...

  8. 【论文笔记】—本征图像分解—Unsupervised—USI^3^D—2020-CVPR

    [论文介绍] 提出了第一个基于物理的单图像无监督学习用于本征图像分解网络USI3D(Unsupervised Single Image Decomposition) 本征图像,是指将一幅图像分解成两个 ...

  9. Photorealistic Face de-Identification by AggregatingDonors’ Face Components论文阅读笔记

    题目:Photorealistic Face de-Identification by AggregatingDonors' Face Components 摘要: 随着普遍监控系统的采用和高效的自动 ...

  10. 论文笔记:An Adaptive Feature Norm Approach for Unsupervised Domain Adaptation

    论文链接 最近把毕业论文的题目确定了,这个专栏专门放相关论文的阅读笔记,个人理解可能有限,欢迎大家指正! 标题理解 阅读论文之前,首先对标题进行一定的理解,才能更好的理解论文的内容. 论文完整标题为: ...

最新文章

  1. uni-app 之 使用扩展组件(uni ui) Pagination 分页器使用示例
  2. 二元logistic模型案例_二元逻辑回归的简介与操作演示
  3. 检查 linux guest vm 使用的什么 虚拟化技术
  4. 现代谱估计:MTM 谐波分析
  5. jpa 自定义sql if_常用SQL语句大全总结
  6. 11-分步查询懒加载
  7. HDU 1576 A/B(数论简单题,求逆元)
  8. openssl 1.1.1b 如何制作SM2公钥(在Ubuntu 19.04下测试通过)
  9. 这是一份简易的ACM模板
  10. 51nod 1277 字符串中的最大值(KMP算法)
  11. MFC获取指针.doc
  12. 史上最详细MFC调用mapX5.02.26步骤(附地图测试GST文件)
  13. finereport9.0破解版|finereport10.0破解并发数|finereport授权注册|FineBI5.0破解lic
  14. Ubuntu 安装微信
  15. 下载geoip/GeoLite2-ASN.mmdbGeoLite2-City.mmdb
  16. soap响应报文拼装_soap报文解析
  17. android烧写固定MAC,小系统SN号和MAC地址快速烧录的方法与流程
  18. DNS安全漫谈:DNS劫持频发,网络安全去哪儿了?
  19. 【czy系列赛】czy的后宫4 bzoj1925 [Sdoi2010]地精部落
  20. 计算机英语中bar是什么意思啊,bar是什么意思

热门文章

  1. html5做在线课件,HTML5教程:制作移动教育课件
  2. C++ C1 -namespace-using-域解析符-const-引用
  3. 《30天自制操作系统》学习笔记--第0天
  4. QT TCPsocket 封包 粘包分析
  5. wordpress footer.php,wordpress的get_footer( )函数功能详解
  6. python动作识别库_教你快速使用OpenCV/Python/dlib进行眨眼检测识别!
  7. 为程序员提供一杯免费咖啡
  8. 跨终端游戏平台:腾讯START云游戏 for Mac
  9. Google新一代操作系统Fuchsia详解
  10. ldc java_java – LDC指令代码的负值是什么意思?