換臉-入門

目前深度學習的應用已經深入各個方向,涌現了很多有意思的技術,尤其是最近很火的面部互換很有意思,本文將結合原理與代碼來進行一個比較簡單的入門介紹,分爲以下兩個部分:

原理
代碼

原理

Autoencoder

首先來看autoencoder結構,見下圖所示:
在這裏插入圖片描述
圖1. autoencoder結構

輸入(圖像)-網絡層-隱向量-網絡-輸出(圖像),即將輸入圖像通過網絡(encoder)編碼爲一個向量,然後再通過網絡(decoder)將向量解碼爲圖像,訓練的時候通常採用重構loss(l1l_1l2l_2 loss).

Training

在這裏插入圖片描述
圖2. 訓練過程

網絡結構可以看成包含兩個並列的autoencoder,只不過它們的encoder是參數共享的。訓練時,分別從A人物與B人物中取N張圖像,先將N張A人物人臉圖像輸入進網絡,得到A人物的輸出;再將B人物的N張人臉圖像輸入網絡,得到B人物的輸出。進行loss計算時,分別對人物A與人物B的輸出與輸入進行l1l_1或者l2l_2重構loss的計算即可。訓練若干次epoch之後即能看出效果。

Inference

在這裏插入圖片描述
圖3. 測試(使用過程)

測試的時候比較取巧,分爲以下四種情況:

  • A===>A. 組合方式爲: 輸入A人臉圖像 + encoder + decoder A 的方式即可得到A的重構圖像
  • B===>B. 組合方式爲:輸入B人臉圖像 + encoder + decoder B 的方式即可得到B的重構圖像
  • A===>B. 組合方式爲:輸入A人臉圖像 + encoder + decoder B 的方式即可得到A與B的換臉圖像
  • B===>A. 組合方式爲:輸入B人臉圖像 + encoder + decoder A 的方式即可得到A與B的換臉圖像

代碼

使用的代碼爲:https://github.com/Oldpan/Faceswap-Deepfake-Pytorch

裏面包含了很詳細的使用說明,抽幀+提取人臉+訓練+測試,這些操作都有。代碼寫的也很簡單易懂,這裏就不再詳細展開。貼一些訓練中的過程,可以有個直觀的感受。

在這裏插入圖片描述
0次迭代

在這裏插入圖片描述
100次迭代

在這裏插入圖片描述
10000次迭代

在這裏插入圖片描述
30000次迭代

在這裏插入圖片描述
50000次迭代

在這裏插入圖片描述
99900次迭代

每張圖像中由12列四組構成(每3列構成一組),分別表示不同的人臉,其中每一組的第一列表示輸入人臉圖像,第二列表示本人人臉重構(即輸入人物與decoder對應),第三列表示換臉結果。可以看出,隨着訓練次數的增加,本人人臉重構越來越精確,在達到一定訓練次數之後,換臉結果也較爲逼真。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章