深度解密換臉應用 Deepfake

2020-12-15 雷鋒網

雷鋒網 AI 研習社按,本文作者 Lonely.wm,該文首發於知乎專欄智能單元,雷鋒網(公眾號:雷鋒網) AI 研習社獲其授權轉載。

前言

Deepfake 就是前一陣很火的換臉 App,從技術的角度而言,這是深度圖像生成模型的一次非常成功的應用,這兩年雖然湧現出了很多圖像生成模型方面的論文,但大都是能算是 Demo,沒有多少的實用價值,除非在特定領域(比如醫學上),哪怕是英偉達的神作:漸進生成高清人臉 PGGAN 好像也是學術意義大於實用價值。其實人們一直都在追求更通用的生成技術,我想 Deepfake 算是一例,就讓我們由此出發,看看能否從中獲取些靈感。

一、基本框架

我們先看看 Deepfake 到底是個何方神聖,其原理一句話可以概括:用監督學習訓練一個神經網絡將張三的扭曲處理過的臉還原成原始臉,並且期望這個網絡具備將任意人臉還原成張三的臉的能力。

說了半天這好像是一個自編碼模型嘛~,沒錯,原始版本的 deepfake 就是這樣的,公式如下:

這裡的 XW 是經過扭曲處理過的圖片,用過 Deepfake 的童鞋可能會有人提出質疑,「要讓代碼跑起來好像必須要有兩個人的人臉數據吧」。沒錯,之所以要同時用兩個人的數據並不是說算法只能將 A 與 B 互換,而是為提高穩定性,因為 Encoder 網絡是共享的,Deocder 網絡是分開的,上公式:

為了方便理解我照搬項目二(加了 Gan 的版本)上的說明圖片:

特別注意:原版是沒有 Mask 的~

版本二我不打算討論,僅介紹一下,簡而言之就是增加了 Adversarial Loss和Perceptual Loss,後者是用訓練好的 VGGFace 網絡(該網絡不做訓練)的參數做一個語義的比對。

二、技術細節

Deepfake 的整個流程包括三步,一是提取數據,二是訓練,三是轉換。其中第一和第三步都需要用到數據預處理,另外第三步還用到了圖片融合技術。所以我在技術上主要分三個方面來剖析:圖像預處理、網絡模型、圖像融合。

1. 圖像預處理

從大圖(或視頻)中識別,並摳出人臉圖像,原版用的是 dlib 中的人臉識別庫(這個識別模塊可替換),這個庫不僅能定位人臉,而且還可以給出人臉的 36 個關鍵點坐標,根據這些坐標能計算人臉的角度,最終摳出來的人臉是擺正後的人臉。

2. 網絡模型

Encoder: 64x64x3->8x8x512
x = input_
x = conv(128)(x)
x = conv(256)(x)
x = conv(512)(x)
x = conv(1024)(x)
x = Dense(ENCODER_DIM)(Flatten()(x))
x = Dense(4 * 4 * 1024)(x)
x = Reshape((4, 4, 1024))(x)
x = upscale(512)(x)

Decoder:8x8x512->64x64x3
x = input_
x = upscale(256)(x)
x = upscale(128)(x)
x = upscale(64)(x)
x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x)

整個網絡並不複雜,無非就是卷積加全連接,編碼->解碼,但是仔細研究後發現作者其實是匠心獨運的,為什麼我不急著說,我們先看看 con 和 upscale 的內部實現:

def conv(filters):
   def block(x):
       x = Conv2D(filters, kernel_size=5, strides=2, padding='same')(x)
       x = LeakyReLU(0.1)(x)
       return x
   return blockdef upscale(filters):
   def block(x):
       x = Conv2D(filters * 4, kernel_size=3, padding='same')(x)
       x = LeakyReLU(0.1)(x)
       x = PixelShuffler()(x)
       return x
   return block

conv 是中規中矩的卷積加 relu 激活函數,upscale 中有個函數叫 PixelShuffler,這個函數很有意思,其功能是將 filter 的大小變為原來的 1/4,讓後讓高 h、寬 w 各變為原來的兩倍,這也就是為什麼前面的卷積層的 filter 要乘以 4 的原因。

