鱼的深度学习

论文笔记-First Order Motion Model fo

2021-03-04  本文已影响0人  升不上三段的大鱼

图像动画包括根据驱动视频的运动对源图像中的对象生成视频序列。作者的框架解决了这个问题,并且没有使用任何注释或关于特定对象的先验信息来设置动画。一旦对一组描述同一类对象(如人脸、人体)的视频进行了训练,这个方法就可以应用于此类的任何对象。

为了实现这一点,作者使用了自监督公式来解耦外观和运动信息。为了支持复杂的运动,作者使用了包括一组可学习关键点的局部仿射变换来表示。生成器网络对目标运动过程中产生的遮挡进行建模,并将从源图像中提取的外观和从驱动视频中提取的运动相结合。
作者的代码已开源:https://github.com/AliaksandrSiarohin/first-order-model
论文:https://arxiv.org/abs/2003.00196

1. 介绍

通过在静止图像中设置对象的动画来生成视频,在电影制作、摄影和电子商务等领域有着无数的应用。更准确地说,图像动画是指通过将从源图像中提取的外观与从动态视频中提取的运动模式相结合,来自动合成视频。例如,一个人的面部图像可以跟随另一个人的面部表情而被动画化。在文献中,大多数方法通过假设对象表示(如三维模型)的强先验,并借助计算机图形学技术来解决这个问题。这些方法可以被称为对象特定的方法,因为它们假定要动画的特定对象的模型的知识。

近年来,深度生成模型已经成为图像动画和视频重定目标的有效技术。特别是,生成性对抗网络(GANs)和可变自动编码器(VAE)已被用于在视频中传输人类受试者之间的面部表情或运动模式。然而,这些方法通常依赖于预先训练的模型来提取特定于对象的表示,例如关键点位置。不幸的是,这些预先训练好的模型是使用昂贵的ground-truth数据注释构建的,通常不适用于任意对象类别。为了解决这个问题,Siarohinet al.引入了Monkey Net,这是第一个对象不可知的图像动画深度模型。Monkey-Net通过自我监督的方式学习关键点来编码运动信息。在测试时间,源图像根据在驾驶视频中估计的相应关键点轨迹进行动画。Monkey-Net的主要缺点是,它在假设零阶模式的关键点邻域中对对象外观转换的建模很差。这导致在大的物体姿态变化的情况下生成质量较差。

为了解决这个问题,作者使用了一组自学习的关键点和局部仿射转换来建模复杂的运动。因此,称他们的方法为一阶运动模型。其次,作者引入了一个遮挡感知生成器,它采用了一个自动估计的遮挡掩码来指示在源图像中不可见的物体部分,并且应该从上下文中推断出来。这是特别需要的转换的视频包含大的动作模式。第三,作者扩展了通常用于关键点检测器训练的等方差损失,以改进局部仿射变换的估计。第四,实验表明,这种方法明显优于最先进的图像动画方法,并可以处理其他方法通常失败的高分辨率数据集。最后,作者还发布了一个新的高分辨率数据集Thai-Chi-HD。

2. 方法

我们感兴趣的是根据驱动视频\mathcal{D}中相似对象的运动来制作源图像S中描绘的对象的动画。由于无法直接监督,作者采用了一种源于Monkey Net的自我监控策略。对于训练,作者使用了大量包含相同对象类别的对象的视频序列。模型通过组合一个单一的帧和一个学习的运动的潜在表示来重建训练视频。通过观察从同一视频中提取的帧对,它会学习到将运动编码为特定于运动的关键点位移和局部仿射变换的组合。在测试时,将模型应用到由源图像和驱动视频的每一帧组成的对上,并对源对象进行图像动画。

方法概述

上图概述了作者提出的方法。该框架由两个主要模块组成:运动估计模块和图像生成模块。运动估计模块的目的是预测从一个驱动视频中的帧D \in \mathbb{R}^{3 \times H \times W} 到源帧S \in \mathbb{R}^{3 \times H \times W} 的稠密运动场。稠密运动场随后用于将从S计算出的特征图与D中的目标姿态对齐。运动场通过一个函数\mathcal{T}_{S \leftarrow D} : \mathbb{R}^2 \rightarrow \mathbb{R}^2建模,该函数将D中每个像素位置映射到S中相应的位置。\mathcal{T}_{S \leftarrow D} 通常称为反向光流。这里采用反向光流,而不是前向光流,因为反向可以通过双线性采样以一种可微的方式有效地实现。
(光流是由观察者和场景之间的相对运动引起的视觉场景中的运动模式。Lucas-Kanade 光流法中后向方法计算量显著降低。)

假设存在一个抽象的参考框架R。独立地估计两个转换:从RS (\mathcal{T}_{S←R}) 和从RD (\mathcal{T}_{D←R})。请注意,与X2Face不同,参考框架是一个抽象概念,在稍后的推导中会被抵消。因此,它永远不会被显式地计算,也不能被可视化。这种选择使我们能够独立处理DS。这是很有必要的,因为在测试时,模型接收来自不同视频采样的源图像和驱动帧对,这在视觉上可能非常不同。与直接预测\mathcal{T}_{S←R}\mathcal{T}_{D←R}不同,运动估计器模块分两步进行。

在第一步中,使用自监督学习的关键点,从稀疏轨迹集合中估计这两种变换。其中D和S的关键点的位置由编解码器网络分别预测。关键点表示作为一个瓶颈导致紧凑的运动表示。如Siarohinet等人所示,这种稀疏运动表示非常适合于动画,因为在测试时,可以使用驱动视频中的关键点轨迹来移动源图像的关键点。我们使用局部仿射变换在每个关键点附近建立运动模型。与仅使用关键点位移相比,局部仿射变换允许对更大的变换族进行建模。我们用泰勒展开表示一组关键点位置和仿射变换。为此,关键点检测器网络输出关键点位置以及每个关键点的仿射变化参数。

第二步,稠密运动网络结合局部逼近得到密集稠密场\mathcal{\hat{T}}_{S←D}。此外,除了密集运动场,该网络输出一个遮挡掩模\mathcal{\hat{O}}_{S←D},该掩模指示哪些图像部分可以通过源图像的扭曲来重建,哪些部分应该被修复,即从源图像中推断出来上下文。

最后,生成模块呈现源对象在驱动视频中移动的图像。在这里,我们使用一个生成器网络G,它根据\mathcal{\hat{T}}_{S←D}对源图像进行扭曲,并修复源图像中被遮挡的图像部分。

3. 实现

作者开源了代码,可以自己跑一跑。
百度也提供了基于PaddleGAN实现的First Order Motion model,实现步骤相当简单:https://aistudio.baidu.com/aistudio/projectdetail/1602499?forkThirdPart=1

迫害了一只柴犬.gif
上一篇下一篇

猜你喜欢

热点阅读