热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2019.08FSGAN论文解析

原文链接:https:blog.csdn.netkevin_zhao_zlarticledetails112061352?ops_request_misc&reque

原文链接:https://blog.csdn.net/kevin_zhao_zl/article/details/112061352?ops_request_misc=&request_id=&biz_id=102&utm_term=FSGAN:%20Subject%20Agnostic%20Face%20S&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-112061352.nonecase&spm=1018.2226.3001.4187

Face Swap Gan是ICCV19的一篇文章,模型看起来比较复杂,总体结构由三个生成器和一个语义分割网络组成,能够实现任意两张人脸图片较好的换脸效果,在视频人脸重建中效果也比较好。
论文地址
工程地址

  将一个换脸任务简单表述为给定两张任意的图片A和B,将图片A中的人脸换到图片B中的人脸上,方法整体的大致流程如下:输入图片A和B,首先调用第三方模型得到人脸B的欧拉角及关键点,然后利用生成模型Gr根据这个角度和人脸A,生成姿态角度与人脸B一致但保存A脸特征的人脸A’,接着利用分割模型S得到人脸B的脸部区域掩码


另一种说法:首先根据source图像Is和目标target图像It,基于3d人脸landmark检测器,分别提取原图和目标图的人脸框,landmark,欧拉角,这3个指标。然后使用一个reenactment再现人脸姿态的网络,通过source图像生成和target图像人脸欧拉角一样的图片Ir。然后通过一个分割segmentation的模型,分别对生成的图片Ir和目标图片It进行分割操作。得到人脸和头发的mask区域。然后通过一个inpainting修复网络,对人脸区域进行修复,得到Ic。最后基于一个blending融合网络,基于目标图,修复体,mask图,进行融合,得到最终换脸后输出图Ib。

MaskBMask_BMaskB,随后根据A’和MaskBMask_BMaskB,利用生成模型Gc对A’进行残缺区域补全或者多余部分擦除得到A’’,最后一步,根据A’’、MaskBMask_BMaskB以及脸B,利用生成模型Gb,对A’'中人脸的光照肤色等进行渲染,使结果更加自然,最终输出换脸结果。很明显,整个方法需要训练四个模型,根据以往经验,训练GAN必然是一个既吃资源又难以得到好效果的过程,何况还有三个功能各异的GAN,(摊手),但是模型的最终的效果以及各个模型拆分开来,可能也对许多子任务具有参考意义。
  总的来看,论文有三处贡献:



  • 任意图片人脸互换。FSGAN能够实现任意两张图片的换脸。(之前方法比如FSNet,每个模型只能将固定的人脸换到对应的图片上)
  • 多视角人脸插值。重点是,针对视频中的换脸任务,论文提出的方法利用Gr的生成结果以及德洛夫三角剖分以及质心坐标,能够实现多视角人脸插值而无需针对每一帧都训练一个模型。
  • 两个新型损失函数。用于训练脸部生成模型的逐级一致性损失与用于训练渲染模型的泊松损失。

  FSGAN模块组成与流程上文已经介绍,其中分割模型论文使用Unet架构,三个生成器均使用了pix2pixHD的架构,方法流程,如下图所示:
在这里插入图片描述

  也可以更直观地看到模型各个阶段的结果如下图所示:
在这里插入图片描述

  更具体地,三个生成器模型架构类似,如下图所示,基本结构是一个类UNet+增强结构:
在这里插入图片描述

  接下来,分不同部分来看论文。

1. 基础损失函数


1.1 特定领域感知损失

  常用感知损失使用预训练好的VGG网络得到的特征图,并利用欧几里得距离结合高频细节。但是使用一个针对ImageNet的预训练模型很难完全捕获脸部细节。
  因此论文针对脸部识别与分类任务重新训练了多个VGG-19网络,令

FiF_iFi表示模型第iii层的输出,感知损失定义为:



1.2 重建损失

  但是仅使用上面的感知损失训练GAN,很容易产生有奇怪颜色并且与目标图像相关度较小的结果。因此论文使用了一个逐像素的

L1L_1L1损失:


  这个两个损失的结合,将参与所有生成器的训练:
在这里插入图片描述

1.3 对抗损失

  论文使用了一个由多个判别器组成的多尺度判别器,其中每一个部分负责相应分辨率的特征图的判定,对抗损失定义为:
在这里插入图片描述

  其中:
在这里插入图片描述

2. 脸部重建与分割

  脸部重建生成器Gr,输入源图像与其脸部关键点的heatmap,利用源图像与目标图像的形心与欧拉角,利用形心之间以及欧拉之间的对应关系进行插值,生成具有目标图像人脸欧拉角度的和源图像人脸特征的图像。
  Gr的输出部分被分为两部分,一个负责产生重建的图像,一个负责产生该重建的人脸图像的分割掩码(主要是头发和人脸两部分掩码)。而分割网络S则直接产生这种三类的分割掩码。
  训练过程中,给定图像对

(Is,It)(I_s,I_t)(Is,It),令IrnI_{r_n}Irn表示n次迭代之后的重建结果,而Itˉ,Irnˉ\bar {I_t},\bar {I_{r_n}}Itˉ,Irnˉ表示对应的去除背景区域的结果,GrG_rGr逐步一致性损失定义为:


  而分割网络的损失则为标准的交叉熵再加上

GrG_rGr的指导:


  训练过程,可以将Gr和S分开训练,也可以合在一起交替训练,论文说后者对于噪声过滤有很好的效果,但对于特定目标图像的换脸任务,S的训练甚至可以省略。

3. 脸部(多)视角插值

  这个方法是视频人脸重建的核心,因为避免了逐帧训练无数个模型。给定源原目标图像序列、其中的人脸图像序列及其对应的欧拉角序列,首先将映射欧拉角至平面从而抛弃roll方向的角度,使用k-d树移除欧拉角度相近的人脸,进一步移除模糊的图像。使用剩下的点和脸部区域矩形,使用德洛夫三角剖分建立一个mesh。对于一个特定的目标图像,比如人脸

FtF_tFt、欧拉角ete_tet及其对应的序列坐标xtx_txt,找到包含该坐标的一个德洛夫三角,从而得到三角形的三个顶点己去对应的源图像人脸视角,计算重心从而得到插值结果:



4. 脸部插值

  对于两张图像的换脸任务,我们只需要训练一个生成器,对于Gr的生成结果相对目标图像人脸,进行残缺部分的补全或者多余部分的擦除即可,损失函数定义为:
在这里插入图片描述

5. 脸部渲染

  最后一步是根据插值补全/擦除的人脸根据目标人脸进行肤色光照等的渲染,收到泊松无缝融合的启发,论文提出了一个新型的泊松渲染损失:令

ItI_tIt作为目标图像表示目标图像,IrtI_r^tIrt表示根据目标图像进行重建的图像,StS_tSt为目标图像的人脸分割掩码,泊松渲染优化过程可以抽象为:


  将上面的优化过程与感知损失结合,新型泊松渲染损失定义为:
在这里插入图片描述

6. 不足与展望

  不足在于过多次数的迭代会使得Gr生成模糊的人脸效果,而且如果选用的脸部关键点效果较差,可能无法精确的捕获目标脸表情,从而影响生成效果。但是总的来看,论文三个生成器以及一个多视角人脸插值方法的提出,以及以任意两张人脸图像换脸的出发点和优秀的效果,还是能够给很多类似的(子)任务带来启发。


欢迎关注 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
妖姬脸似花甘露_545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有