您好,登錄后才能下訂單哦!
怎么淺析ZAO背后的深度學習算法原理,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
下面從更底層的算法角度出發,帶大家深入到算法本質,去理解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解碼器解碼所產生的不真實性。
當然,在真實場景中,在完成換臉后可能還需要一些后處理來保證結果更加平滑自然,比如在換臉邊緣做一些模糊處理,在人臉區域做一些和原臉的風格遷移等等。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。