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确实做的很好,技术上值得我们学习,但换脸本身是否符合道德,究竟是不是一件有意义有价值的事情,还需要时间给出我们最终的答案。

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

--溪鹤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
1230 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
机器学习/深度学习 算法 自动驾驶
1743 0
|
机器学习/深度学习 算法 搜索推荐
从零开始构建图注意力网络:GAT算法原理与数值实现详解
本文详细解析了图注意力网络(GAT)的算法原理和实现过程。GAT通过引入注意力机制解决了图卷积网络(GCN)中所有邻居节点贡献相等的局限性,让模型能够自动学习不同邻居的重要性权重。
1849 0
从零开始构建图注意力网络:GAT算法原理与数值实现详解
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
404 2
|
算法
离散粒子群算法(DPSO)的原理与MATLAB实现
离散粒子群算法(DPSO)的原理与MATLAB实现
650 0
|
机器学习/深度学习 人工智能 编解码
AI视觉新突破:多角度理解3D世界的算法原理全解析
多视角条件扩散算法通过多张图片输入生成高质量3D模型,克服了单图建模背面细节缺失的问题。该技术模拟人类多角度观察方式,结合跨视图注意力机制与一致性损失优化,大幅提升几何精度与纹理保真度,成为AI 3D生成的重要突破。
1884 0
|
算法 区块链 数据安全/隐私保护
加密算法:深度解析Ed25519原理
在 Solana 开发过程中,我一直对 Ed25519 加密算法 如何生成公钥、签名以及验证签名的机制感到困惑。为了弄清这一点,我查阅了大量相关资料,终于对其流程有了更清晰的理解。在此记录实现过程,方便日后查阅。
1854 0
|
消息中间件 存储 缓存
zk基础—1.一致性原理和算法
本文详细介绍了分布式系统的特点、理论及一致性算法。首先分析了分布式系统的五大特点:分布性、对等性、并发性、缺乏全局时钟和故障随时发生。接着探讨了分布式系统理论,包括CAP理论(一致性、可用性、分区容错性)和BASE理论(基本可用、软状态、最终一致性)。文中还深入讲解了两阶段提交(2PC)与三阶段提交(3PC)协议,以及Paxos算法的推导过程和核心思想,强调了其在ZooKeeper中的应用。最后简述了ZAB算法,指出其通过改编的两阶段提交协议确保节点间数据一致性,并在Leader故障时快速恢复服务。这些内容为理解分布式系统的设计与实现提供了全面的基础。
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
1009 58

热门文章

最新文章