DeepFaceLab: A simple, flexible and extensible face swapping framework 一个简单、灵活和可扩展的人脸交换框架
DeepFaceLab: A simple, flexible and extensible face swapping framework
一個簡單、靈活和可擴展的人臉交換框架
文章目錄
- DeepFaceLab: A simple, flexible and extensible face swapping framework
- 一個簡單、靈活和可擴展的人臉交換框架
- 前言
- 核心
- 提取(Extraction)
- 人臉定位:人臉檢測提取的第一步是在給定的文件夾中找到目標人臉:src和dst。DFL使用S3FD [34]作為其默認人臉檢測器。顯然,你可以為你指定的目標選擇任何其他的人臉檢測算法來代替S3FD,即視網膜人臉[5],MTCNN [33]。
- 人臉對齊:DFL提供了兩種典型的面部標志提取算法來解決“能夠隨著時間的推移保持穩定”的人臉標志算法問題:(A)基于熱圖的面部標志算法2DFAN [2](對于具有正常姿勢的面部)和(b)具有3D面部先驗信息的PRNet [6](對于具有大歐拉角(偏航、俯仰、滾動)的面部,例如具有大偏航角的面部,意味著面部的一側看不見)。
- 人臉分割:人臉分割階段采用了人臉分割網絡TernausNet,來分割出頭發、眼鏡、手部這些可能會對人臉的變換有影響的點。最后生成一個人臉區域的mask,用于決定最后的生成部分。
- 訓練(Training)
- 轉換(Conversion)
- 項目實踐
- Step 1:
- 1.安裝方法:
- 2.目錄簡介:
- Step 2:
- 項目開始
- 1.提取圖像(EXTRACT IMAGES)
- step1:doc(2):extract images from video data_src
- 從視頻數據src中提取圖像 每幀按照png圖像處理
- step2: doc(3):extract images from video data_dst FULL FPS
- 從視頻數據dst 中提取圖像 每幀按照png圖像處理
- 2.提取面部設置(EXTRACT FACESETS)
- 3.提取后查看人臉集
- 4.訓練(TRAINING)
- 5.合并(MERGING)
- Step 3:項目總結
- 項目進行過程中遇到的問題
- 問題解決
- 資料索引
- 個人感悟
前言
本次工作室項目考核,本小組選題為DeepFaceLab: A simple, flexible and extensible face swapping framework
經過對論文的簡單的進行結構性分析并且查閱相關資料對該項目進行復現。通過更加深入的了解,DeepFaceLab(本文此后均簡寫為DFL)
是GitHub上一個很火熱的換臉開源項目,首先我們將進行對論文中描述的工作原理進行介紹。
【注:本次項目所有代碼、軟件等資源均來自 https://github.com/iperov/ DeepFaceLab/】。
核心
換臉,即訓練模型要從src中的人臉換到dst目標人臉上
提取(Extraction)
提取是人臉識別的第一步,它包含很多算法和處理部分,即人臉檢測、人臉對齊和人臉分割。在提取過程之后,用戶將從您的輸入數據文件夾中獲得具有精確遮罩和面部標志的對齊的面部,src在此用于說明。另外,由于DFL提供了多種人臉類型(即半臉、全臉、全臉),代表了提取的人臉覆蓋區域。除非另有說明,否則默認取全臉。
人臉定位:人臉檢測提取的第一步是在給定的文件夾中找到目標人臉:src和dst。DFL使用S3FD [34]作為其默認人臉檢測器。顯然,你可以為你指定的目標選擇任何其他的人臉檢測算法來代替S3FD,即視網膜人臉[5],MTCNN [33]。
人臉對齊:DFL提供了兩種典型的面部標志提取算法來解決“能夠隨著時間的推移保持穩定”的人臉標志算法問題:(A)基于熱圖的面部標志算法2DFAN 2和(b)具有3D面部先驗信息的PRNet 6。
人臉分割:人臉分割階段采用了人臉分割網絡TernausNet,來分割出頭發、眼鏡、手部這些可能會對人臉的變換有影響的點。最后生成一個人臉區域的mask,用于決定最后的生成部分。
訓練(Training)
訓練模型在換臉技術中起到了至關重要的作用,論文中提到實現DFL在不要求對齊的src和對齊的dst的面部表情嚴格匹配的情況下,旨在設計簡單有效的算法解決這一不成對的問題,同時保持生成的人臉的高保真度和感知質量。
兩個共享權重的Encoder和Inter,兩個不同的decoder達到最終的換臉的目的。
個人理解:src和dst如何能夠做到匹配?首先對兩個人臉通過編碼器(encoder)編碼,通過中間的轉換送入到解碼器(decoder)中對二者進行匹配,最終進入到Real or Fake的問題。
轉換(Conversion)
以src2dst和DF結構為例,說明DFL的轉換階段
生成面部重演圖像:將src通過encoder和inter得到特征,而后通過dst的decoder得到重演后的人臉,此時得到的生成并且對齊的正臉。
對齊:將上一步生成的人臉以及對應的mask調成之前的狀態。
融合:先將上一步得到的臉部區域的顏色轉換至與目標圖像的面部顏色相一致,下一步將采用播送融合得到融合后的圖像。
銳化:使用預訓練好的人臉超分網絡對圖像進行銳化。
項目實踐
Step 1:
軟件獲取與安裝
軟件獲取:
https://github.com/iperov/DeepFaceLab(依個人使用安裝)
1.安裝方法:
雙擊最新版本的7z文件
選擇安裝路徑后進行安裝解壓
2.目錄簡介:
軟件解壓后出現DeepFaceLab_NVIDIA文件夾,點擊workspace文件夾
-
data_dst.mp4為目標文件
-
data_src.mp4為源文件
軟件在運行的過程中會在文件夾中產生aligend的文件用來防止提取的人臉圖片
Step 2:
項目開始
1.提取圖像(EXTRACT IMAGES)
step1:doc(2):extract images from video data_src
從視頻數據src中提取圖像 每幀按照png圖像處理
step2: doc(3):extract images from video data_dst FULL FPS
從視頻數據dst 中提取圖像 每幀按照png圖像處理
2.提取面部設置(EXTRACT FACESETS)
doc(4):data_src faceset extract 提取src面部設置
doc(5):data_dst faceset extract提取dst面部設置
3.提取后查看人臉集
doc(4.1):data_src view aligned result提取后查看人臉集
doc(5.1):data_dst view aligned result提取后查看目標集 可以在這其中刪除不需要的面孔
4.訓練(TRAINING)
doc(6):train Quick96 開始訓練深度假模型
使用默認設置,嘗試運行訓練的第一個迭代
訓練預覽窗口打開
圖表顯示了模型訓練的準確度 這些線代表的損耗值在整個過程中接近零,線越低,結果越好
其中,最后一列可以看到換臉的進展/擬合度
下邊展示迭代兩萬次左右的效果
5.合并(MERGING)
doc(7):merge Quick96 合并啟動深層偽造視頻
? 顯示鍵盤命令映射 使用ws鍵將腐蝕遮罩值erode mask更改為20,使用ed鍵將模糊蒙版值 blur mask提高到100;shift + / 處理剩下的幀;. + / 合并達到100%關閉
doc(8):merged to mp4 具有目標音頻的視頻文件
合成完畢后查看文件夾workspace(合成后的視頻保存在該目錄下)
效果演示:
若要查看完整視頻,鏈接https://www.bilibili.com/video/BV1Ur4y1A7Tm/
Step 3:項目總結
DeepFaceLab作為一個簡單、靈活、可擴展的換臉框架,通過我對本次項目體驗總結了DFL以下幾個特點:
- 更輕便:對比之前版本的DF,DFL在訓練過程中的時間性能指標減少
- 更好用:不再只面向專業人員,體現用戶優先
項目進行過程中遇到的問題
問題解決
資料索引
(1)https://blog.csdn.net/DeepFaceLabs/article/details/102933486/?ops_request_misc=&request_id=&biz_id=102&utm_term=DeepFaceLab:%20A%20simple,%20flexibl&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-102933486.pc_search_result_no_baidu_js&spm=1018.2226.3001.4187
(2)https://blog.csdn.net/weixin_41605888/article/details/111039355?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=b31c9a8a-b59d-4f2e-a46e-135e01c7dbd4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
(3)https://blog.csdn.net/u011145574/article/details/89066965?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control
(4)https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-guide
(5)https://github.com/deepfakes/faceswap
(6)https://www.youtube.com/watch?v=lSM-9RBk3HQ
(7)原論文:DeepFaceLab: A simple, flexible and extensible face swapping framework
個人感悟
剛開始接觸這個項目會因為沒有機器學習知識的基礎著急,但是在YouTube上我找到了更清晰的思路、獲得了更深層的見解。
可能最大的困難就是看論文,這一次的實踐也在提醒我更努力去學習英語知識,夯實基礎。最讓我開心的是項目開始著手,因為這片領域的未知性,我樂意去嘗試和探索,當然中間也有一些慘不忍睹的事情發生,但是看到最后合成的視頻我明白一個事情,之前的事情都不是最難的,難的是開始動手,我開始項目也比較拖拉,因為看不懂論文,但是最后還是逼著自己去做了。當然,過程很麻煩,結果就是“真香”!
總結
以上是生活随笔為你收集整理的DeepFaceLab: A simple, flexible and extensible face swapping framework 一个简单、灵活和可扩展的人脸交换框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Studio One Pro5软件安装包
- 下一篇: python easydict模块的使用