2019年,国外论坛的,大表姐珍妮佛劳伦丝和史蒂夫布什密通过Deepfake技术的实时换脸视频。

链接:https://www.youtube.com/watch?v=iHv6Q9ychnA

论文:FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping

github:https://github.com/taotaonice/FaceShifter

论文提出了一个基于2阶段的GAN方式的换脸方法FaceShifter。整体网络结构包含,AEI-Net ,HEAR-Net两个网络。FaceShifter通过获取输入的2个图片中,第一张图片的ID特征,第二张图片的属性特征,来通过GAN生成最终的合成图片。合成的图片具有第一个图片的ID特征,第二个图片的属性特征,从而实现了换脸,并且取得了目前state-of-the-art的效果。

换脸的相关方法:

  1. 基于3d的方法,3D-Based Approaches

包括,3DMMFace2Face

2. 基于GAN的方法,GAN-Based Approaches

包括,CageNetSwiftNetDeepFakesRSGANFSNetIPGANFSGAN

FaceShifter结构:

Adaptive Embedding Integration Network (AEINet)

网络输入图片为256*256,训练数据从CelebA-HQFFHQVGGFace3个数据集中获取得到。

AAD部分,加权attention方式融合了ID特征和Attributes特征。多个AAD+Relu+Conv堆叠,形成了AAD ResBlk模块。多个AAD ResBlk的组合,形成了最终的AEINet

AEINet包括3个部分,

  1. 身份ID编码模块,Identity Encoder

该模块是一个已经训练好的人脸识别模块,即Archface模块。在整个网络中,该模块只进行前向传递,不进行loss回传训练。

2. 属性ATTRIBUTES编码模块,Multi-level Attributes Encoder,属性包括姿势,表情,光照,背景等(pose, expression, lighting and background)。

该模块的网络结构是一个U-Net形状的结构。有助于编码不同层的属性特征。

其中,n=8,一共编码了8个分支的特征。

该阶段的训练,不需要任何属性的标签进行监督训练,整个过程完全是无监督的方式进行训练学习。

那么问题来了,没有属性标签进行约束,那么这个模块是怎么按照作者设计的意愿,去学习人脸的属性特征呢?

这个问题讲到这里就回答,其实不合适,但是还是得提前剧透。

整个网络的训练过程是随机的输入2组图片进行,而这2组图片是从数据集中随机取到的。可能是同样的人,也可能不是。而采样中,作者控制了同样的人的概率是80%。不同人的概率只有20%。如果是网络的输入是2个同样的人,那么网络的输出肯定也还是同样的人。而ID编码网络部分是提前训练好的,不参与训练。也就是说ID编码模块肯定是学习的人脸的ID特征。假设人脸特征=ID特征+attributes特征,要保证最终合成的图片还是那个原来的人,那么attributes编码模块就只能学习属性特征。就是通过这样的方式,来实现无监督的让attributes编码网络自动学习属性特征。所以也需要80%这样相对大的概率,来保证该模块的收敛。这也就是本方法的一个亮点。试想,如果整个训练全部都是不同的人的组合,那肯定是学习不出这个网络模块的。这个可以自己训练的时候调节这个比例尝试。

3. 融合IDATTRIBUTES,并且生成人脸的模块,也就是GAN的生成器部分,Adaptive Attentional Denormalization (AAD) Generator

AAD部分的输入包括2个部分,分别是ID部分和Attributes部分。

Attributes部分的输入为2个属性输出的加权,

ID部分的输入也是2ID输出的加权,

AAD部分进行了基于attention方式的IDAttributes的加权融合。

首先AAD模块对前一层的输入进行conv降维+sigmoid归一化操作,得到1个0-1的特征图,然后使用该特征图进行ID和Attributes的融合。

AEINetloss包括4部分,分别为

GAN的判别器的loss Ladv,也就是AAD生成的图片,判别器判断是真实图片还是造的图片的loss

ID模块的lossLid,也就是cos loss,将AAD生成的图片输入ID模块,得到输出特征,然后和之前的输入Xsource的输出特征计算cos距离,保证2个特征相似。

属性模块的lossLatt,也就是L2范数,将AAD生成的图片输入Attributes模块,得到输出的特征图,计算其和原始输入XtargetL2距离。

识别的lossLrec,该loss只有在输入的2张图片Xsource==Xtarget的时候,才会有loss,也就是AAD的输出和输入XtargetL2 loss。其余时刻,该loss0

最终AEINet模块的lossLAEI-NET

Heuristic Error Acknowledging Refinement Network(HEAR-Net)

HEAR-Net也是一个U-Net类型的网络结构。U-Net的取特征的分支n=5。

前面的AEINet生成的换脸图片虽然可以处理背景,光照,姿势,表情等问题。但是却处理不了遮挡问题。为此,论文引入了HEAR-Net。

同时,作者发现一个现象,当AEI-Net的连个输入图片都相同的时候,得到的生成图片也会吧遮挡部分给去掉。

we observe that if we feed the same image as both the source and target images into a well trained AEI-Net, these occlusions would also disappear in the reconstructed image.

为了恢复遮挡部分,可以使用原始的输入XtargetAEI-Net的生成图片作差,得到遮挡部分的特征图Yt

然后使用AEI-Net的输出Y^st和遮挡部分的特征Yt经过HEAR-Net生成最终的换脸图片Yst。

HEAR-Net的loss,包含3部分,

(1)ID部分的loss,同样还是cos loss

(2)第一个stage AEI-Net和第二个stage HEAR-Net的生成换脸照片的连续性保证的loss。

(3)只有输入的2个图片相同的时候Xsource==Xtarget,才会有的重建loss,保证重建的图片和输入的图片一样。

最终,HEAR-Net的loss为,

详细网络结构:

