如今已经有不少Motion Imitation的工作,这一工作旨在输入给程序一张静态人体图片与一个人体运动视频,来生成图片中的人模仿视频中动作的视频。

这篇paper做的也是这样的工作,此外,作者提出的网络还可扩展到Novel View Synthesis与Appearance Transfer的工作上。

Related Work

相关工作

相关的工作已经有很多,但是他们往往是基于2D人体关键点的扭曲,这样的方案往往使得人体的形状信息(如高矮胖瘦)丢失,会把源图像的人体“压扁”或“拉伸”以扭曲成参考图像中人体的形状。

此外,由于许多工作是直接对整个人体进行建模,这样会导致如人脸、衣服纹理等细节信息被遗漏,而不能正确地生成。

Method

Liquid Warping GAN pipeline

这篇文章基于之前工作的缺漏,提出了一个基于3D人体模型的网络。这个网络主要分为三个模块:人体网格重建模块、流合成模块以及最核心的Liquid Warping GAN模块。

人体网格重建

这个模块的输出即为整个网络的输出,是一张源图像与参考帧图像,参考帧图像取于参考视频独立的每一帧。这里首先使用了第三方的Human Mesh Recovery网络,来通过图像预测一个三维人体模型,该模型的存储结构为SMPL。

在SMPL模型中存储了 K,β,θ,M{K, \beta, \theta, M} 四个主要信息: KR3K\in\mathbb{R}^3 是一个弱透视相机,代表了将三维网格渲染回图像所需的相机, βR24×3\beta\in\mathbb{R}^{24\times 3} 由24个关节的三维旋转参数组成,而 θR10\theta\in\mathbb{R}^{10} 则是存储了人体的shape信息,MM 则为三角面mesh。

流合成

这部分首先用上一步的相机与mesh通过第三方的Neural Mesh Renderer网络渲染出源图像与参考图像的二维对应图 CC ,这两张对应图只是对人体的粗糙表示,不包括头发、衣物等细节信息。

然后根据 CsC_s 与源图像 IsI_s ,我们可以将 CsC_s 二值化,作为一个粗略的mask,将图像的前景 IftI_{ft} 与背景 IbgI_{bg} 分别提取。

同时,根据两个三维模型中三角面的对应关系,我们可以计算出每个三角面中心的运动方向,并以 KsK_s 投影回平面,计算出 CsC_sCtC_t 的运动场 TRH×W×2T\in\mathbb{R}^{H\times W\times 2} ,即为 CsC_s 中每个像素点需要进行怎样的扭曲才能得到 CtC_t

IsI_sTT 做一个双线性采样,可以获得根据运动场扭曲的源图像 IsI_s^{'} ,然后用 CtC_t 二值化后的mask与其进行遮罩,可以获得一个扭曲后的前景人物 IsynI_{syn} 。需要格外注意的是:尽管在pipeline的示意图中, IsynI_{syn} 看似是一个很精确的前景人物,但必须指出:pipeline中的工作取的源图像与参考图像皆来自于同一视频,所以其人物的shape是相同的。在实际推断的过程中,并不能保证两者 的shape完全相同,所以以 CtC_t 计算的mask并不一定能和 IsI_s^{'} 很好地对应,所以会多取到一些背景部分、或者少取一部分前景,这都是正常的。

Liquid Warping GAN

这个模块由三个子网络组成:

  • GbgG_{bg} 对缺失的前景的背景图像 IbgI_{bg} 进行图像补全,生成完整的背景图像 I^bg\hat I_{bg}
  • GSIDG_{SID} 是一个去噪卷积自编码器,其旨在提取出源图像中的人脸、衣服、纹理等identity信息。这个网络的输出为一张attention map AsA_s 和一张color map PsP_s 。将其与补全的背景图像结合: I^s=PsAs+I^bg(1As)\hat I_s = P_s * A_s + \hat I_{bg} * (1- A_s) 计算出一张重建的源图像 I^s\hat I_s ,并与原图计算感知loss,来不断优化这个自编码器。该编码器的结构类似于UNet与ResNet的结合,但两者并不共享参数。
  • GTSFG_{TSF} 的结构与 GSIDG_{SID} 类似,只不过多了来自 GSIDG_{SID} 的identity输入,该输入流通过Liquid Warping Block对齐后进行输入。

Liquid Warping Block

Liquid Warping Block

LWB的结构如图所示, XlX^l 即为自编码器中第l层的feature map。首先将来自于 GSIDG_{SID}XslX^l_s 与之前预测出的运动场T进行双线性采样(图中绿色部分),然后将其与 GTSFG_{TSF} 对应层的feature map直接相加,得到结合后的feature map,作为下一层 GTSFG_{TSF} 的输入。

作者提出,由于有了LWB的结构,可以使多个源的feature map融合在一起,只需提供其对应的运动场T,即可实现多源的叠加,比如取出图1的人脸与图2的衣服以及图3的动作进行组合。

X^tl=BS(Xs1l,T1)+BS(Xs2l,T2)+Xtl\hat X_t^l = BS(X^l_{s_1}, T_1) + BS(X^l_{s_2}, T_2) + X^l_t

以上就是Generator的大体结构,Discriminator的部分参考了Pix2Pix这个工作的架构。

Loss

Loss主要分为四个部分:感知loss、人脸loss、GAN-loss与attention-loss,感知loss与人脸loss无非就是对生成结果与ground truth之间的L1 loss,没有什么特殊的部分,这里着重介绍一下attention-loss。

作者指出,预测出的attention map很容易饱和到全为1的情况,使用这样的饱和attention map与color map结合,就相当于把整张color map当作最终图像,并且完全覆盖掉背景。但是网络的输出其实只包括了人物前景,对于背景的预测完全是随机而错误的,需要弃用。

作者考虑到,既然attention map的作用是取出较为精确的前景,那就可以把渲染图 CC 二值化后的mask SS 作为其的一个收敛目标,使生成的attention map更加接近 SS 。但是前文也提到过, CC 是一个很粗糙的图像,不能完全作为标准,于是作者这里引入了一个总变差项 Total Variation Regularization:

TV(A)=i,j[A(i,j)A(i1,j)]2+[A(i,j)A(i,j1)]2TV(A) = \sum_{i,j}[A(i,j)-A(i-1,j)]^2+[A(i,j)-A(i,j-1)]^2

这一项使得生成的attention map不会完全趋近于 SS ,而是在边缘部分更加平滑,这样的处理也可以使得前景与背景的轮廓过渡得更加自然。

完整的attention-loss计算如下:

La=AsSs2+AtSt2+TV(As)+TV(At)L_a = \|A_s-S_s\|^2+\|A_t-S_t\|^2+TV(A_s)+TV(A_t)

Inference

Inference

这篇文章的一大亮点就是提出了一个针对三个工作的统一网络。

在Novel View Synthesis工作上,由于我们已经有了由源图像建模出的3D模型,通过另一角度渲染出对应平面图并不是什么难题,有了渲染图,接下来的流程都与原模型相同。

而Appearance Transfer可以直接看作一个多源输入的问题,输入不同的mask与T,进行特征的融合生成即可。