經過測試對比,比如拿掉 upscale 換成步長為 2 的反卷積,或者簡單 resize 為原來的兩倍,實驗的效果都大打折扣,結果是網絡只能自編碼,而得不到需要的人臉。雖然作者沒有說這樣設計是引用那篇論文的思想,筆者也未讀到過直接討論這個問題的論文,但是有一篇論文可以佐證:Deep Image Prior,包括 Encoder 中的全連接層都是人為打亂圖像的空間依賴性,增加學習的難度,從而使網絡能夠更加充分地理解圖像。所以 Encoder 中的全連接層和 PixelShuffler 都是必不可少的。經筆者測試,在不加 Gan 的情況下,去掉這兩個要素,網絡必定失敗。

3. 圖像融合

圖像融合放在技術難點分析中討論。

三、難點分析

1. 清晰度問題

原版的人臉像素是 64*64,顯然偏低,但要提高人臉清晰度,並不能僅靠提高圖片的解析度,還應該在訓練方法和損失函數上下功夫。眾所周知,簡單的 L1Loss 是有數學上的均值性的,會導致模糊。解決方案個人比較傾向在 L1Loss 的基礎上加入 GAN,因為強監督下的 GAN 具有區分更細微區別的能力,很多論文都提到這一點,比如較早的一篇超解析度的文章。但是 GAN 也有很多問題,這個後面討論。還有一個思路就是用 PixelCNN 來改善細節的,但經實踐,這種方法不僅生成速度慢(雖然速度可以通過加入緩存機制,一定程度上優化),而且在質量上也不如 GAN。

2. 人臉識別問題

由於第一個環節是對人臉做預處理,算法必須首先能識別出人臉,然後才能處理它,而 dlib 中的人臉檢測算法,必須是「全臉」,如果臉的角度比較偏就無法識別,也就無法「換臉」。所以項目二就用了 MTCNN 作為識別引擎。

3. 人臉轉換效果問題

原版的算法人臉轉換的效果,筆者認為還不夠好,比如由 A->B 的轉換,B 的質量和原圖 A 是有一定關聯的,這很容易理解,因為算法本身的原因,由 XW->X 中不管 X 如何扭曲總會有一個限度。所以導致由美女 A 生成美女 B 的效果要遠遠優於由醜男 A 生成美女 B。這個問題的解決筆者認為最容易想到的還是 Gan,類似 Cycle-Gan 這樣框架可以進行無監督的語義轉換。另外原版的算法僅截取了人臉的中間部分,下巴還有額頭都沒有在訓練圖片之內,因此還有較大的提高空間。

4. 圖片融合問題

由於生成出來的是一個正方形,如何與原圖融合就是一個問題了,原始項目有很多種融合方法,包括直接覆蓋,遮罩覆蓋,還有就是泊松克隆「Seamless cloning」,從效果上而言,遮罩覆蓋的效果與泊松克隆最好,二者各有千秋,遮罩覆蓋邊緣比較生硬,泊松克隆很柔和,其單圖效果要優於遮罩覆蓋,但是由於泊松克隆會使圖片發生些許位移,因此在視頻合成中會產生一定的抖動。圖片融合問題的改進思路,筆者認為還是要從生成圖片本身著手,項目二引入了遮罩,是一個非常不錯的思路,也是一個比較容易想到的思路,就是最終生成的是一個 RAGB 的帶通明度的圖片。

筆者還嘗試過很多方法,其中效果比較好的是,在引入 Gan 的同時加入非常小的自我還原的 L1Loss,讓圖片「和而不同」。經測試,這種方法能夠使圖片的邊緣和原圖基本融合,但是這種方法也有弊端,那就是像臉型不一樣這樣的比較大的改動,網絡就不願意去嘗試了,網絡更趨向於小修小補,僅改變五官的特徵。

5. 視頻抖動問題

