乐趣区

关于es6:ZAO-背后的深度学习算法原理浅析

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 的确做的很好,技术上值得咱们学习,但换脸自身是否合乎道德,到底是不是一件有意义有价值的事件,还须要工夫给出咱们最终的答案。

感谢您浏览,心愿对您有所帮忙。

– 溪鹤

原文链接
本文为阿里云原创内容,未经容许不得转载。

退出移动版