首頁>技術>

ZAO最近火爆,成為現象級產品之一,引起大家的廣泛關注,ATA上面已經有同學做了一些說明分析。

上面文章介紹了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確實做的很好,技術上值得我們學習,但換臉本身是否符合道德,究竟是不是一件有意義有價值的事情,還需要時間給出我們最終的答案。

13
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何應用開源Apache JMeter效能測試工具