文章目录

  • 介绍
  • 方法
    • 3D面部表示
    • 声音特征
    • HeadGan 框架
      • Dense flow network F
      • Rendering network
      • Discriminators D and Dm.
      • Training Objective.
  • 实验
    • 3D Face Rendering

介绍

  • 这是种wrap的方式, 整体有两个网络, 一个flow network F计算flow field, 一个rendering network进行变换
  • 这个说是运用了3DMM, 好像也就是建模的时候用了点
    提出了HeadGAN, 一种适用于头部动画和编辑的基于GAN的 one-shot方法。 这里特别的是使用了PNCC特征, 同时使用了3DMM。HeadGAN可以:
  1. 以20fps的速率运行实时reenactment系统
  2. 面部视频压缩和面部重建的有效方法
  3. 面部表情编辑方法
  4. 新颖的view分析方法, 包括正面化

相关工作提到:Warp-Guided GANs is a more recent work that uses 2D facial landmarks and 2D warps to animate an image, MarioNETte tries to solve this problem, by proposing a method for landmark transformation that adapts the driving landmarks to the reference head shape

方法

3D面部表示

为了转移驱动人的表情, 同时保留source身份的face geometry, 利用3dmm中的先验知识, 给定T帧的视频帧, y1:ty_{1:t}y1:t​= {yt∣t=1,.....Ty_t|t=1, .....Tyt​∣t=1,.....T}, 3Dmm fitting阶段产生了相机参数c1:Tc_{1:T}c1:T​,形状参数p1:Tp_{1:T}p1:T​, 以及 pt=[ptidT;ptexpT]Tp_t=[p_t^{idT}; p_t^{expT}]^Tpt​=[ptidT​;ptexpT​]T的序列. 对于每帧t, 我们获得两种shape 参数, 一个是 ptid∈Rnidp_t^{id}∈R^{n_{id}}ptid​∈Rnid​身份有关的参数, 另一个是表情参数 ptexp∈Rnexpp_t^{exp}∈R^{n_{exp}}ptexp​∈Rnexp​,表示面部变形.
这里3DMM fitting阶段使用密集的3d points, 是用RetinaFace回归的(所以是一帧帧回归的吗,用半监督的那个方法应该也行?), 这个模型是在WIDER FACE 数据集上预训练的. 给定源身份的参考图 yrefy_{ref}yref​, 对其进行3dmm fitting, 获得形状参数prefidp_{ref}^{id}prefid​, prefexpp_{ref}^{exp}prefexp​, 相机参数crefc_{ref}cref​,下面是fit 算法:

  • 给定面部图像y,3DMM fitting阶段恢复形状p和相机c参数。它依赖于面部密集的3D点,这些点通过Retinaface501网络回归,在WIDER FACE dataset上预先训练。使用Procrustes分析将回归点register为LSFM 3DMM的平均形状x

对于每帧t, 计算出的3d mesh公式如下:


其中st:s_t:st​:

xˉ∈R3N\bar x ∈R^{3N}xˉ∈R3N 是平均形状, UidU_{id}Uid​是正交化的bias, UexpU_{exp}Uexp​是来自LSTM morphable 表情正交化bias(论文A 3d morphable model learnt from 10,000 faces.). 然后再就是渲染出3d 脸部的representation, xt=R(st,ct)x_t=R(s_t, c_t)xt​=R(st​,ct​) c是相机参数, 这个xtx_txt​是一张类似PNCC的RGB图. 同样也渲染出xrefx_{ref}xref​, 这是从参考图像 yrefy_{ref}yref​中恢复的3D表达,如下图所示.

综上, 给定驱动视频y1:ty_{1:t}y1:t​以及一个源参考图yrefy_{ref}yref​, 数据预处理阶段恢复了一系列图片x1:Tx_{1:T}x1:T​,这些x描述了从驱动视频提取到的并且可以应用到源图片的面部几何信息, 同时还有xrefx_{ref}xref​

声音特征

我们将音频信号分成T个部分a1:Ta_{1:T}a1:T​,其中每个部分对应于长度为T的驱动视频的第yty_tyt​帧。
然后,我们将音频特征提取应用于2L长度的音频窗口。at−L−1:t+L={at−L−1,....at,....at+L}a_{t-L-1:t+L} = \{a_{t-L-1},....a_t,....a_{t+L}\}at−L−1:t+L​={at−L−1​,....at​,....at+L​},以帧t为中心,得到一个特征向量ht(a)h_t^{(a)}ht(a)​, 它包含了过去和未来的时间步骤的信息. 我们采用(论文An opensource python library for audio signal analysis.)来提取低层次的特征,如MFCCs,信号能量和熵,从而得到一个特征向量ht(aL)h^{(aL)}_tht(aL)​∈R84R^{84}R84。
然后,我们使用DeepSpeech从每个音频部分提取字符级别的logits。这结果是2L个logits,串联后得到一个特征向量ht(aH)h^{(aH)}_tht(aH)​∈ R2L∗27R^{2L*27}R2L∗27。我们最终的音频特征向量为ht(a)h^{(a)}_tht(a)​ = [ht(aL)T][h_t^{(aL)^T}][ht(aL)T​]; ht(aH)T]Th_t^{(aH)^T}]^Tht(aH)T​]T ∈R300,对于L = 4。

  • L是指的t前后的帧数, 合起来是2L, 也就是说论文是8帧一个单元

