论文解读

  • 1、前言
  • 2、解读
  • 3、整体概述
  • 4、细节讲解

1、前言

早期的Facerig软件可以即时抓取摄像头视频中的人脸关键点,将表情、头部姿态等信息转化到三维虚拟化身上,比如一只猫、一个虚拟卡通人物上。然后在使用即时视频通讯软件时,选择facerig的虚拟摄像头,其他人看到的就是拥有使用者当前表情的虚拟形象了。

随着换脸、表情迁移的科技浪潮汹涌而至,人们不再满足于使用卡通形象、动漫人物来充当自己的化身,而是使用真人的形象。类似的项目包括但不限于faceit_live3、avatarify,其中avatarify热度较高,已经被用于视频会议的换脸,参见机器之心的报道。

传统意义上的换脸是视频图像帧级别的操作,如果想把源脸替换到目标脸上的话,需要使用大量的双方人脸图像的数据进行事先训练训练。但是上述视频会议场景不具备这个条件,毕竟用户端的目标人脸的数据过少,为了达到实时换脸的效果,也没有大量的时间进行训练,那么上述项目是如何实现的呢?

代码地址:https://github.com/AliaksandrSiarohin/first-order-model

2、解读

从标题显而易见,这篇文章完成的任务是image animation,给定一张源图片,给定一个驱动视频,生成一段视频,其中主角是源图片,动作是驱动视频中的动作。如下图所示,源图像通常包含一个主体,驱动视频包含一系列动作。

以左上角的人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。

但是这篇文章提出的方法只需要在同类别物体的数据集上进行训练即可,比如实现太极动作迁移就用太极视频数据集进行训练,想要达到表情迁移的效果就使用人脸视频数据集voxceleb进行训练。训练好后,我们使用对应的预训练模型就可以达到前言中实时image animation的操作。

为什么这么做?

为了解决数据依赖和提高模型使用的泛化性。

以表情迁移为例,图像生成任务的传统方法VAE、GAN等需要大量人脸图像,以及这些人脸图像的标注信息(关键点、面部动作单元、三维模型等);此外,这些训练好的模型只能在特定人物中间使用,没法应用到未知的人脸中。

除了生成人脸图像的逼真程度,上述两个问题也是长久以来表情迁移所面临的问题。小样本学习是解决上述问题的方法之一,比如三星的工作、英伟达的FUNIT,通过提取少量源人脸的embedding,表征源人脸的身份信息,在生成阶段使用AdaIn加入到decoder中,实现表情迁移的操作。

此外在姿态迁移的大任务当中,Monkey-Net首先尝试了通过自监督范式预测关键点来表征姿态信息,测试阶段估计驱动视频的姿态关键点完成迁移工作。在此基础上,FOMM使用了相邻关键点的局部仿射变换来模拟物体运动,还额外考虑了遮挡的部分,遮挡的部分可以使用image inpainting生成。

3、整体概述


整个模型训练过程是图像重建的过程,输入是源图像和驱动图像,输出是保留源图像物体信息的含有驱动图像姿态的新图像,其中输入的两张图像来源于同一个视频,即同一个物体信息,那么整个训练过程就是驱动图像的重建过程。

大体上来说分成两个模块,一个是motion estimation module,另一个是image generation module。其中motion estimation module输出有两个,一个是dense motion field [公式] ,表征了驱动图像D中的每个关键点到源图像S的映射关系;一个是occlusion mask [公式] ,表明了在最终生成的图像中,对于驱动图像D而言,哪部分可以通过D扭曲得到,哪部分可以通过inpaint得到。在image generation module中,输入S,在encoder得到的特征层中进行形变,然后decoder回去,得到最终的输出。

一个很有意思的地方是,在推断过程中,D和S的关键点差异可能会比较大,所以作者引入了一个抽象的参考帧R,通过预测R到S的映射 [公式] 和R到D的映射 [公式] 来计算 [公式] ,这样避免了直接计算D到S的映射,并且可以同时处理D和S。对于输入motion estimation module的一张图片X来说,其中的keypoint detector会输出关键点信息和局部仿射变换的参数信息,这些参数使得关键点附近的姿态信息可以通过仿射变换得到,然后通过泰勒展开可以得到 [公式] 。在通过这种方法得到 [公式] 和 [公式] 后,联合图像S送入motion estimation module中的dense motion network,得到对应的输出 [公式] 和 [公式] 。

