DeepFakes 換臉技術

簡介:

Deepfakes是一種ML(Machine learning)中的深度學習實現視頻換臉的技術,雖然在應用上時常被認為是破壞社會秩序的邪惡技術,甚至連微軟和臉書都共同發起名為Deepfake Detection Challenge大賽,為的就是希望邀集各方好手打造能供大家辨識造假影片的技術,才能在Deepfakes視頻在社群網路上散佈的第一時間銷毀影片以降低傷害(聽說已經有偵測是否為Deepfakes的工具了?)。

所以呢,在大學二年級的放著寒假的我在閒暇之餘就想實際操作一次Deepfakes,接下來聽我娓娓道來(X

1. 獲取軟件,安裝,說明

因為敝人能力不足,所以這次就使用在換臉屆鼎鼎大名的DeepFaceLab 開源進行這次的測試。

首先要先確認自己的硬體配置,是打算用CPU還是GPU呢?(這種有關矩陣圖形運算當然是建議GPU囉,速度大概會差到10倍之多),GPU是Nvidia還是AMD呢?(強烈建議Nvidia,因為早期N卡與許多大學有產學合作,在機器學習方面N卡是大領先),硬體配置會影響到等等要下載的程式還有運行的選項。在這裡我以AMD(RX570 8G)作為運算工具(要不是因為敝人經濟拮据,我也會拿RTX8000作為運算工具啊)。

進入DeepFaceLab後往下尋找就能看到最新釋出的版本

按照自己的作業系統來選擇吧! (這裡以Windows作為示範)

如果你是Nvidia顯卡就點Nvidia_build(當然 裡面也有CUDA可供選擇)

如果想用CPU或是使用AMD顯卡就點選"DeepFaceLab old" (old...QAQ)

這裡我點old

好的 暴露在風險中吧(X

仍要執行後開始解壓,解壓在讀寫快的硬碟吧,後面在做模擬計算時也會比較快速(主要還是CPU or GPU決定速度)。

這是解壓後資料夾內的樣子,是無安裝的綠色軟件喔><

下面會開始介紹某些資料夾和.bat檔是幹嘛用的 (先不要點返回鍵XD)

先介紹workspace資料夾,因為它是等等素材的大倉庫

data_dst: source源頭資料夾

data_src: destination目地資料夾

model:模型資料夾

然後下面兩個MP4檔是meme常用的"just do it!!"還有鋼鐵人講話的影片作為素材

1.清空工作資料夾(小心手賤)

2.分解來源影片(硬件性能差的可考慮低偵分解)

3.1請自行直翻(需要自己編輯)

3.2分解目標影片

4.A卡同學有S3FD識別法,N卡同學可以選擇使用DLIB或MT臉部識別法來識別來源影片之臉部(另外可調試GPU效能選項),另外avatar only就是頭像限定喔

4.1檢查檢果

4.2來源排序(等等解釋)

5.選擇使用S3FD(DLIB或MT)臉部識別法來識別目標影片之臉部(另外可調試GPU效能選項),另外manual fix是手動對齊,必要時可用。

5.1檢查檢果

5.2目標排序(等等解釋)

6.訓練方法,關係到硬件性能(等等細講)

7.開始Convert

8.選擇導出格式

兩個PDF檔為說明書

2.實作

將要導入之來源影片及目標影片放在workspace資料夾底下並分別重新命名為"data_src"及"data_dst"

這裡用原有的兩支影片做示範

先點下"2."(分解來源影片)

因為是.bat檔所以跳出cmd視框別以為電腦壞了XDD

前面會問你要多少視頻偵率?輸出圖片檔案格式? 這裡都直接按Enter鍵默認了


檢查一下工作管理員...CPU 100% GPU20%...,不易外,分解檔案本來就是CPU的工作。

接下來到來源資料夾檢查...約莫700張1920*1080的圖片 成功!

接下來按"3.2"(分解目標影片)重複動作至目標影片上.....略過。

再來開始切臉囉(因為影片是全身的嘛,所以自製素材時也注意要清楚拍到整張臉)

按下"4."(選擇使用S3FD臉部識別法來識別來源影片之臉部)

這裡稍微給N卡同學說一下,因為MT識別比較真實但是效率較差,如果對自己的硬體有信心就請便吧,這裡我也只能用S3FD識別法(best GPU)。

一開始"可能"詢問Which GPU,給多卡運算的同學使用。

OpenGL的S3FD best GPU faces extracted會進行三次的確認,前兩次用GPU識別,最後一次用CPU判斷正確。

從上圖可以看到,faces extracted並不怎麼吃VRAM(顯卡記憶體),只佔了1GB左右(時脈為1500Mhz,無OC),反而全看核心數,核心時脈及通道速度(本卡滿載為1700Mhz)。

最終結果會顯示出有幾張"有人臉"的照片(難免有漏網之魚)

P.S. 建議把GPU風散速度全開才不會撞到溫度牆而降頻

P.S. 耗時約莫10分鐘

Workspace裡可以發現已經提取好的人臉

接下來挑出重複性極高的照片(有沒有眨眼不算),將其刪除將會大大的提升機器的學習效率。

接下來按"5."(選擇使用S3FD臉部識別法來識別來源影片之臉部)重複動作至目標影片上.....略過。

P.S. 耗時約莫30分鐘

在workspace資料夾的目標資料夾裡有一個"aligned_debug"文件夾,是拿來進行面部輪廓的修正,如果要更逼真可以再進行處理。

再來的步驟最為關鍵,查看6.(訓練方法)將會發現有許多種訓練方法,列表解釋。

AVATAR:阿凡達模型,使用難效果差配置要好,不建議。

DF:屬於全臉模型,VRAM要求6G以上。

H64:通用性最高的半臉模型 ,頭像的分辨率為64 *64px, VRAM要求3G以上。

H128:跟H64只差在分辨率為128*128px,VRAM要求6G以上,效果略差於DF 。

LIAEF128:全臉模型,將改變你來源的臉型,輸出結果有點怪(臉型相似的話可以試試),VRAM要求3G以上。

Quick96: 完全不Quick,VRAM要求2G以上。

SAE:彈性更高的模型,可變參數多,默認分辨率是128*128px(可調),VRAM要求3G以上。

SAEHD:最新的算法,SAE的升級版,VRAM要求6G以上。

這裡使用H64

進入cmd後它可能會先問妳很多很多參數設定(要全臉還是半臉,要不要自動儲存,顯卡功率設置,色調處理等等.....),基本可以全部默認。

注意!!:建議不要打開bios 裡 power limit option 來增加速度,GPU的功耗不單單只是廠商給的TDP數值這麼簡單,峰值瓦數非常飄忽不定,一張TDP 200w的GPU實際壓力測試時峰值瓦數會來到將近400w,power limit是給GPU的保護也是給power supply的保護。

這是訓練時的系統監控

訓練過程中換CPU放空

RAM全部吃滿,功耗52瓦???

如果是RTX8000 48G VRAM...算了當我沒說

而使用時可以實時預覽訓練過程

第1,3行是學習前,第2,4,5行是學習後

按"s"儲存學習結果

按"p"更新學習狀況(學習沒有如此輕鬆過XD)

按"enter"退出

此圖為開始訓練20秒

可以看出來小勞勃·道尼的臉很猙獰

小插曲:

放著讓電腦自己學習的過程中,因為RAM的不足導致Training preview直接崩潰,害我浪費了30分鐘=.=

再次說明了要玩AI硬體配置真的要夠強QAQ

然後電腦可以放著跑了,這裡我是直接選擇去睡覺,正所謂睡眠學習法XDD,大概讓它算個6~10萬次,時間的長短就要看顯卡的好壞囉。

隔天早上

睡的很爽XD,過了大概10個小時後機器已經學習了12萬次了,從圖中也能發現基本上已經能精準的對應到所有的表情變化,接下來就要開始進行convert。

再來按"7."進行換臉,一開始會問你是否Use interactive merger? ,默認是Yes,打開交互式調整介面。

交互式調整介面大概長這樣,可以進行預覽。

調整"faces scale"是必要的。

給一個小小的技巧,"blur"可以模糊來源的臉,如果覺得來源與目標的界線太分明而產生違和感的話可以增加模糊度,不過不要調太多不然整張臉會糊掉。

決定好之後可以選擇套用至所有圖片(你要慢慢一張一張調也可以啦)。

按下迴車後會開始進行convert,圖中可以發現有時候會發生錯誤,原因是目標模特有時候用手把臉擋住的時候很難進行建模,機器就不想管了,它會自動刪除錯誤的圖片(不用擔心,一秒的影片通常有60張相片)。

進行圖像切割,渲染,重組是CPU的工作。

完成後在workspace>data_dst>merged裡可以找到merge後的圖片,這裡放一張。

再來按"8."選擇你要的影片格式(mov,mp4,avi),這裡我很奢侈的點mp4。

再來要選擇mp4的碼率,默認16bit。

大功告成啦

一樣在workspace裡可以找到"result.mp4",這樣就成功了,在下次新的工作前別忘了clear workspace。

下面我會嵌入我的成果影片,這次就先這樣,下次再分享進階版的(Debug和iso調整)。