HeadGan 框架

HeadGan的生成器有两种模式, 一种是从驱动视频视频和参考图片中提取出的3d 面部表达, 一种是来自驱动者的音频.
网络输入有两个:(1)xt−k:tx_{t-k:t}xt−k:t​, 即从t帧里得到的3d 脸部表达, 和过去的k=2帧 channel级的连接起来, (2)参考图片yrefy_{ref}yref​及其对应的xrefx_{ref}xref​, 以及声音特征ht(a)h_t^{(a)}ht(a)​, 生成器可以将这些输入的特征变为真实的图片, 公式如下:


生成器由两个子网络组成:一个密集流网络F和一个渲染网络R, 整个网络架构如下图:

Dense flow network F
  • 渲染网络R是依赖前一个阶段的信息的,但是只从参考图像中提取信息不太行, 假如是视觉特征和想要的头部姿态对齐就好了, 头部姿态在我们的驱动视频的3d model xtx_txt​ 中有体现

F可以学习到流wtw_twt​来扭曲视觉特征.
把参考图片和其对应的3d 特征 cat起来 (yref,xrefy_{ref}, x_{ref}yref​,xref​) 通过encoder提取三个空间尺度的特征 h(1),h(2),h(3)h^{(1)}, h^{(2)}, h^{(3)}h(1),h(2),h(3) 来表示原图片 identity 的信息. (参考图片有三个空间尺度的身份信息)

输入驱动视频的3d特征 xt−k:tx_{t-k:t}xt−k:t​ 到decoder, 预测出流 wtw_twt​ 然后 w 被注入F, 通过SPADE blocks , 这个block 是论文(Semantic image synthesis with spatially-adaptive normalization.)里面的, 结构大致如下:

理想情况下, 通过这个流, 参考图片就能做出和驱动视频同样的动作和表情了, 这个流w是用到每个视觉特征的, 之前不是提取了 h(1),h(2),h(3)h^{(1)}, h^{(2)}, h^{(3)}h(1),h(2),h(3) 来表示原图片 identity 的信息, 都用上这个场就得到了warped 视觉特征, hˉt(1),hˉt(2),hˉt(3)\bar h_t^{(1)}, \bar h_t^{(2)}, \bar h_t^{(3)}hˉt(1)​,hˉt(2)​,hˉt(3)​,以及warped 参考图片yˉtref\bar y_t^{ref}yˉ​tref​,

Rendering network
  • 这个部分的主要输入是驱动视频的3d model 的类似pncc的图 xt−k:tx_{t-k:t}xt−k:t​
  • 其他额外的辅助输入还有之前提取的音频特征 ht(a)h^{(a)}_tht(a)​ (这个音频特征提取的挺多, 还用两种cat起来) , 还有之前被流wrap后的特征 hˉt(1),hˉt(2),hˉt(3)\bar h_t^{(1)}, \bar h_t^{(2)}, \bar h_t^{(3)}hˉt(1)​,hˉt(2)​,hˉt(3)​ (既然可以直接得到wrap的图片 yrefy_{ref}yref​ 为啥不到这里就停止了呢)

编码器接收 xt−k:tx_{t-k:t}xt−k:t​ 然后对其进行卷积下采样, 然后由交替的SPADE和AdaIN层 组成的解码器生成需要的帧 y~t\tilde y_ty~​t​. (用到辅助信息了, 声音ha和wrap的特征ht)
这些自适应归一化层能够将2d 的特征图通过SPADE blocks注入到渲染网络中, 也可以将1d 的音频特征通过AdaIN注入到渲染网络中.

与SPADE的原始工作相反,所有SPADE层的条件输入都是相同的分割图(segmentation map)向下采样以匹配每个层的空间大小,我们利用了多个空间尺度的视觉特征图hˉt(1),hˉt(2),hˉt(3)\bar h_t^{(1)}, \bar h_t^{(2)}, \bar h_t^{(3)}hˉt(1)​,hˉt(2)​,hˉt(3)​和yˉtref\bar y_t^{ref}yˉ​tref​作为SPADE blocks的调制输入。

我们将相同的音频特征向量ht(a)h_t^{(a)}ht(a)​传递给所有空间尺度的AdaIN块。解码器还配备有用于上采样的PixelShuffle layers,来自论文(Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network) , 这有助于提高生成样本的质量。

Discriminators D and Dm.

图像鉴别器接收合成的一对(xt;y~t)(x_t; \tilde y_t)(xt​;y~​t​),或一个真实的一对(xt;yt)(x_t; y_t)(xt​;yt​),并且学习如何区分它们。我们使用第二个鉴别器Dm,它专注于嘴部区域。除了真实的 ytmy^m_tytm​或生成的 y~tm\tilde y^m_ty~​tm​裁剪的嘴部区域, 该网络以音频特征向量ht(a)h^{(a)}_tht(a)​为条件,在空间上进行复制(spatially replicated),然后与裁剪后的图像进行channel-wise级联。

