AI換臉實戰教學(FaceSwap的使用)---------第一步Extration:提取人臉。

凍雨冷霧發表於2022-01-28

市面上有多款AI換臉的方法,筆者這裡節選了Github那年很火的開源專案FaceSwap:

(很早就實踐了,但是忘記記錄啦hhh,請勿用於不正當用途哦)

做了一篇詳細教學,包括配置,引數設定,換臉效果經驗之談。感興趣的學友可以留言一起交流。

先上成果展示下吧(垃圾顯示卡跑了2天,有條件好的顯示卡跑個1周估計效果會好一些):

左邊是替換後的效果,別告我侵權,求你了。。沒有商業用途。。

 

 

配置部分

ok,為了實現換臉,我們先從安裝到配置工具開始(配置好的請直接跳到第一步),以下請按步驟操作:

首先需要下載該專案,這裡建議直接下載GUI版軟體:https://faceswap.dev/download/

然後是安裝:

 

 

 第一頁選擇安裝地址,根據自己喜好。

 第二頁需要選擇GPU或者CPU版。 有支援的GPU進行訓練當然是最好的,如果沒有的話只能CPU了(提取,訓練過程很慢)

 

{ PS: 如何查詢是否支援呢,

GPU版需要保證三個包是匹配的:

tensorflow-GPU, cuda,cudnn

首先,更新顯示卡驅動:https://www.nvidia.com/Download/index.aspx?lang=en-us

其次,下載與GPU匹配的cuda:https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64

最後,下載與GPU匹配的cudnn:   https://developer.nvidia.com/zh-cn/cudnn

最最後下載tensorflow-GPU

}

 

安裝好以後啟動,介面如下:

 

(landmark是68個點,提取生成的帶landmark和遮罩的檔案格式是fsa,不是fsd,懶得重寫了,hh)

 

操作部分

第一步:

 

好的,我們開始第一步,  extract的目的是:從視訊中的每一幀提取人臉,生成圖片集和一個fsa檔案(帶landmark和mask的資料集),用於模型訓練的輸入。

什麼是landmark?如下圖,是指演算法識別出的每張圖片人臉邊界的68個點。

什麼是mask?如下圖,是指演算法識別出的每張臉的臉區,摒棄遮擋/背景/頭髮等資訊。

 

簡單來說,提取包括三個階段:檢測、對齊和遮罩生成:

  • 檢測- 在框架內查詢人臉的過程。檢測器掃描影像並選擇影像中它認為是人臉的區域。
  • 對齊- 找到面部內的“landmark”並一致地定向面部。這會將候選者從檢測器中取出,並嘗試找出潛在面部的關鍵特徵(眼睛、鼻子等)在哪裡。然後它會嘗試使用此資訊來對齊面部。
  • 遮罩生成- 識別包含面部的對齊面部部分,並遮蔽那些包含背景/障礙物的區域。

1.1 Data模組:

  • Input Dir:首先我們需要一個原始檔。此處設定為視訊檔案(視訊圖示)或包含一系列影像的資料夾(圖片圖示)。

  • Output Dir:接下來我們需要告訴程式將提取的人臉圖片集儲存到哪裡。單擊旁邊的資料夾圖示以選擇輸出位置

  • Alignments:此選項用於為對齊檔案指定不同的名稱/位置。建議留空,則生成的fsa檔案會儲存到預設位置,與源視訊名字相同(與源視訊/源圖位於同一位置)

1.2 plugins對應的設定如下圖:

 

1.2.1 遮罩

plugins模組用於首先檢測影像中的人臉、讀取人臉標誌以對齊影像並使用各種遮罩方法建立遮罩。

  • Detector, Aligner:檢測和對齊的演算法,推薦使用S3FD作為檢測演算法, FAN作為對齊演算法 。(二者效果好,對顯示卡要求高)

  • Masker:遮罩的演算法除了基於人臉landmark的遮罩之外,此處是另一種針對人臉區域的特殊遮罩(可不選,也可多選,好的遮罩演算法有助於過濾掉遮擋物)。遮罩都使用 GPU,因此新增的遮罩越多,提取速度就越慢。

    每個面具/遮罩都有不同的優點和缺點。(後面訓練和轉換的過程中若是基於神經網路的遮罩進行訓練或轉換原始檔時,建議此處選一個遮罩演算法)

    ps: 遮罩此處可不選,在步驟二中對fsa資料集優化後,在Tools裡同樣可以補充再搞這個步驟。

