想要提高DeepFaceLab(DeepFake)質量的注意事項和技巧(一)


第一篇:《簡單介紹DeepFaceLab(DeepFake)的使用以及容易被忽略的事項》
第二篇:《繼續聊聊DeepFaceLab(DeepFake)不斷演進的2.0版本》
第三篇:《如何翻譯DeepFaceLab(DeepFake)的交互式合成器》
本篇:《想要提高DeepFaceLab(DeepFake)質量的注意事項和技巧(一)》

一 常規步驟

如果你已經會用DeepFaceLab,那麼下面的常規步驟一定是很清楚的了。

  • 準備目標視頻:\DeepFaceLab_NVIDIA\workspace\data_dst.mp4
  • 將目標視頻解成每一幀的單獨圖像。
  • 識別目標視頻中的臉部。
  • 準備源臉(可以從某個視頻中提取,但最好是提前準備好)
  • 訓練
  • 合成
  • 合成結果從圖片轉爲\DeepFaceLab_NVIDIA\workspace\result.mp4視頻

下面我準備聊聊這些步驟中的一些注意事項和技巧。

二 注意事項與技巧

2.1 目標臉準備

2.1.1 挑選加工目標視頻

首先目標視頻不能太模糊。
當然也不能過於銳利。
像電影風格的畫面或者噪點很多的視頻,我們在得到目標視頻前,最好對視頻進行一下降噪處理。

如果面部太模糊識別可能出錯,或者位置偏差。
如果面部噪點太多那麼訓練中容易把噪點當成面部特徵。

PS:下面片段就進行了降噪處理。
Sample image

2.1.2 目標視頻幀解成圖片

將目標視頻解成圖像,
這一步基本不會有什麼問題:

3) extract images from video data_dst FULL FPS.bat

執行這個批處理命令後,\DeepFaceLab_NVIDIA\workspace\data_dst.mp4,
就會被解開每一幀成爲若干圖片,如果你機器好空間大可以選png格式,否則就選jpg吧。
解開的圖片在:\DeepFaceLab_NVIDIA\workspace\data_dst\下,命名方式是00001.jpg到xxxxx.jpg。
在這裏插入圖片描述

2.1.3 識別目標幀中的面部

雖然可以用這句全自動執行:

5) data_dst extract full_face S3FD.bat

但最好用下面這一句,在自動識別完成後,手動去修正未能識別到面部的幀。
如果你的目標視頻面部非常清晰,沒什麼運動模糊的場景,也可能需要手動修正的幀爲0。

5) data_dst extract full_face S3FD + manual fix.bat

2.1.4 去掉其他人的多餘面部

有時一幀圖像裏有2個或多個人,我們需要去掉不需要替換的人臉。
有時也會識別錯誤,把不是人臉的東西識別成人臉,這也需要去掉。

我們可以檢查解開後的臉部:
\DeepFaceLab_NVIDIA\workspace\data_dst\aligned\00001_0.jpg到xxxxx_x.jpg
如果出現了:xxxxx_1.jpg 甚至 xxxxx_2.jpg,說明這一幀裏面有其他的臉。
我們大概瀏覽後,就可以直接刪掉那些不用的臉。
最終我們確認,只剩一個人臉,沒有別的奇怪的東西。
在這裏插入圖片描述

2.1.5 重新識別扭曲的面部

然後我們再檢查解開臉部的debug目錄:
\DeepFaceLab_NVIDIA\workspace\data_dst\aligned_debug\00001.jpg到xxxxx.jpg
如果可能的話,確認每一幀都是正確的。下面的圖就是正確的例子:
在這裏插入圖片描述
有時雖然需要的臉部位置大概正確,但是五官卻有些扭曲。
這裏沒有適合的例子……
假設下圖女生的臉部是我們需要的(只是舉例,這裏找不到神奇女俠識別扭曲的圖片),那麼這張圖就扭曲了。
我們需要找到類似這種我們需要的臉,但是識別扭曲了的debug目錄下的圖片,刪掉debug圖片,執行下面的腳本:

5) data_dst extract full_face MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG.bat

通過這個腳本,重新手動來識別一次刪掉的圖片,保證得到正確識別的臉部。
在這裏插入圖片描述

2.1.6 手工修正面部遮罩

執行腳本:

5.3) data_dst mask editor.bat

檢查每一張臉部遮罩,注意範圍,不要有遮擋物,不要包括了頭髮。
PS:之前對比度太高,後來稍微調節了一下目標視頻,但是頭髮等部位的識別還是有偏差。
在這裏插入圖片描述
有時候真的需要一幀一幀的看。。。
在這裏插入圖片描述

2.1.7 二次確認

每個步驟我們做完以後,都可以再進行一次。
檢查一下我們修正的結果。
正確的臉是最重要的。

2.2 源臉準備

源臉可以和目標臉一樣,從一段視頻中取得。
但最好事先多費點時間,先準備好臉部集合,遵從下面的規則:

  • 儘量不要劉海
  • 臉部不要有其他遮擋物(比如手,話筒)
  • 女生的話最好妝容統一(不同妝容的可以準備多套,一套內最好統一或者接近)
  • 儘量有各種角度,各種光照方向。
  • 足夠清晰,不要模糊的。

準備了足夠多的臉部後,我們可以執行:

4.2) data_src sort.bat

對源臉進行排序(左右方向,上下方向,模糊,相似),通過排序,我們去掉那些模糊的,遮擋的不適合的。
源臉和目標臉最大的區別是:源臉不合適直接刪掉就OK了,而目標需要的臉每一幀都得識別正確。