实验结果:

DeepFake vs FaceShifter

DeepFake

FaceShifter

模型结构

Encoder+Decoder生成模型

GAN,设计了属性提取器和身份提取器提取特征,设计了嵌入器去组合特征。

属性保持

较好

较好

图片质量

一般

较好

可拓展性

改进思路:

(1)判别器部分,增加随机归一化SN操作,参考,GitHub - godisboy/SN-GAN: pyTorch implementation of Spectral Normalization for Generative Adversarial Networks

(2)对人脸识别模块arcface的输出Yst进行人脸区域的mask操作,然后再与输入Xs进行相似度计算,参考,GitHub - zllrunning/face-parsing.PyTorch: Using modified BiSeNet for face parsing in PyTorch

总结:

  1. FaceShifter 可以对任意2个没有见过的人脸进行换脸。而DeepFakes只能对训练中已经“见过”的人脸进行合成,不具备外插能力。这也成了限制DeepFakes算法商用的重要原因。
  2. FaceShifter对保身份和保属性的能力不错,生成图片质量也还可以。
  3. FaceShifter设计了一些针对有遮挡、大角度的脸的处理方法,所以有不错的处理遮挡、大角度等极端情况的目标人脸的能力。

换脸方法之FaceShifter相关推荐

  1. 换脸方法大汇总:生成对抗网络GAN、扩散模型等

    1.One-Shot Face Video Re-enactment using Hybrid Latent Spaces of StyleGAN2 StyleGAN的高保真人像生成,已逐渐克服了单样 ...

  2. 论文翻译:DeepFaceLab:一个简单,灵活的可扩展换脸框架

    DeepFaceLab:一个简单,灵活的可扩展换脸框架 时间有限,翻译仓促,为个人学习所用,仅供参考. DeepFaceLab: A simple, flexible and extensible f ...

  3. B 站神曲damedane:精髓在于换脸,五分钟就能学会

    导读:AI 换脸技术层出不穷,但一代更比一代强.最近,一个发表在 NeurIPs 2019 的 AI 换脸模型 first order motion model 火了起来,其表情迁移效果胜过同领域其它 ...

  4. 用python实现视频换脸_超简单使用Python换脸实例

    换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...

  5. 换脸系列——整脸替换

    前言 前面介绍了仅替换五官的方法,这里介绍整张脸的方法. 国际惯例,参考博客: [图形算法]Delaunay三角剖分算法 维诺图(Voronoi Diagram)分析与实现 Delaunay Tria ...

  6. B 站神曲 damedane:精髓在于换脸,五分钟就能学会

    By 超神经 内容提要:AI 换脸技术层出不穷,但一代更比一代强.最近,一个发表在 NeurIPs 2019 的 AI 换脸模型 first order motion model 火了起来,其表情迁移 ...

  7. 明晚 8 点,为你揭秘「AI 换脸术」:剧照 or 视频换脸背后的核心技术与应用

    什么是 AI Deepfake(AI换脸术)? 简单来说,就是用 B 的脸部替换 A 的.现有的 AI 换脸技术已经不再局限于生成人脸图片,即使是视频中被替换的人脸都可以做到以假乱真的地步.<速 ...

  8. 人工智能几行代码实现换脸

    本篇介绍的换脸方法需要借助Face++,关于Face++的API,大家可自行查看说明文档,都比较简单. 文档地址:https://console.faceplusplus.com.cn/documen ...

  9. 不到 100 行 Python 代码即可实现换脸功能

    本篇介绍的换脸方法我们借助于第三方 Face++的API 来实现,我们通过的 API 接口提供方是 Face++官网,首先我们需要到该网站注册一个自己的账号. Face++官网:https://con ...

最新文章

  1. fifa17服务器维护,3月17日《EA SPORTS FIFA Online 2》服务器例行停机维护公告
  2. java 操作oracle 源码_java对oracle的常用操作示例源码
  3. Echarts使用笔记
  4. 48-如何实现unix2dos功能
  5. .net core 学习小结之 JWT 认证授权
  6. 今日起开始预约!北京将发放5万份数字人民币红包
  7. Python版归并排序算法(附Python程序__name__属性用法演示视频)
  8. SQLServer查询最近一天,三天,一周,一月,一季度方法
  9. 《数学分析新讲》_张筑生,12.5节:隐函数定理(1)
  10. 需求调研报告(用户需求说明书)编写规范
  11. PCAN Explorer之plot插件导出数据时间格式转换
  12. 北京邮电大学计算机考研资料汇总
  13. 安卓开发日记1——虫虫新闻
  14. 绑定挂载mount --bind介绍
  15. python模仿微信添加好友截图,一键批量生成微信添加好友聊天截图
  16. 工序作业指导书怎么做?如何制作工序作业指导书?
  17. 模电——运放输入/输出接小电阻
  18. c盘空间不足的一些删除办法
  19. 华为数字化转型之道 结语 数字化转型的8个成功要素
  20. 什么是 Android Jetpack?

热门文章

  1. Spring Boot MyBatis Postgres 实现对数据表增删改查操作(采用注解方式)
  2. [图文教程] 禁止 Windows 10 自动下载和更新驱动程序(转)
  3. MYSQL内存请求一直不释放_MySQL内存不释放分析
  4. 关于移动4G基站定位
  5. 4.21版本工程以后材质里CustomNode添加.usf文件失败解决办法
  6. 按现在的政策灵活就业人员,还有没有必要每年自己缴纳养老保险?
  7. Egret自定义位图文字
  8. 《软件质量保证和管理》电子课件下载
  9. [翻译]Popfly系列课程2 - 起程–Popfly Mashup创作工具:即将成为你身边的影院
  10. 基于Matlab的汽车主动悬架控制器设计与仿真