ZAO最近火爆,,成為現(xiàn)象級(jí)產(chǎn)品之一,引起大家的廣泛關(guān)注,,ATA上面已經(jīng)有同學(xué)做了一些說明分析,。 上面文章介紹了ZAO是基于deep fake算法演變出來的一種產(chǎn)品,并提供了deepFake lab的下載地址,,計(jì)算機(jī)硬件的要求等等,。本文從更底層的算法角度出發(fā),帶大家深入到算法本質(zhì),,去理解ZAO究竟是如何基于GAN來進(jìn)行換臉的,。 首先,我們給出一張換臉的整體流程圖: 圖片來源:Exposing DeepFake Videos By Detecting FaceWarping Artifacts 上圖展示了基于deepFake換臉?biāo)惴ǖ囊话懔鞒?,首先?duì)于輸入圖片(a)原圖做人臉檢測(cè)(b),,檢測(cè)出人臉后進(jìn)行關(guān)鍵點(diǎn)檢測(cè)(c)。之后(c)通過變換矩陣(d)來實(shí)現(xiàn)人臉擺正,,之后將擺正后的人臉進(jìn)入DeepFake(GAN/CycleGAN)來實(shí)現(xiàn)人臉替換,,之后將替換后的人臉(g)通過變換矩陣的反變換來做關(guān)鍵點(diǎn)對(duì)齊,,最后替換回原圖進(jìn)行融合最終得到(i)和(h),。 這里我們給出的是圖像上人臉替換的一般流程,,那對(duì)于短視頻而言,就需要先對(duì)視頻進(jìn)行截幀,,然后逐幀進(jìn)行人臉替換,,在視頻幀替換過程中要有人臉識(shí)別的網(wǎng)絡(luò)來保證替換的對(duì)象保持統(tǒng)一性(具體理解就是比如我們要替換一段視頻中小燕子的臉,那就要識(shí)別出檢測(cè)的人臉是不是小燕子的,,不能將紫薇的人臉也替換了),,當(dāng)然由于是視頻逐幀的替換,那么在其中為了保證視頻隨時(shí)間前后幀替換的人臉的自然和連貫性,,就需要對(duì)前后幀的人臉進(jìn)行轉(zhuǎn)移平滑操作,,從而保證較強(qiáng)的視覺效果。 以上就是圖像換臉,,視頻換臉的通用流程,,當(dāng)然對(duì)于ZAO而言,我們發(fā)現(xiàn)它的換臉效果要好于我們一般的換臉?biāo)惴?,尤其是在頭部旋轉(zhuǎn)的(低頭,,回頭,仰頭)上面,,效果很是不錯(cuò),,所以我們有理由相信,ZAO的算法內(nèi)部應(yīng)該是使用3D人臉關(guān)鍵點(diǎn)的檢測(cè),,這樣在替換的過程中就會(huì)換的更為自然,。 好的,現(xiàn)在我們了解了流程,,下面我們更加細(xì)節(jié)的介紹上面說的DeepFake(GAN/CycleGAN)的算法工作原理,。為了簡(jiǎn)化大家對(duì)于GAN/CycleGAN的理解,我們同樣以圖的方式展現(xiàn): 首先,,上圖表示了最簡(jiǎn)單的人臉替換網(wǎng)絡(luò),,對(duì)于輸出人臉(左邊),通過神經(jīng)網(wǎng)絡(luò)編碼得到中間狀態(tài)(往往是一個(gè)向量或者很小的圖像),,之后再進(jìn)入解碼器還原得到重建的人臉(右邊),。我們注意,中間的編碼態(tài)相當(dāng)于保存的人臉的全部信息,。在上圖我們并沒有做人臉替換的相關(guān)操作,,即A臉編碼后解碼的還是A臉,B臉編碼后解碼的還是B臉,。 下面,,如果我們將B臉編碼的向量用A臉的解碼去解,,會(huì)發(fā)生什么呢?是的,,B的臉會(huì)出現(xiàn)在原本A的臉的位置,,但面部的表情和一些細(xì)節(jié)會(huì)保留A的。這樣就實(shí)現(xiàn)了換臉,。 從上圖還有一點(diǎn)需要注意,,因?yàn)榫幋a的可替換要求,我們必須讓所有臉的編碼器保持一致性,,也就是所有替換前的人臉用統(tǒng)一的編碼器去編碼(上圖統(tǒng)一的紅色編碼器),,但對(duì)于每個(gè)不同的人臉要實(shí)用不同的解碼器去解碼(上圖不同的藍(lán)色和綠色解碼器),這樣才能完成換臉,。 但是如果僅僅使用上面的算法結(jié)構(gòu),,生成的人臉會(huì)比較假,可以看出相當(dāng)明顯的人為替換痕跡,,而為了讓替換發(fā)生的更為真實(shí),,CycleGan應(yīng)運(yùn)而生,還是簡(jiǎn)單的一張圖去理解CycleGan的算法本質(zhì): 我們可以看出,,說到底,,CycleGan不過在換臉后生成的假臉和真臉的之間多增加了一個(gè)損失來減小兩者的差距,同時(shí)讓相較于之前的A-->B, CycleGan還同時(shí)實(shí)現(xiàn)了B-->A的生成和縮小差距,,而這整個(gè)過程呈現(xiàn)了一個(gè)閉環(huán),,故而名為Cycle。 CycleGan的循環(huán)訓(xùn)練可以明顯的縮小直接將B臉用A解碼器解碼所產(chǎn)生的不真實(shí)性,。 當(dāng)然,,在真實(shí)場(chǎng)景中,在完成換臉后可能還需要一些后處理來保證結(jié)果更加平滑自然,,比如在換臉邊緣做一些模糊處理,,在人臉區(qū)域做一些和原臉的風(fēng)格遷移等等。而這些就是實(shí)現(xiàn)技術(shù)代差的關(guān)鍵技術(shù)了,,我們今天只是淺析一下ZAO的算法,,更深入的一些產(chǎn)品算法設(shè)計(jì)細(xì)節(jié)我們這里不做更深的探討了。 最后面對(duì)ZAO,,雖然他有著霸王條款,,但從技術(shù)角度看,我認(rèn)為ZAO確實(shí)做的很好,,技術(shù)上值得我們學(xué)習(xí),,但換臉本身是否符合道德,究竟是不是一件有意義有價(jià)值的事情,還需要時(shí)間給出我們最終的答案,。 感謝您的閱讀,,希望對(duì)您有所幫助。 作者:溪鶴 本文為阿里云原創(chuàng)內(nèi)容,。 |
|