deepfakes-FaceSwap使用筆記


安裝過程

安裝指南網址:https://github.com/deepfakes/faceswap/blob/master/INSTALL.md

需要魔法上網,有些包國內下載太慢了

conda環境

在Anaconda Prompt里,查看所有環境,兩個命令都行

conda env list
conda info --envs

 查看安裝的包

conda list

更換環境,前面的conda不寫好像也行

conda activate faceswap

 提示no module named cv2

進入相應的環境,安裝缺少的包

conda install opencv

 提取人臉

 Input Dir可以是視頻或者圖片文件夾

Output Dir是輸出的截取好的人臉圖片文件夾

Alignments是對齊文件,用於標注人臉的位置信息,不填的話會默認生成在Input Dir。如果要自定義,需要新建一個.fsa后綴的空文件

下面的Extract Every N是每N張圖片截取一張人臉,對視頻就是每N幀截取一張人臉。官方建議視頻是每半秒或一秒截取一張。比如,60幀的視頻,半秒就填30

提取兩個人臉的圖片。

刪除無關圖片

提取的人臉圖片有的可能不是要進行操作的那個人,比如視頻里出現多個人,或者多個人的合照,其他人也會被提取。應該刪除無關信息

為了便於操作,可以先進行分類,Data框里的三項都應填入

分類之后,將無關的圖片文件刪除。然后在Tools - Alignments - Job里選擇 Remove-Faces,Data框里的Frames Folder不用填,另外兩項需要填。完成后,alignments文件也就是.fsa文件會更新,同時會在同目錄生成一個備份文件

合並多個alignments

Job選擇Merge。Data框里,alignments文件放入一個文件夾,並在Alignments File選擇時按Shift或Ctrl選擇多個alignments文件。

將所有人臉圖片放入一個文件夾,Faces Folder選擇該文件夾。Frames Folder不填。合並后會生成一個新的alignments

 

訓練模型

填入Input A/B,以及相應的alignmens文件(在Extract里生成的),然后新建一個模型目錄並選擇,模型將會存在該目錄。顯卡比較垃圾的話跑一會就會報錯,在Trainer里選擇Lightweight。根據預覽的圖片選擇何時停止。我用GTX 1050 2G,訓練了一個晚上,loss值看起來已經降不下去了,可能跟我的圖片數量太少有關(A:100+張,B:1400+張),生成的視頻也還湊合,有時清楚有時模糊。

訓練可以隨時停止,指向相同的文件夾可以繼續接着之前的訓練。

注意A是原始的臉,B是要換的臉,不要訓練反了。

 生成視頻

注意這里的alignmens可能和之前Extract出來的不一樣。

可以通過ffmpeg將視頻每一幀都抽出來,然后對生成的所有圖片進行換臉,然后再將幀合成為視頻,再將原來的音頻合並。

抽取視頻的每一幀

ffmpeg -i /path/to/my/video.mp4 /path/to/output/video-frame-%d.png

 將幀合並為視頻

ffmpeg -r 60 -f image2 -s 1920x1080 -i video-frame-%0d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p test.mp4

 

%04d 表示用零來填充直到長度為4,i.e 0001…0020…0030…2000 and so on. 如果沒有填充,需要相應更改,如 pic%d.png or %d.png

-r 幀率(fps)

-f image2 圖像合成視頻默認設置

-crf 畫質,數值小意味着畫質高,通常設置為15-25

-s 分辨率(1920x1080)

-pix_fmt yuv420p 像素格式

test.mp4 輸出在當前文件夾,輸出結果為test.mp4

video-frame-%0d.png,這里的%0d是對齊長度。

如果使用這種自行抽幀的方法,需要對抽出的所有圖片進行Extract,並且Extract Every N設置為1,這里生成的alignments文件可以用於Convert

或者直接在Input Dir里輸入視頻文件,並對視頻文件進行Extract,且Extract Every N設置為1,生成的alignments文件可以用於Convert。當Input Dir里輸入視頻文件時,Output Dir里生成的還是圖片,是已經換過臉的每一幀的圖片,仍然需要用ffmpeg進行合並。

說的好像有點亂,總之就是每一幀都應該有一個有alignment,需要先有這個alignments文件才能Convert。

【2021-06-28】實際上是這樣,原始的圖片被Extract后會生成只有頭像的圖片以及alignments文件,在Convert時要輸入原始圖片而不是Extract的頭像圖片。

conda env備份

1、進入虛擬環境后,輸入以下命令進行備份:

conda env export > environment.yaml 

 該虛擬環境的信息便被保存在了 environment.yaml 文件中

2、重裝該環境

conda env create -f environment.yaml

 

離線備份:
直接在conda的envs目錄下找到要備份的環境目錄,復制一份目錄保存下來。用conda env list查看環境目錄

離線恢復安裝

conda create --name env_name --clone env_path --offline

參考鏈接

官方USAGE(簡略):https://github.com/deepfakes/faceswap/blob/master/USAGE.md

Extract詳細解釋:https://forum.faceswap.dev/viewtopic.php?f=5&t=27

其他教程:https://forum.faceswap.dev/app.php/tag/Guide

ffmpeg文檔:https://ffmpeg.org/ffmpeg.html


免責聲明!

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



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