4、细节讲解

到目前为止,我们已经拥有了初步的 [公式] 。我们只考虑了整体的信息,下面作者考虑了生成时的一些局部信息。

对于生成器而言,直观上来讲,映射 [公式] 中包含的纹理和边缘信息与图像D会有很好的对应关系,但对图像S则没有很好的对应关系,所以要对S进行一系列的warp变换得到 [公式] 等,作为额外的参考信息输入进去,其中 [公式] 为使用公式4对于图像S在某个关键点附近进行形变得到的结果; [公式] 为背景信息。

此外,作者还计算了热力图表征了映射发生的位置,公式如下:

《First Order Motion Model for Image Animation》论文解读相关推荐

  1. 论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)

    最近几年transformer越来越火,在NLP.CV等领域都取得了很大的成功.这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上.它的想法是基 ...

  2. CVM2021| PCT: Point cloud transformer(分类+分割任务SOTA)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:PCT: Point cloud tra ...

  3. PCT: Point Cloud Transformer

    PCT:点云Transformer Meng-Hao Guo Tsinghua University gmh20@mails.tsinghua.edu.cn Jun-Xiong Cai Tsinghu ...

  4. FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍

    自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位. 与RNN和LSTM消失的梯度问题(不 ...

  5. Point Cloud Transformer(PCT)代码实现

    Point Cloud Transformer(PCT)代码实现 目前最火热的Transformer在自然语言和图像识别中扮演了极其重要的角色,在点云数据集中也不例外,清华大学近期提出在点云中运用Tr ...

  6. 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》

    论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...

  7. Point Cloud Transformer(PCT)阅读翻译

    PCT: Point Cloud Transformer 1. Introduction transformer是一种 encoder-decoder结构,包含了三个模块:输入词嵌入,位置(顺序)编码 ...

  8. 论文阅读 PCT:Point Cloud Transformer

    论文阅读 PCT:Point Cloud Transformer PCT 介绍 Input Embedding native 版本 enhanced 版本 Attention PCT 介绍 PCT是基 ...

  9. AI论文解读:基于Transformer的多目标跟踪方法TrackFormer

    摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...

  10. 论文解读:《功能基因组学transformer模型的可解释性》

    论文解读:<Explainability in transformer models for functional genomics> 1.文章概括 2.背景 3.相关工作 4.方法 4. ...

最新文章

  1. 剑指offer:矩阵中的路径
  2. 请谈一下@Autowired 和@Resource区别是什么?
  3. VTK:光标形状用法实战
  4. android代码删除sd卡文件在哪里,android - 如何从SD卡中删除文件?
  5. flex的三个属性grow、shrink、basis
  6. rip和ospf vrrp vlan综合实验
  7. java bean规范 is_深入了解JavaBean规范中的属性名和setter/getter方法
  8. [题解]第十一届北航程序设计竞赛预赛——I.神奇宝贝大师
  9. JavaScript 通过身份证号获取出生日期、年龄、性别 、籍贯
  10. varchar和varchar2的区别
  11. 免费下载 客道巴巴文档 教程
  12. python实现 stft_scipy-Python中的可逆STFT和ISTFT
  13. MongoDB分片集群搭建
  14. vidda系统+android系统,海信电视精简教程,去除电视多余应用,换桌面!
  15. 【读书】少有人走的路---自律(斯科特 派克)
  16. linu修改open files无效_不越狱修改运动步数,安卓苹果手机通用
  17. 苹果新旧手机数据转移_如何将数据从安卓设备转移到iPhone12_苹果手机_手机学院...
  18. SSM+人才交流平台 毕业设计-附源码221022
  19. 中标麒麟编译qgis源码+PyQt环境
  20. 电脑基础知识-电脑不认新硬盘时该怎么办?

热门文章

  1. 蓝桥杯2014年省赛C/C++ 本科B组
  2. 标注工具——yarn的学习笔记
  3. Ubuntu系统上安装微信(legacy)
  4. 基于阿里云服务器使用宝塔面板搭建 Typecho 博客
  5. python 取列表偶数和奇数位置的值
  6. 给你出道题---N个数字的静态决策区分问题
  7. 最小方差问题---------------给你出道题
  8. 东大OJ-最大子序列问题的变形
  9. String变量作为参数传递的是String变量的副本
  10. zend studio如何更改字符集