Training Objective.

构成生成器的网络F和R联合优化。我们通过应用感知和像素损失(perceptual and pixel losses)LFVGG,LGVGGL_F^{VGG}, L_G^{VGG}LFVGG​,LGVGG​, LFL1,LGL1L_F^{L1}, L_G^{L1}LFL1​,LGL1​上面结构图中所示(红色箭头)。还有其他的损失作者在附录中讲了.

  • 这里对warp的图和生成的都用这两个loss

    这个ground truth是哪的???

实验

3D Face Rendering

这里的参数是shape参数和相机参数, 也就是35维度加上驱动视频帧就可以重建出人脸来

  • VoxCeleb

论文阅读:HeadGAN: One-shot Neural Head Synthesis and Editing相关推荐

  1. 论文阅读:Multi-view Convolutional Neural Networks for 3D Shape Recognition

    Preface 今天阅读一篇ICCV2015的论文:<Multi-view Convolutional Neural Networks for 3D Shape Recognition>, ...

  2. 【论文阅读】OUTRAGEOUSLY LARGE NEURAL NETWORKS: THE SPARSELY-GATED MIXTURE-OF-EXPERTS LAYER

    一.背景 神经网络的吸收信息的容量(capacity)受限于参数数目. 条件计算(conditional computation)针对于每个样本,激活网络的部分子网络进行计算,它在理论上已证明,可以作 ...

  3. 论文阅读:Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos

    Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos 文章目录 Tube Convolutional Neu ...

  4. 【论文阅读】Point-GNN: Graph Neural Network for 3D Object Detection in a Point Cloud

    最近在看3d目标检测的文章,感觉看完东西还是要记一下自己的想法,尤其是有思考的文章. 论文题目:Point-GNN: Graph Neural Network for 3D Object Detect ...

  5. 【论文阅读】A Survey of Image Synthesis Methods for Visual Machine Learning --- 图像生成,计算机视觉

    论文原文地址:A Survey of Image Synthesis Methods for Visual Machine Learning ,是对目前image synthesis方法的一个总结和归 ...

  6. 论文阅读-2022.1.2-A Neural Network Approach for_2016_一种用于知识驱动响应生成的神经网络方法

    摘要 We present a novel response generation system.我们提出了一种新颖的响应生成系统. The system assumes the hypothesis ...

  7. 对抗样本论文阅读Intriguing properties of neural networks

    Intriguing properties of neural networks 文章提出了神经网络中的两个有趣的特性,首次提出了对抗样本adversarial examples的概念 Represe ...

  8. 论文阅读:Meta-Learning in Neural Networks: A Survey

    题目:Meta-Learning in Neural Networks: A Survey 论文地址:https://arxiv.org/abs/2004.05439 作者:Timothy Hospe ...

  9. 论文阅读《Adapted Deep Embeddings: A Synthesis of Methods for k-Shot Inductive Transfer Learning Tyler》

    Adapted Deep Embeddings 文章提出神经网络迁移学习的三条主线:权重迁移.深度度量学习.小样本学习.比较了三条主线的三个 SOTA 方案,探索了一种混合的自适应嵌入方法,用目标域的 ...

最新文章

  1. 开源需自立!Android、GitHub、Apache全线告急!
  2. 缓冲区溢出以及缓冲区溢出攻击
  3. Spring使用笔记(一)Spring简介
  4. 多线程之 CreateThread与_beginthreadex本质区别
  5. (JAVA学习笔记) 关于方法的递归-阶乘方法演示
  6. js html 追加span内容,使用JavaScript显示SPAN的内容
  7. python -- join()
  8. 13建造者模式(Builder)
  9. 【原创】为什么 Redis 重启后没有正确恢复之前的内存数据
  10. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用
  11. 彻底搞懂四元数(转载)
  12. 当你没有能力的时候,所有的友善都是廉价的
  13. java基础总结06-常用api类-Math常用方法
  14. 《C++面向对象高效编程(第2版)》——4.5 对象复制的语义
  15. 讯飞语音离线版本集成
  16. mysql判断是否为分区表_MySQL 分区表
  17. 现代软件工程讲义 7 分析和设计方法
  18. 小红书如何营销?各大品牌小红书运营投放营销策划方案合集(13份)
  19. 优化源于99%的试验和1%的数据决策力
  20. Oracle RAC集群三种心跳机制

热门文章

  1. 时间时区错误修复moment
  2. tsqlconnection连接datasnap出现connection closed gracefully错误的解决办法
  3. ARM接口实验—中断实验
  4. 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记
  5. Homebus(HBS)通信协议学习
  6. 关于Unity中新版动画系统的使用
  7. 2023年家族办公室研究报告
  8. IDEA 2022 Translation 翻译文档失败: 未知错误
  9. 锂电池OCV曲线拟合python实现
  10. 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.14 平移、旋转、缩放