換臉技術 Deepfake Face2Face HeadOn FSGAN


一、換臉技術發展簡史

概述:換臉技術的應用分為三類,即換臉/換五官,轉換面部表情,轉換面部與軀干運動。以下介紹按照時間順序排列。

1. Face2Face:Real-time Face Capture and Reenactment of RGB Videos(轉換面部表情)

由德國紐倫堡大學科學家 Justus Thies 的團隊在 CVPR 2016 發布

可以非常逼真的將一個人的面部表情、說話時面部肌肉的變化、嘴型等完美地實時復制到另一個人臉上

論文:http://www.graphics.stanford.edu/~niessner/papers/2016/1facetoface/thies2016face.pdf

2. Deepfake:Face Swapping(換臉 / 換五官)

推出了 FakeApp(適用於Windows)

Github 上有相同的開源項目 FaceSwap(適用於Ubuntu) https://github.com/deepfakes/faceswap

3. HeadOn:Real-time Reenactment of Human Portrait Videos(轉換面部表情與軀干運動)

由 Face2Face 原班團隊做的升級版,在 ACM Transactions on Graphics 2018 發布

Face2Face 只能實現面部表情的轉換,HeadOn 增加了身體運動和頭部運動的遷移

論文: http://niessnerlab.org/papers/2018/7headon/headon_preprint.pdf

4. FSGAN:Subject Agnostic Face Swapping and Reenactment (換臉 & 轉換面部表情)

ICCV 2019 未開源

論文:https://arxiv.org/pdf/1908.05932.pdf

二、FaceSwap demo

概述:利用 CLM框架與 OpenCV 可實現單張圖片換臉,參考 https://blog.csdn.net/wi162yyxq/article/details/53883507 。若要實現視頻換臉,需要事先收集大量 A 與 B 各個角度各種表情的人臉圖像素材,針對視頻幀的不同表情換臉,最后合成影片,但這將耗費寶貴的時間與精力。將換臉工作交給深度 GAN 自主學習可大量節省時間與精力,項目地址:

https://github.com/deepfakes/faceswap

1. 基本條件

Ubuntu16.04

GPU(Nvidia RTX 2070)

Anaconda Python3.6

Tensorflow-gpu

FFMPEG 截取原始影像幀 / 合成換臉后的視頻

具體安裝方法:https://github.com/deepfakes/faceswap/blob/master/INSTALL.md

 

2. 過程與結果

a. Extracting Faces

先從video clips里截取幀,再截取人臉,適用於有多段 video clips 素材的情況

$ ffmpeg -i video.mp4 -vf fps=5 "pic_name%04d.png"

video 一般 25frame/second, fps=5 不必截取每一幀

$ python faceswap.py extract -i ~/faceswap/src/frames_folder -o    ~/faceswap/faces/extracted_faces

 

也可直接從一段 video 里截取人臉,適用於一段video(自動截取每一幀)。

$ python faceswap.py extract -i ~/faceswap/src/video.mp4 -o  ~/faceswap/faces/extracted_faces

 

b. Training a model

換臉者A,B雙方的訓練資料最好 > 3000張

理想 Loss: 0.009-0.01

實際 Loss 0.022, Nvidia RTX 2080 Ti 訓練28小時

c. Converting a video

按原始fps截取需要換臉的 video frames

利用訓練好的模型轉換 video frames

    python faceswap.py convert -i ~/faceswap/src/extracted_frames/ -o ~/faceswap/converted/ -m  ~/faceswap/A_B_model/

合成轉換后的 video frames 至新視頻

ffmpeg -f image2 -i converted_frames%04d.png -vcodec libx264 -crf 1 -pix_fmt yuv420p -vf fps=60 A_B.mp4

 

具體使用方法:https://github.com/deepfakes/faceswap/blob/master/USAGE.md

三、Face2Face demo

https://github.com/datitran/face2face-demo

1. 環境配置與安裝

Ubuntu16.04

Anaconda Python3.5

Tensorflow 1.2

OpenCV 3.1.0

Dlib 19.4

OpenCV 3.1.0 安裝過程坎坷,試過用 pip,conda 指令安裝:

$ pip install opencv-python==3.1.0

$ pip install opencv-contrib-python==3.1.0

$ conda install opencv=3.1.0

雖然都成功安裝並通過測試

$ import cv2

$ cv2.__version__ 

$ 3.1.0

但是在運行 generate_train_data.py 的時候總是在 cv2.destroyallwindows() 這行報錯。

 

最后使用 Cmake-gui 安裝成功,方法如下:

a. 不用安裝opencv-contrib

b. cuda,python2,doc,example,test 所有選項取消勾選

c. WITH_GTK_2_X 勾選

d. PYTHON3 路徑如下:

 

 
 

e.  在 ./opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp 里最頂端添加了

    #define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)

    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER

    #define AVFMT_RAWPICTURE 0x0020

f. $ make -j8

  $ sudo make install

  $ sudo ldconfig

  成功!!!

 

2. 過程與結果

a. 訓練資料:原始圖片與 Landmarks 各400張

b. 訓練周期:200 epochs

c. 訓練時間:3h with Nvidia RTX 2080Ti

d. 結果:欠擬合

 

a. 訓練資料:原始圖片與 Landmarks 各1500張

b. 訓練周期:500 epochs

c. 訓練時間:15h with Nvidia RTX 2080Ti

d. 結果:過擬合

 

背景噪聲干擾大,不采用。



作者:牛牪犇_9c01
鏈接:https://www.jianshu.com/p/67eb20c3420e
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM