DeepFake 入門了解

2021-10-01 04:12:21 字數 1977 閱讀 8512

換臉到底是什麼樣的操作

deepfake,是由「deep machine learning」(深度機器學習)和「fake photo」(假**)組合而成,本質是一種深度學習模型在影象合成、替換領域的技術框架,屬於深度影象生成模型的一次成功應用。

其實該技術最早版本在2023年初就被提出了,當時在構建模型的時候使用了encoder-decoder自編解碼架構,在測試階段通過將任意扭曲的人臉進行還原,整個過程包含了:獲取正常人臉**=>扭曲變換人臉**=> encoder編碼向量 => decoder解碼向量 => 還原正常人臉**五個步驟。而zao在encoder-decoder的框架之上,又引入了gan(生成對抗網路)技術,不但降低了同等條件下的模型參數量和模型複雜度,同時使生成的人臉更為清晰,大大降低了對原圖的依賴,顯著提公升了換臉的效果,而且基於gan技術的deepfake改進版已經在github開源。

儘管「deepfake」這類應用非常吸引人,但落到實處還是會引發很多的問題,不論是倫理還是隱私。後面我們將介紹生成對抗網路和變分自編碼器兩種換臉的解決方案,也許大規模應用還能進一步催生效果更好、算力更少的解決方案。

直觀而言,gan 這類生成模型可以生成非常逼真的人臉影象,那麼現在需要將某個人的特點遷移到另一張人臉上,這就需要更多的模組來定義需要遷移的位置與特點。

總體上,「deepfakes」換臉主要分為以下過程:

人臉定位

人臉轉換

影象拼接

其中人臉定位已經非常成熟了,一般定位演算法可以生**臉的特徵點,例如左右眉毛、鼻子、嘴和下巴等等。人臉轉換也就是採用 gan 或 vae 等生成模型,它的目標是生成擁有 a 表情的 b 臉。最後的影象拼接則是將人臉融合原圖的背景,從而達到只改變人臉的效果。

人臉定位

人臉定位也就是抽取原人臉的表情特徵,這些特徵點大致描述了人臉的器官分布。我們可以直接通過 dlib 和 opencv 等主流的工具包直接抽取,但它們一般採用了經典的 hog 的臉部標記演算法。這種演算法根據畫素亮度差確定一些「箭頭」,從而找到人臉顯著的特徵點。

如上是一些人臉特徵點,如果我們想換臉的表情更加真實和準確,那麼也可以使用目前主流的人臉識別演算法,它利用捲及網路能生成更完美的特徵點。但是這類深度模型需要更大的算力,尤其是在處理高解析度影象時。

人臉轉換

首先對於變分自編碼器(vae),我們知道它希望通過無監督的方式將人臉影象壓縮到短向量,再由短向量恢復到人臉影象。這樣短向量就包含了人臉影象的主要資訊,例如該向量的元素可能表示人臉膚色、眉毛位置、眼睛大小等等。

所以如果我們用某個編碼器學習所有人,那麼它就能學習到人臉的共性;如果再用某個解碼器學習特定的某個人,那麼就能學習到他的特性。簡單而言,當我們用通用編碼器編碼人臉 a,再使用特定解碼器 b 解碼隱藏向量,那麼就能生成出擁有 a 的人臉表情,但卻是 b 人臉的影象。

這就是 vae 的解決方案,對於 gan 來說,它會利用抽取的人臉特徵點,然後根據生成器生成對應的目標人臉影象。這時候,編碼器同樣也會將真實的目標人臉編碼,並和生成的目標人臉混合在一起。因此,如果判別器不能區分根據某人特徵點生成的人臉和真實人臉有什麼區別,那麼生成的人臉就非常真實了。

如上所示為** few-shot adversarial learning of realistic neural talking head models 的解決方案,它只需要幾張目標人臉圖,就能根據原人臉的特徵點生成極其逼真的效果。

追蹤頭部動作

每個人都有獨特的頭部運動(如開始陳述事實時點頭)和面部表情(如表達觀點時得意得笑),但 deepfakes 中人物的頭部動作和面部表情都是原人物而非目標人物的。

(a)原始人物;(b,c)分別是 deepfake 人物。

機器學習筆記51 deepfake

參考資料 1.deepfake的autoencoder deepfake本質上是乙個基於卷積神經網路的autoencoder 程式將原始影象做處理後分別作為編譯碼的源和目標 編譯碼模型的定義在model檔案中,核心 如下 autoencoder原理參考筆記 機器學習筆記50 autoencoder ...

awk入門了解

1.什麼是awk awk是一種程式語言,主要用來處理資料和產生報表,它對輸入資料 檔案 標準輸入或命令的輸出 逐行進行掃瞄,匹配指定的模式,並執行指定的操作。2.awk語法格式 awk pattern filename awk掃瞄filename中的每一行,對符合模式pattern的行執行操作act...

Hooks入門了解

hooks 是乙個讓函式元件具有類元件能力的功能,它將顛覆react的開發模式,它代表react未來的開發方式。比如 我們通常宣告乙個元件都要寫乙個class類,hooks讓我們可以用乙個function來實現。寫法舉例 import react,from react function mycoun...