这篇文章的工作是在 First Order Motion Model 上的修改。

RELATED WORK

FOMM存在一些问题:

  • 比如说两帧之间的keypoints并不能精确地建立好联系,容易出现映射错误,导致运动错误的情况;
  • kp只能代表位置和运动方向,不能表征周围域的形状,比如旋转、缩放之类的特征;
  • 没有考虑到背景的运动,比如一点微小的相机运动或者背景内容的变化都需要单独的kp进行建模,这样一来首先是需要额外的网络来训练背景的kp,其次是可能导致过拟合,最后导致背景的内容被附近的kp带着运动。

METHOD

RegionAA Pipeline

PCA-based运动估计

作者提出,在FOMM中直接对仿射变换参数直接进行回归,需要较大的网络容量,而且建模出来的效果较差。所以在本文中提出了使用region进行预测。

这个region是指 T^SD(z)=M0z+k=1KMk(TSR(pk)+Jk(zTDR(pk)))\hat T_{S \gets D}(z)=M_0 z+\displaystyle\sum^K_{k=1} M_k(T_{S \gets R}(p_k)+J_k(z-T_{D \gets R}(p_k))) 中的 MkM_k ,也就是对于每一个pk的一张张heatmap。由于平移变换还是需要从kp得出,所以平移还是用原本的方法进行预测,但是旋转和缩放使用 MkM_k 的PCA进行预测。作者这里是用了SVD(奇异值分解)进行PCA计算:

μk=zZMk(z)z,UkSkVk=zZMk(z)(zμk)(zμk)T (SVD),AXRk=[UkSk12,μk].\begin{array}{cc} \mu ^k=\displaystyle\sum^{}_{z\in Z} M_k(z)z, \\ U^kS^kV^k=\displaystyle\sum^{}_{z\in Z} M_k(z)(z-\mu^k)(z-\mu^k)^T \space (SVD), \\ A^k_{X \gets R} = [{U^kS^k}^{\frac{1}{2}},\mu^k]. \end{array}

背景运动估计

作者这里额外用了一个网络预测背景的仿射变换: ASD0=[a1,a2,a3a4,a5,a6]A^0_{S \gets D} = \left[\begin{matrix}a_1,a_2,a_3\\a_4,a_5,a_6\end{matrix}\right] ,作者这里提出:从理论上来说,背景运动的训练可能会掺杂一部分前景。但是在实际训练过程中,发现前景的PCA分解比背景更加明显,所以很容易就被区分开了,在训练中没有遇到这种掺杂的情况。

分步生成动画

在FOMM中,对于input的图像和驱动视频其实是有一点约束的:源图像S和驱动视频的第一帧D1需要拥有大体相同的姿态,不然生成效果会受到影响。

本文中针对这一现象引入了一个额外的网络来对动画生成进行编码。

Animation via disentanglement

这里使用S来对前景的shape进行编码,然后用D来编码人物的pose,最后一起丢进一个网络生成最终的帧。由于和FOMM一样,在早期训练的过程中S和D其实是来自于同一段视频的,那显而易见S和D的shape是相同的,为了优化训练,作者在把这个D先进行了一些随机的形变。同时由于pose每一帧都不同,所以就不用额外处理了。