简介:
Facebook research的团队在他们发表的DensePose系统的基础上尝试了姿态迁移的工作,使用2D->3D的方法实现为图像中的人生成不同姿态下的外观。实验效果显示,在定量比较上,Dense Pose Transfer比现在的一些基于二维平面姿态估计的生成方法要好。
Dense Pose Estimation 简介
Dense Pose Estimation可以实时将2D图像中的人转换为3D人体模型,这项成果已经作为CVPR2018的oral论文发表。

如上图所示,DensePose系统将人体的3D表面模型切分为24个部分,然后为每一部分构建一个UV坐标系,将2D图像上的人体部分的每一个点映射到相应的3D表面部分。具体效果如下图所示:

Dense Pose Transfer 整体框架

从上图可以看到,整个框架主要包括3个模块:predictive module , warping module ,blending module . 在给定一个源图片和目标图片的情况下,使用DensePose来估计源图片和目标图片中的人体姿态,然后将其输出作为Dense Pose Transfer模型的输入。预测模块生成较为模糊的图像,但保留了大致的体型,头发,性别等信息;变形模块则更多的关注于对纹理的预测。最后将两个模块的输出作为混合模块(blending module)的输入,混合模块结合两者的优点,生成最终的结果。
Predictive stream
预测模块主要是一个使用DensePose系统的输出来做姿态迁移的条件生成模型。现有的模型将目标姿态用关键节点的热力图表示或者用小火柴人的形式来表示。本文将源图片和DensePose系统对源图片和目标图片提取的DensePose的结果直接相连作为输入,得到一个256 x 256 x 9的输入。然后,输入的数据通过3个卷积层,得到64 x 64 x 256的feature map,随后通过6个残差块,还有两个转置卷积层和一个卷积层,得到最终的Predicted Image。
Warping stream
Warping模块主要是通过在共同的表面 UV坐标将输入图片的纹理贴图到目标图片中。这个模块的核心是STN(Spatial Transformer Network) 。 DensePose将人体的3D模型分割为24个部分,STN根据DensePose的输出将源图片的人物对齐到24个部分的UV坐标系中,然后在每个UV坐标系中进行插值。然后用另一个STN模块从UV坐标系转换到输出图片。但是直接这样做效果不好,因为源图中包含的人体信息一般不能覆盖整个人体,而且跟目标图片中的人体外表的重合部分一般比较少,所以研究者们在这个warping模块中加上了一个修复网络(inpainting network):

inpainting模块主要是从STN模块填充的人体表面节点推断人体剩余部分的外表。因为系统不能得到完整的人体表面信息,所以研究者使用了不同于其他深度修复方法的inpainting方法。如上图所示,左边的输入图片中的人通过STN对齐到24个人体表面坐标,随后作为inpainting autoencoder的输入。inpainting autoencoder需要根据输入来预测出同一个人在不同视角下的外观。然后收集同一个人的多个角度下的图片作为修复模块的目标输出来做监督信号去训练模型。这种多视角监督的方法可以近似得到人体的所有外观信息。
inpainting模块包括 N 个autoencoder,N取决于DensePose中将人体的表面模型分为多少部分,这里N取24 。每个autoencoder单独处理一部分。下图是使用inpaintting autoencoder的效果:

上图中,对于每一个人的生成结果,顶行是直接使用两个STN对齐的结果,底行是加上了inpainting autoencoder的结果,可以看到加上修复模块后,可以生成更多的衣服纹理特征。
Blending module
Blending 模块主要是将predictive 模块和warping模块的预测结果混合起来生成更为精细的目标图片。此模块不包含encoder或者decoder,只有2个卷积块和3个残差块。论文的框架中,预测模块和变形模块都先单独预训练之后,再结合混合模块一起训练。
Loss Functions
Reconstruction loss :

Perceptual loss :

这里使用一个预训练好的VGG19网络来对真实图片和生成图片提取中间层特征,这里


Adversarial loss

其中

从效果上来看,与论文的方法相比,感觉DSC生成的细节更多一点,在人脸上
的对比尤其明显。
接着论文与当前的比较新的方法做定量对比:

best structure model : 在最后训练整个模型的时候只使用



另外,论文还与基于人体关键节点的姿态迁移方法生成的图片质量做了对比。效果如下图所示,第一行是基于关键节点的效果图,第二行是基于DensePose的效果图。可以看到,基于DensePose做姿态迁移生成的图片可以更好的生成四肢。

网友评论