Deepfake-faceswap代码测试

FaceSwap

Github官方文档

下面来记录一下我安装和运行faceswap的流程

  • 首先需要downland源代码 Github

  • 配置相关的环境参考INSTALL.md 提取配置好tensorflow cuda 等等

    比如最基本的就是Python3,并且这个可以调用Opencv(如果有错误,请参考另一篇记录)

    python setup.py
    
    
    # 
    
    INFO    The tool provides tips for installation
          and installs required python packages
    INFO    Setup in Linux 4.14.39-1-MANJARO
    INFO    Installed Python: 3.6.5 64bit
    INFO    Installed PIP: 10.0.1
    Enable  Docker? [Y/n] 
    INFO    Docker Enabled
    Enable  CUDA? [Y/n] 
    INFO    CUDA Enabled
    INFO    1. Install Docker
          https://www.docker.com/community-edition
    
          2. Install latest CUDA
          CUDA: https://developer.nvidia.com/cuda-downloads
    
          3. Install Nvidia-Docker & Restart Docker Service
          https://github.com/NVIDIA/nvidia-docker
    
          4. Build Docker Image For Faceswap
          docker build -t deepfakes-gpu -f Dockerfile.gpu .
    
          5. Mount faceswap volume and Run it
          # without gui. tools.py gui not working.
          docker run -p 8888:8888 \
              --hostname faceswap-gpu --name faceswap-gpu \
              -v /opt/faceswap:/srv \
              faceswap-gpu
    
          # with gui. tools.py gui working.
          ## enable local access to X11 server
          xhost +local:
          ## enable nvidia device if working under bumblebee
          echo ON > /proc/acpi/bbswitch
          ## create container 
          nvidia-docker run -p 8888:8888 \
              --hostname faceswap-gpu --name faceswap-gpu \
              -v /opt/faceswap:/srv \
              -v /tmp/.X11-unix:/tmp/.X11-unix \
              -e DISPLAY=unix$DISPLAY \
              -e AUDIO_GID=`getent group audio | cut -d: -f3` \
              -e VIDEO_GID=`getent group video | cut -d: -f3` \
              -e GID=`id -g` \
              -e UID=`id -u` \
              faceswap-gpu
    
          6. Open a new terminal to interact with the project
          docker exec faceswap-gpu python /srv/tools.py gui
    
    
    
    # A successful setup log, without docker.
    
    
    # 这个是官方文档给出的一个没有配置Docker之后成功的输出,我的跟这个差不多但是当时没有截图
    
    INFO    The tool provides tips for installation
          and installs required python packages
    INFO    Setup in Linux 4.14.39-1-MANJARO
    INFO    Installed Python: 3.6.5 64bit
    INFO    Installed PIP: 10.0.1
    Enable  Docker? [Y/n] n
    INFO    Docker Disabled
    Enable  CUDA? [Y/n] 
    INFO    CUDA Enabled
    INFO    CUDA version: 9.1
    INFO    cuDNN version: 7
    WARNING Tensorflow has no official prebuild for CUDA 9.1 currently.
          To continue, You have to build your own tensorflow-gpu.
          Help: https://www.tensorflow.org/install/install_sources
    Are System Dependencies met? [y/N] y
    INFO    Installing Missing Python Packages...
    INFO    Installing tensorflow-gpu
    INFO    Installing pathlib==1.0.1
    ......
    INFO    Installing tqdm
    INFO    Installing matplotlib
    INFO    All python3 dependencies are met.
          You are good to go.
  • 下载图片集faceswap-playground,这个链接中给出了一个图片集300MB多,我没有选择下载而是自己寻找一些图片集

Deepfake-faceswap代码测试_第1张图片
文件结构如上图所示,其中photo文件夹里边存放原始图片,data文件夹里边存放extract的图片,models文件夹存放训练的模型

  • 运行代码

    代码分为三个部分

    • 提取 extract
    
    # 我找的是特朗普和谢霆锋的照片 使用 exteact 命令将其提取转换成框架所需要的大头照,因为收集来的图片可能有半身全身的图片,统一处理成大头照
    
    
    
    # To convert trump:
    
    python3 faceswap.py extract -i ./photo/trump -o ./data/trump
    
    # To convert cage:
    
    python3 faceswap.py extract -i ./photo/xie -o ./data/xie
    原始图片 extract之后的图片
    Deepfake-faceswap代码测试_第2张图片 Deepfake-faceswap代码测试_第3张图片

    Deepfake-faceswap代码测试_第4张图片
    建议在extract之后,看一下data文件夹下的照片,有的照片相关度很差,根本不是特朗普的照片,浏览一下,删除即可

    • 训练 train
    python faceswap.py train -A ./data/trump -B ./data/xie -m ./models/Changer
    
    # or -p to show a preview
    
    python3 faceswap.py train -A ./data/trump -B ./data/xie -m ./models/Changer -p
    
    
    # 使用 train 参数来指定 A,B 目标目录 A-输入目标人物 B-输出的效果人物
    
    
    # -m 代表最后生成的模型路径 ./models/Changer 
    

Deepfake-faceswap代码测试_第5张图片
Deepfake-faceswap代码测试_第6张图片

有一点比较好的是,模型你可以先训练到一个精度(建议0.04-0.06 这个精度看的还可以接受 如果机子比较好,可能直接就0.01),下次训练的时候是可以继续的

Deepfake-faceswap代码测试_第7张图片

  • 替换 convert

    本来想在模型训练的同时运行替换的代码,但是我试了一下,提示我显卡内存不足

    python3 faceswap.py convert -i ./photo/trump -o ./output/ -m ./models/Changer

Deepfake-faceswap代码测试_第8张图片
-i 指定输入的图片目录路径,-o 指定输出的替换图片路径, -m 指定训练好的模型路径
convert 里面有很多参数,具体可以到目录下的 /scripts/convert.py 查看

parser.add_argument('-M', '--mask-type',
                            type=str.lower, #lowercase this, because its just a string later on.
                            dest="mask_type",
                            choices=["rect", "facehull", "facehullandrect"],
                            default="facehullandrect",
                            help="Mask to use to replace faces. (Masked converter only)")

像上面的这个传参,指定了替换遮罩的类型,例如最后加上 -M facehullandrect

python3 faceswap.py convert -i ./photo/trump -o ./output/ -m ./models/Changer -M facehullandrect 


# 然后我有尝试了一下用模型去替换xie自己本来的照片会是什么效果
python3 faceswap.py convert -i ./photo/xie -o ./output2/ -m ./models/Changer

当然还有优化的地方比如替换后的效果可以使用opencv让其面部和原图更切合,完全看不出是遮罩

Deepfake-faceswap代码测试_第9张图片 Deepfake-faceswap代码测试_第10张图片
Deepfake-faceswap代码测试_第11张图片 Deepfake-faceswap代码测试_第12张图片

查看显卡情况

watch -n 10 nvidia-smi
# -10 是每隔10s更新一次

Deepfake-faceswap代码测试_第13张图片

你可能感兴趣的:(python,TensorFlow,python3)