2.3 訓練

我們可以先用Quick96模型試試:

6) train Quick96.bat

因爲Quick96不需要任何參數,而且作者有經過預訓練,所以出成果的時間非常短。
第一次運行我們需要給模型起一個名字。
如下,可以看到偏離的數字下降真的是非常快:

Running trainer.

[new] No saved models found. Enter a name of a new model : WW
WW

Model first run.

Choose one or several GPU idxs (separated by comma).

[CPU] : CPU
  [0] : GeForce GTX 1060 6GB

[0] Which GPU indexes to choose? :
0

Initializing models: 100%|###############################################################| 5/5 [00:03<00:00,  1.40it/s]
Loading samples: 100%|############################################################| 1041/1041 [00:01<00:00, 815.12it/s]
Loading samples: 100%|################################################################| 82/82 [00:00<00:00, 285.19it/s]

...
...

Starting. Press "Enter" to stop training and save model.

Trying to do the first iteration. If an error occurs, reduce the model parameters.

[16:18:28][#000002][0257ms][6.3158][6.6779]
[16:33:23][#003987][0236ms][1.0592][0.4914]
[16:48:23][#007997][0234ms][0.7373][0.2563]
[17:03:23][#011972][0237ms][0.6592][0.2110]
[17:18:23][#015925][0236ms][0.6155][0.1879]
[17:33:23][#019846][0224ms][0.5847][0.1736]
[17:48:23][#023784][0237ms][0.5622][0.1631]
[18:03:23][#027712][0249ms][0.5421][0.1546]
[18:08:19][#029013][0225ms][0.5331][0.1666]

此例中可能也因爲片段短吧,兩小時不到就這個程度了:
PS:爲了保護隱私,源臉我打馬賽克了……
在這裏插入圖片描述

當然如果訓練半天,發現偏離數值一直下不去,那麼可能就得停下來檢查一下了。
看看有沒有下述的情況,否則是得不到理想的結果的。

  • 源臉沒有覆蓋目標臉的方向?
  • 目標噪點太多?
  • 清晰度不夠?
  • 扭曲太大?

如果沒有問題,那麼Quick96訓練個8-24小時,基本效果就出來了。

2.4 合成

既然例子裏面選的是Quick96,那麼就執行進行合成:

7) merge Quick96.bat

當然我們要用交互式合成器:

Running merger.

[y] Use interactive merger? ( y/n ) :
y
Choose one of saved models, or enter a name to create a new model.
[r] : rename
[d] : delete

[0] : WW - latest
 :
0
Loading WW_Quick96 model...

Choose one or several GPU idxs (separated by comma).

[CPU] : CPU
  [0] : GeForce GTX 1060 6GB

[0] Which GPU indexes to choose? :
0

Initializing models: 100%|###############################################################| 4/4 [00:00<00:00,  8.32it/s]

...
...

Collecting alignments: 100%|##########################################################| 82/82 [00:00<00:00, 425.96it/s]
Computing motion vectors: 100%|####################################################| 158/158 [00:00<00:00, 2597.34it/s]
Running on CPU1.
Running on CPU2.
Running on CPU0.
Running on CPU5.
Running on CPU3.
Running on CPU6.
Running on CPU4.
Running on CPU7.
Running on CPU8.
Running on CPU9.
Running on CPU10.
Running on CPU11.
Running on CPU12.
Running on CPU13.
Running on CPU14.
Running on CPU15.
Merging:   0%|                                                                                 | 0/158 [00:00<?, ?it/s]

MergerConfig 00001.jpg:
Mode: overlay
mask_mode: learned
erode_mask_modifier: 0
blur_mask_modifier: 0
motion_blur_power: 0
output_face_scale: 0
color_transfer_mode: rct
sharpen_mode : None
blursharpen_amount : 0
super_resolution_power: 0
image_denoise_power: 0
bicubic_degrade_power: 0
color_degrade_power: 0
================

如果你需要中文,請看上一篇,關於合成器的翻譯(我更喜歡英文原版):
在這裏插入圖片描述
Tab從幫助界面切換到主界面(預覽界面)。
什麼參數都沒調整,是下面這個不忍直視的樣子……
在這裏插入圖片描述
調整了下如下圖:
在這裏插入圖片描述
Shift+?/把這一幀的配置,覆蓋後面全部幀。

再按Shift+>處理後續全部的幀。

這裏只是個例子,我們需要:

  • 多訓練降低偏離度
  • 可以通過反覆調整參數來得到最好的效果
  • 如果需要的話,每一幀的參數都可以不一樣(微調)

2.5 合成到視頻

執行腳本將合成後的幀,最終合成視頻(包括音頻):

8) merged to mp4.bat

如果你需要進一步處理視頻。
那麼請選個比較大的比特率來保存視頻(160Mbps?)。

PS:此例訓練時間太短,效果不好。
在這裏插入圖片描述

2.6 蛤?重來一次

我們可以等Quick96訓練一天再看結果。

但是如果我們通過Quick96已經確認臉部和訓練都沒有什麼問題,而96的分辨率無法滿足視頻的清晰度,那麼也可以停下來,用SAEHD來進行訓練。

6) train SAEHD.bat

SAEHD模型有豐富的參數調整,可以取得更好的效果。
但是速度相對比較慢,而且需要自己理解各種參數。
如果你顯卡很好比如1080TI級別的,那麼不用考慮,提高分辨率吧。

三 教程也會失敗

  • 第一次嘗試失敗,對比度過高。
  • 第二次嘗試失敗,遮罩修改過多。
  • ……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章