ZAO 背后的深度学习算法原理浅析

简介: ZAO最近火爆,成为现象级产品之一,引起大家的广泛关注,ATA上面已经有同学做了一些说明分析,链接如下: https://www.atatech.org/articles/148375?spm=ata.13269325.0.0.27ad49fa0Vr2gG 上面文章介绍了ZAO是基于deep fake算法演变出来的一种产品,并提供了deepFake lab的下载地址,计算机硬件的要求等等。本文

ZAO最近火爆,成为现象级产品之一,引起大家的广泛关注,ATA上面已经有同学做了一些说明分析,链接如下:

https://www.atatech.org/articles/148375?spm=ata.13269325.0.0.27ad49fa0Vr2gG

上面文章介绍了ZAO是基于deep fake算法演变出来的一种产品,并提供了deepFake lab的下载地址,计算机硬件的要求等等。本文从更底层的算法角度出发,带大家深入到算法本质,去理解ZAO究竟是如何基于GAN来进行换脸的。

首先,我们给出一张换脸的整体流程图:

图片来源:Exposing DeepFake Videos By Detecting FaceWarping Artifacts

上图展示了基于deepFake换脸算法的一般流程,首先对于输入图片(a)原图做人脸检测(b),检测出人脸后进行关键点检测(c)。之后(c)通过变换矩阵(d)来实现人脸摆正,之后将摆正后的人脸进入DeepFake(GAN/CycleGAN)来实现人脸替换,之后将替换后的人脸(g)通过变换矩阵的反变换来做关键点对齐,最后替换回原图进行融合最终得到(i)和(h)。

这里我们给出的是图像上人脸替换的一般流程,那对于短视频而言,就需要先对视频进行截帧,然后逐帧进行人脸替换,在视频帧替换过程中要有人脸识别的网络来保证替换的对象保持统一性(具体理解就是比如我们要替换一段视频中小燕子的脸,那就要识别出检测的人脸是不是小燕子的,不能将紫薇的人脸也替换了),当然由于是视频逐帧的替换,那么在其中为了保证视频随时间前后帧替换的人脸的自然和连贯性,就需要对前后帧的人脸进行转移平滑操作,从而保证较强的视觉效果。

以上就是图像换脸,视频换脸的通用流程,当然对于ZAO而言,我们发现它的换脸效果要好于我们一般的换脸算法,尤其是在头部旋转的(低头,回头,仰头)上面,效果很是不错,所以我们有理由相信,ZAO的算法内部应该是使用3D人脸关键点的检测,这样在替换的过程中就会换的更为自然。

好的,现在我们了解了流程,下面我们更加细节的介绍上面说的DeepFake(GAN/CycleGAN)的算法工作原理。为了简化大家对于GAN/CycleGAN的理解,我们同样以图的方式展现:

首先,上图表示了最简单的人脸替换网络,对于输出人脸(左边),通过神经网络编码得到中间状态(往往是一个向量或者很小的图像),之后再进入解码器还原得到重建的人脸(右边)。我们注意,中间的编码态相当于保存的人脸的全部信息。在上图我们并没有做人脸替换的相关操作,即A脸编码后解码的还是A脸,B脸编码后解码的还是B脸。

下面,如果我们将B脸编码的向量用A脸的解码去解,会发生什么呢?是的,B的脸会出现在原本A的脸的位置,但面部的表情和一些细节会保留A的。这样就实现了换脸。

从上图还有一点需要注意,因为编码的可替换要求,我们必须让所有脸的编码器保持一致性,也就是所有替换前的人脸用统一的编码器去编码(上图统一的红色编码器),但对于每个不同的人脸要实用不同的解码器去解码(上图不同的蓝色和绿色解码器),这样才能完成换脸。

但是如果仅仅使用上面的算法结构,生成的人脸会比较假,可以看出相当明显的人为替换痕迹,而为了让替换发生的更为真实,CycleGan应运而生,还是简单的一张图去理解CycleGan的算法本质:

 

我们可以看出,说到底,CycleGan不过在换脸后生成的假脸和真脸的之间多增加了一个损失来减小两者的差距,同时让相较于之前的A-->B, CycleGan还同时实现了B-->A的生成和缩小差距,而这整个过程呈现了一个闭环,故而名为Cycle。

CycleGan的循环训练可以明显的缩小直接将B脸用A解码器解码所产生的不真实性。

当然,在真实场景中,在完成换脸后可能还需要一些后处理来保证结果更加平滑自然,比如在换脸边缘做一些模糊处理,在人脸区域做一些和原脸的风格迁移等等。而这些就是实现技术代差的关键技术了,我们今天只是浅析一下ZAO的算法,更深入的一些产品算法设计细节我们这里不做更深的探讨了。

最后面对ZAO,虽然他有着霸王条款,单但从技术角度看,我认为ZAO确实做的很好,技术上值得我们学习,但换脸本身是否符合道德,究竟是不是一件有意义有价值的事情,还需要时间给出我们最终的答案。

感谢您阅读,希望对您有所帮助。

--溪鹤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章
|
12天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
30 3
|
24天前
|
机器学习/深度学习 算法 机器人
多代理强化学习综述:原理、算法与挑战
多代理强化学习是强化学习的一个子领域,专注于研究在共享环境中共存的多个学习代理的行为。每个代理都受其个体奖励驱动,采取行动以推进自身利益;在某些环境中,这些利益可能与其他代理的利益相冲突,从而产生复杂的群体动态。
108 5
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
114 63
|
1天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
7天前
|
算法 数据库 索引
HyperLogLog算法的原理是什么
【10月更文挑战第19天】HyperLogLog算法的原理是什么
9 1
|
12天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
42 1
|
13天前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
47 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
21天前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
77 8
|
19天前
|
机器学习/深度学习 JSON 搜索推荐
深度学习的协同过滤的推荐算法-毕设神器
深度学习的协同过滤的推荐算法-毕设神器
33 4
|
25天前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能

热门文章

最新文章