deepfakes-FaceSwap使用笔记
安裝過程
安裝指南網(wǎng)址:https://github.com/deepfakes/faceswap/blob/master/INSTALL.md
需要魔法上網(wǎng),有些包國內(nèi)下載太慢了
conda環(huán)境
在Anaconda Prompt里,查看所有環(huán)境,兩個命令都行
conda env list
conda info --envs
查看安裝的包
conda list
更換環(huán)境,前面的conda不寫好像也行
conda activate faceswap
提示no module named cv2
進(jìn)入相應(yīng)的環(huán)境,安裝缺少的包
conda install opencv
提取人臉
Input Dir可以是視頻或者圖片文件夾
Output Dir是輸出的截取好的人臉圖片文件夾
Alignments是對齊文件,用于標(biāo)注人臉的位置信息,不填的話會默認(rèn)生成在Input Dir。如果要自定義,需要新建一個.fsa后綴的空文件
下面的Extract Every N是每N張圖片截取一張人臉,對視頻就是每N幀截取一張人臉。官方建議視頻是每半秒或一秒截取一張。比如,60幀的視頻,半秒就填30
提取兩個人臉的圖片。
刪除無關(guān)圖片
提取的人臉圖片有的可能不是要進(jìn)行操作的那個人,比如視頻里出現(xiàn)多個人,或者多個人的合照,其他人也會被提取。應(yīng)該刪除無關(guān)信息
為了便于操作,可以先進(jìn)行分類,Data框里的三項都應(yīng)填入
分類之后,將無關(guān)的圖片文件刪除。然后在Tools - Alignments - Job里選擇 Remove-Faces,Data框里的Frames Folder不用填,另外兩項需要填。完成后,alignments文件也就是.fsa文件會更新,同時會在同目錄生成一個備份文件
合并多個alignments
Job選擇Merge。Data框里,alignments文件放入一個文件夾,并在Alignments File選擇時按Shift或Ctrl選擇多個alignments文件。
將所有人臉圖片放入一個文件夾,F(xiàn)aces Folder選擇該文件夾。Frames Folder不填。合并后會生成一個新的alignments
訓(xùn)練模型
填入Input A/B,以及相應(yīng)的alignmens文件(在Extract里生成的),然后新建一個模型目錄并選擇,模型將會存在該目錄。顯卡比較垃圾的話跑一會就會報錯,在Trainer里選擇Lightweight。根據(jù)預(yù)覽的圖片選擇何時停止。我用GTX 1050 2G,訓(xùn)練了一個晚上,loss值看起來已經(jīng)降不下去了,可能跟我的圖片數(shù)量太少有關(guān)(A:100+張,B:1400+張),生成的視頻也還湊合,有時清楚有時模糊。
訓(xùn)練可以隨時停止,指向相同的文件夾可以繼續(xù)接著之前的訓(xùn)練。
生成視頻
注意這里的alignmens可能和之前Extract出來的不一樣。
可以通過ffmpeg將視頻每一幀都抽出來,然后對生成的所有圖片進(jìn)行換臉,然后再將幀合成為視頻,再將原來的音頻合并。
抽取視頻的每一幀
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. 如果沒有填充,需要相應(yīng)更改,如 pic%d.png or %d.png
-r 幀率(fps)
-f image2 圖像合成視頻默認(rèn)設(shè)置
-crf 畫質(zhì),數(shù)值小意味著畫質(zhì)高,通常設(shè)置為15-25
-s 分辨率(1920x1080)
-pix_fmt yuv420p 像素格式
test.mp4 輸出在當(dāng)前文件夾,輸出結(jié)果為test.mp4
video-frame-%0d.png,這里的%0d是對齊長度。
如果使用這種自行抽幀的方法,需要對抽出的所有圖片進(jìn)行Extract,并且Extract Every N設(shè)置為1,這里生成的alignments文件可以用于Convert
或者直接在Input Dir里輸入視頻文件,并對視頻文件進(jìn)行Extract,且Extract Every N設(shè)置為1,生成的alignments文件可以用于Convert。當(dāng)Input Dir里輸入視頻文件時,Output Dir里生成的還是圖片,是已經(jīng)換過臉的每一幀的圖片,仍然需要用ffmpeg進(jìn)行合并。
說的好像有點亂,總之就是每一幀都應(yīng)該有一個有alignment,需要先有這個alignments文件才能Convert。
conda env備份
1、進(jìn)入虛擬環(huán)境后,輸入以下命令進(jìn)行備份:
conda env export > environment.yaml
該虛擬環(huán)境的信息便被保存在了 environment.yaml 文件中
2、重裝該環(huán)境
conda env create -f environment.yaml
離線備份:
直接在conda的envs目錄下找到要備份的環(huán)境目錄,復(fù)制一份目錄保存下來。用conda env list查看環(huán)境目錄
離線恢復(fù)安裝
conda create --name env_name --clone env_path --offline
參考鏈接
官方USAGE(簡略):https://github.com/deepfakes/faceswap/blob/master/USAGE.md
Extract詳細(xì)解釋:https://forum.faceswap.dev/viewtopic.php?f=5&t=27
其他教程:https://forum.faceswap.dev/app.php/tag/Guide
ffmpeg文檔:https://ffmpeg.org/ffmpeg.html
總結(jié)
以上是生活随笔為你收集整理的deepfakes-FaceSwap使用笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度webuploader如何实现秒传与
- 下一篇: python 通过下载包setup.py