zoukankan      html  css  js  c++  java
  • 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+张),生成的视频也还凑合,有时清楚有时模糊。

    训练可以随时停止,指向相同的文件夹可以继续接着之前的训练。

     生成视频

    注意这里的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。

    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

  • 相关阅读:
    java 实验五保存网页到本地
    Codeforces Round #485 (Div. 2)F. AND Graph
    算法设计分析实验三——贪心求最小生成树
    D. XOR-pyramid Codeforces Round #483 (Div. 2) dp
    C. Finite or not? Codeforces Round #483 (Div. 2)
    Educational Codeforces Round 44 F. Isomorphic Strings
    Educational Codeforces Round 44 (Rated for Div. 2)+E. Pencils and Boxes+树状数组
    BZOJ 1012 [JSOI2008]最大数maxnumber
    BZOJ 1207 [HNOI2004]打鼹鼠(简单dp)
    POJ 3067 Japan(树状数组求逆序对)
  • 原文地址:https://www.cnblogs.com/roadwide/p/14285646.html
Copyright © 2011-2022 走看看