視頻抖動是一個很關鍵的問題。主要源自兩點,第一點是人臉識別中斷的問題,比如 1 秒鐘視頻的連續 30 幀的圖片中間突然有幾幀由於角度或是清晰度的問題而無法識別產生了中斷。第二點是算法本身精確度問題會導致人臉的大小發生變化。這是由算法本身帶來的,因為總是讓 XW->X,而 XW 是被扭曲過的,當 XW 是被拉大時,算法要由大還原小,當 XW 被縮小時,要由小還原大。也就是說同一張人臉圖片,讓他合成大於自己的或小於自己的臉都是有道理的,另外當人臉角度變化較大時,這種抖動就會更明顯。視頻抖動目前尚未有很好的解決方案,唯有不斷提高算法的精確度,同時提高人臉識別和人臉轉換的精確度。

四、關於Gan改進版的Deepfake

在原始版本上加入 Gan,項目二是這麼做的,筆者也進行過較深入的研究。

Gan 的優點是能比較快進行風格轉換,相同參數下 Gan 訓練兩萬次就生成比較清晰目標人臉,而原始算法大概需要五萬次以上,Gan 生成的人臉較清晰,而且能減少對原圖的依賴等,同時加入 Gan 之後,可以減少對特定網絡模型的依賴,完全可以去掉原網絡中的 FC 和 Shuffer。

Gan 的缺點也很突出,其訓練難以把控,這是眾所周知的。Gan 會帶來許多不可控的因子。比如一個人的膚色偏白,則生成的人臉也會變白,而忘記要與原圖的膚色保持一致,比如有的人有流海,訓練數據中大部分都是有劉海的圖片,則 Gan 也會認為這個人必須是有劉海的,而不考慮原圖是否有劉海。即使加入了 Condition,Gan 這種「主觀臆斷」和「自以為是」的特點也無法得到根除,總而言之,加入 Gan 以後經常會「過訓練」。 這種情況在筆者之前做的字體生成項目中也出現過,比如在由黑體字合成宋體字時,Gan 經常會自以為是地為「忄」的那一長豎加上一鉤(像「刂」一樣的鉤)。另外 Gan 有一個最大的弊端就是他會過分趨近訓練集的樣本,而不考慮表情因素,比如原圖的人是在大笑,但是訓練集中很少有這類圖片,因此生成的圖片也許只是在微笑。我不禁聯想到了 Nvidia 的那篇論文,沒有條件的 Gan 雖然可以生成高清的圖片,但是沒法人為控制隨機因子 z,無法指定具體要生成生成什麼樣的臉,而有條件的 Gan 樣本又過於昂貴。Gan 的這一大缺點會使生成的視頻中人物表情很刻板,而且畫面抖動的情況也更劇烈,即使加入了強監督的 L1Loss,GAN 還是會有上述弊端。總之在原版的基礎上加入 Gan 還需要進一步地研究,2017 年 Gan 的論文很多,但沒有多少令人眼前一亮的東西,Google 甚者發了一篇論文說,這麼多改進的版本與原版的差別並不顯著,經測試,筆者得到的結論是 Gan 困最難的地方是抖動較大,合成視頻時效果不太好,也許是 Gan 力量太強的原故。

五、結束語