遮罩演算法對比:

  • BiSeNet-FP,從面具中排除頭髮和耳朵(預設設定):
  • BiSeNet-FP,面罩中包含頭髮和耳朵的(全頭訓練所需的頭髮),可在介面上方的setting中找到對應的遮罩設定:
  • Unet-DFL - 一種神經網路掩碼,旨在提供大部分正面的智慧分割。面具模型已經過社群成員的培訓。
  • VGG-Clear - 一種神經網路掩碼,旨在對大部分正面沒有障礙物的人臉進行智慧分
  • VGG-Obstructed - 旨在提供大部分正面的智慧分割。面具模型經過專門訓練,可以識別一些面部障礙物(手和眼鏡)。
  • landmark 68個點遮罩(不選也會有,真正的預設遮罩,有時候因為臉的不全原因,所以還是要加上上面的某1個或幾種遮罩):
  •  

    PS: 預設landmark遮罩的其中一個主要大問題是這個演算法僅會囊括檢測的臉眉毛上方,有可能會造成最終換臉兩重眉毛的效果,這也是以上這些自選演算法遮罩的目的,能夠讓識別到眉毛上方的地方,避免這個問題。

1.2.2 歸一化

Normalization, 顧名思義,資料集的歸一化:歸一化可以在光照不理想的情況下更好地找到人臉。不同的歸一化方法適用於不同的資料集,實測的話推薦“hist”歸一化。選正則選項的話會稍微減慢提取速度,但對齊效果更好。

1.2.3 二次對準

Re Feed:此選項會將稍微調整過的檢測到的人臉重新送回對準器,然後平均最終結果。這有助於減少“微抖動”。 如果是用於訓練資料集,即第三步Training用,設定其為0,如果是為了轉換,設在0-8,反覆提取可以實現精益求精用,但是會慢很多),效果也截一個。

下圖顯示了 re-feed 設定為 8(左)與 re-feed 設定為 0:

1.2.3  旋轉影像

Rotate Images:針對 CV2-DNN !,可能會無法識別旋轉後的人臉。其他對齊演算法選這個會降低速度,毫無收益。

1.3 人臉處理

Min Size:設定一個高於零但比較低的值,用以過濾掉明顯太小而不能成為臉的東西。(取決於源視訊中人臉的大小,比如都很小,那這個值確保比源視訊中的常見臉的尺寸要低,比如一個電影片段,鏡頭裡除了需要提取的主人公的臉,旁邊還放有一本書上,書有人臉,這個值就是卡掉書上的這個大小的人臉,確保不算在內)

Filter/nFilter, Ref Threshold:這倆選項用於過濾掉不需要的臉。什麼意思呢,就是針對性的要誰的臉(Filter選一張照片),或者針對性的不要誰(Nfilter上傳N張你不想要檢測到人臉的照片,記住是每個照片必須只有一個人臉,可以傳多張,用以遮蔽多個人)。Ref Threshold用於取決於判斷的嚴格度,就是拉到1的話就很鬆,越低就越嚴,相當於你想要的監考老師的分數,嚴的就很難受,分數就低。

PS: Filter/nFilter, Ref Threshold這部分可以不上傳圖,靠第二步的tools相關功能去篩選不想要的臉,根據官方FAQ的說法,用TOOLS在第二步中處理效率更高,因為如果使用了這個過濾器明顯的會降低提取速率。

 

1.4 輸出設定

Size: 提取影像的大小,通常 512px 對於大多數模型來說都可以(全頭提取影像的大小),這個就是神經網路的輸入圖片畫素,不同演算法可能僅支援固定格式的輸入圖片大小。比如對於“面部”居中,模型可用的影像大小將為 384 畫素。使用“傳統”居中進行訓練時,可用的影像大小為 308 畫素。

Extract Every N: 這個選項意思是,多少幀提取一個臉,我舉個例子,一般的25fps的視訊,有可能25幀每一幀的變化很小,那麼就是提取了一堆相似的廢物資料集,實際上每12-25提取一次就行(大約是半秒到1秒,也就是你換個表情和表情變化怎麼也得半秒,不信的話你自己試試。。。)

Save Interval: 儲存間隔,隨緣吧,多少幀儲存一次。預設就行,預設就是全搞完了一次性存下來。

Debug Landmarks: 在提取的臉上調整landmarks(做事真就這麼細?,正常不勾選)

 

1.5 設定,全域性設定

Settings: 不解釋了,跳過已有的(指當前fsa檔案中),跳過已有的臉(指當前fsa檔案中),跳過已儲存過的臉

Exclude Gpus: 哪個CPU你不想在跑的時候使用, 你如果全勾選了(說明你不想用任何GPU),會變成CPU模式?

Configfile:載入一個配置(就是剛剛設定的這些玩意可以儲存,下次直接載入就行)

Loglevel: 日誌型別,預設就行。選debug會有報告(你願意看的話),選TRACE會有一大堆資料生成?

Logfile:log存放地址路徑,留空預設生成在faceswap的目錄下。

 

以上選好的話,

第一步,完成。

 

下一章教大家如何利用tools模組裡的各種工具。

{

Alignments:排序,刪臉,提取,重新命名

Effmpeg: 視訊組裝合成

Restore:恢復訓練的模型

Mask: 新增遮罩

Sort:排序

Preview:交換效果預覽

)

 

 

 

第二章Tools部分月內更新吧,反正也是自己看的。。

最後,操作流程的任何問題都可以在官方FAQ中找到,貼個地址,真有問題,去社群發帖問或者留言探討~

https://forum.faceswap.dev/app.php/faqpage

 

相關文章