• 换脸技术 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    求给定数组中最大值和其在数组中的索引并输出
    多线程与多进程
    logging模块
    QWidget上下文菜单处理函数
    python中的yield关键字
    菜单栏(QMenuBar)与菜单(QMenu)
    PyQt5布局管理(1)
    QMainFrame类
    QTP11使用DOM XPath以及CSS识别元素对象
    C# 跨线程访问控件
  • 原文地址:https://www.cnblogs.com/Ph-one/p/12522448.html
Copyright © 2020-2023  润新知