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確實做的很好,技術上值得我們學習,但換臉本身是否符合道德,究竟是不是一件有意義有價值的事情,還需要時間給出我們最終的答案。
感謝您閱讀,希望對您有所幫助。
–溪鶴
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的ZAO 背后的深度学习算法原理浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双十一消费近万亿!1亿人见证数字物流,“
- 下一篇: 【深度学习】基于 Alluxio 数据缓