單純從技術的層面上來看,Deepfake 是一個很不錯的應用,筆者更期望它能用在正途上,能在電影製作,錄製回憶片,紀錄片中發揮作用,真實地還原歷史人物的原貌,這可能是無法僅由演員和化妝師做到的,筆者也期望在 2018 年,基於圖像的生成模型能湧現出更多可以落地的應用。

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 【雙語彙】Deepfake/深度造假
    事實上,這些全都是deepfake(深度造假)視頻。 Deepfake由deep learning(深度學習)和fake(造假)組合而成,Wikipedia(維基百科)的解釋是:Deepfake is a technique for human image synthesis based on artificial intelligence.
  • Deepfake技術被稱現代網絡「易容術」 AI換臉如何打假「李鬼」
    Deepfake是一種換臉技術,可以將圖片或視頻中A的臉換到B的頭上。其名字由深度機器學習(deep machine learning)和假照片(fake photo)組合而成。這項技術不需要操作者具備深厚的專業知識,只要收集到足夠素材,AI就可以完成。Deepfake換臉效果逼真,讓人難以分辨真假,這也引發了眾多倫理和隱私問題。
  • AI黑科技之換臉Deepfake的善、惡、醜
    這都是拜最新的黑科技技術deepfake所賜。造「假」的生成對抗網絡Deepfake是深度學習和造假技術的結合。然而,在2017年,一個匿名的redditor,化名,「deepfakes」,在色情視頻中將Gal Gadot的臉覆蓋在視頻中的人臉上。另一個redditor創建了一個應用程式FakeApp,以簡化偽造視頻的過程。現在,在視頻上精確覆蓋人臉的能力比以往任何時候都更容易。
  • ...應用:色情機器人|sensity|telegram|機器人|deepnude|deepfake
    「深度偽造」(DeepFake)被認為是最危險的人工智慧技術之一,可廣泛應用於業務欺詐、輿論操縱、社會工程等多個犯罪領域。但是直到最近,深度偽造技術才有了第一個大規模應用:深度偽造色情機器人(DeepNude)。
  • 《三千鴉殺》AI換臉又遭群嘲,「換臉」技術能在影視圈找到出口嗎?
    官微標註換臉片段方便網友跳過(來源微博)隱私憂患下,AI「換臉」技術商業化受限AI換臉應用最早可以追溯到2017年12月。彼時,有名為「deepfakes」的網友將換臉視頻上傳至Reddit網站,可以將照片和視頻中的人臉替換成任何想要的人臉。
  • 換臉App背後的恐慌:我的臉什麼時候會被偽造,又該如何辨別?
    而如今ZAO的火爆卻證明,換臉對常人的吸引力到底有多大。上熱搜,登頂應用商店,一度被擠爆伺服器,這款簡單的換臉APP獲得了驚人的流量。然而在火爆之後,質疑聲也接踵而至。很多人開始針對ZAO的用戶協議提出批評,直指你的臉有可能被惡意利用,甚至在出現侵權問題時也可能是你來背鍋。
  • ​【Deepfakes】警惕!深度偽造技術的戰場應用
    生活中,人們可以利用深度學習的人臉識別進行身份認證和便捷支付等行為,一度使其被奉為科學技術的又一次革命。然而,前段時間「明星換臉」技術於社交媒體的爆紅,引發了巨大的社會爭議。「深度偽造」是利用深度學習技術中的「對抗生成網絡」模型形成的智能視頻處理技術,「明星換臉」則是該技術最為典型的應用。
  • 音頻版Deepfake詐騙案正在興起,專家:需警惕
    我們看到,在馬斯克的這段演講視頻中,Deepfake的換臉技術幾乎達到了人眼無法區別的地步。不過,隨著技術的不斷成熟,Deepfake卻帶來隱藏的「虛假」風險。自從2017年,一位網友將美國女星和成人電影女主做了人臉交換,偽造了一段色情視頻後,有關濫用Deepfake製造虛假、不良內容的視頻一直充斥於網絡。
  • 從一夜爆紅到全民聲討,換臉應用ZAO究竟做錯了什麼?
    這是近日刷爆朋友圈的換臉應用ZAO逢臉造戲的廣告語。從刷屏走紅到質疑不斷,ZAO僅僅用了一天時間。對ZAO的質疑主要來自AI換臉存在的倫理道德風險,以及ZAO產品本身對用戶隱私和相關信息的保護程度。「AI換臉並不是新技術。」
  • 一文了解Deepfake 2020發展現狀
    事實上,這部名為《Step Brothers》的電影主演是兩位小眾演員,短片創作者利用Deepfake將面部替換成了兩位巨型。短片中,人臉自然、毫無痕跡的融合效果,讓不少網友們驚嘆:太恐怖。但事實上,更讓人恐怖的是短片背後,Deepfake愈演愈烈的負面應用。
  • 「AI間諜」擾亂美國政壇,眾議院提出法案打擊Deepfake換臉技術
    和之前利用 deepfake 技術將某種動作片中的主人公 P 成自己的夢中情人相比,這種技術利用已經上升到了國家安全層面。管理層已無法坐視不理。現有的「造假」技術到底發展到了何種程度?現有的造假技術,包括圖像生成、語音合成、視頻合成等,都取得了很好的成果。
  • 《連線》:AI生成的文字將是最可怕的Deepfake內容
    但現在,距離11月3日還有3個月左右的時間,一波deepfake內容似乎從未斷過。相反,另一種人工智慧生成的媒體形式正在成為頭條新聞,這種媒體更難被發現,卻更有可能成為網際網路上一股無孔不入的力量:deepfake文字。《連線》稱,上個月推出的GPT-3是生成式寫作的下一個前沿:一個可以產生令人震驚的句子的AI。
  • AI換臉ZAO一晚,成本燒掉幾百萬
    2017年底,國外一位ID為「deepfakes」的網友,利用業餘時間創造了一個AI換臉算法。後來這個算法也被廣泛稱為deepfakes。這個機器學習算法,首先在小圈子炸開。在國外的Reddit論壇上,有一個deepfakes社區,一個月內聚集了1.5訂閱者,並產生了大量的AI換臉視頻。
  • ...Deepfake 這個詞語,它在某種程度上將 Deepfake 的含義商品化了。
    你對 Deepfake 有什麼了解呢?你是否知道 96% 的 Deepfake 視頻為色情內容,你是否知道 Deepfake 已經被做成了名人和政要的虛假視頻,造成了不小的影響;你是否知道各個平臺為了打擊 Deepfake 視頻用了哪些騷操作?如果這些你都知道,那你真的很懂新技術和平臺的新政策了。
  • 谷歌 AI 開源 Deepfake 檢測數據集,3000+ 真人...
    谷歌希望能夠通過這些視頻數據,更好的維護整個社會的網絡安全環境,並使得開發者能夠利用這些數據,開發新的 Deepfake 檢測工具,更高效地識別 Deepfake 假視頻。谷歌在博客上發表了相應的文章來介紹這一數據集,雷鋒網 AI 開發者將其整理編譯如下。Deepfake 視頻檢測數據集背景近幾年來,深度學習的發展催生了曾經被認為不可能實現的技術。
  • 騙子盯上AI技術:換臉、騷擾電話提取人聲!
    比聲音合成更高級的騙術是AI換臉。近年來,以「深度偽造」技術(Deepfake)為代表的AI換臉技術日益成熟。通過「深度偽造」技術,可以將圖片或視頻中A的臉換到B的頭上。其名字由深度機器學習(deep machine learning)和假照片(fake photo)組合而成。
  • AI技術直接把影視劇裡的朱茵變楊冪,P圖換臉早就不新鮮了
    「換臉」不難據了解,從換臉程序deepfake傳入國內開始,就有不少網友製作過換臉視頻,把女主播換成楊冪、唐嫣、趙麗穎等國內當紅小花……不過,由於局限於素材和硬體,製作水平參差不齊,大多數視頻在臉型的匹配和表情自然不自然上依然有比較嚴重的問題。
  • AI換臉軟體licolico視頻讓你一鍵AI換臉
    之前電視劇《三千殺鴉》就是用AI換臉技術,因為劇中一位演員在行李過安檢時,她攜帶的易燃易爆噴霧被扣,但她卻趁著安檢人員不注意,將噴霧偷偷拿走,事後被發現,又和現場工作人員產生激烈爭執造成不良影響所以使用AI換臉技術我們想要體驗這種換臉特效
  • 全球首款「反AI變臉刑偵檢測工具」,專用於檢測AI變臉/換臉造假技術
    」,專用於檢測AI變臉/換臉造假技術。 目前,對大量真假難辨的數位化內容進行辨別的工具或應用仍缺乏廣泛的適用性,在涉及到取證、證據分析和鑑別等關係重大的應用方向上,這類工具的可擴展性和穩健性都無法完全滿足實務中的需求。 DARPA的MediFor項目匯集了世界級的研究人員,試圖開發出能夠自動評估圖像或視頻完整性的技術,並將這些技術集成到端到端平臺上。
  • AI換臉越來越溜兒 以技制技打假「李鬼」還不夠
    Deepfake是一種換臉技術,可以將圖片或視頻中A的臉換到B的頭上。其名字由深度機器學習(deep machine learning)和假照片(fake photo)組合而成。這項技術不需要操作者具備深厚的專業知識,只要收集到足夠素材,AI就可以完成。