什么叫做动作迁移?
最初看到的应该也是知名度比较高,也比较有的代表性的工作应该是UC Berkeley的everybody dance now,效果应该算是至今较好的。
Everybody Dance Nowcarolineec.github.io 可是演示视频需要科学上网,大概就是可以实现两个人之间的动作的迁移,其实现的效果大概是将动作信息转移到一个目标人物上,让他做出你想要的动作。
Background:
最早的一些工作是通过将视频帧重新排序,来模拟我们想要的动作,缺点很明显,对于一些没有出现过的动作,就很难合成出来。
有些利用图形学的方法,基于类似SMPL一样的人体模型表示,通过调整动作参数,然后渲染的方式得到我们想要的人物动作,但是想得到photo-realistic的图片,往往需要非常精致的人体模型以及光照建模,转化时间往往需要很久,达不到实时的迁移要求。
随着VAE,GAN之类的深度生成模型的兴起,给大家了许多新的思路,因为利用生成网络一旦训练结束,要使用,只要提供动作信息源,生成速度很快。
我大致将其分为两种,其中最多的为
C-GAN With Paired Date VAE-GAN with cycle-consistency 其中第一个思路用的最多,效果也比较好,第二个思路感觉比较困难,也见的比较少,但是我觉得第二个思路也很有价值。
为了描述方便,我们先规定一下符号。
运用这些模型的模型一般都有一个source set(一般为一段视频或者实时摄影,简称S),用来提供动作信息(S.P),一个target set(迁移的目标的一段视频,简称T),其动作信息我们简写为T.P。
C-GAN With Paired Date
[1][3]可以说是其中的代表,这类方法通常需要这么几个主要的关键点。
需要强有力的动作信息的表示载体以及从图片中提取这种载体的方法,如[1]是利用的openpose[2]的动作提取,利用人体关键点连线为火柴人来作为动作信息的载体。[3]利用人体模型作为动作信息的载体,提取方法就需要一些human mesh recovery的方法[4]。并且目前来看,openpose与humen mesh是最普遍的两种动作信息的表示方法。训练数据通常需要 T 与其提取出的 T.P 作为配对训练数据。从动作信息到生成视频使用C-GAN,如[1]用的就是pix2pixHD。process overview
利用T + T.P来训练C-GAN。
使用时,只需从S中提取S.P , 并考虑到S与T人体比例等的不同,对Pose做一些适当的修正(Pose Mapping)作为T.P输入到C-GAN就能生成对应的图像。
方法的效果大都不错,缺点就是数据需要大量的预处理来做配对。
VAE-GAN with cycle-consistency
这种方法几乎没人用,大家多用它无监督的图片风格迁移,2018的CVPR等顶会种有很多这样的工作,如果将动作信息的迁移看成image transfer,应该是可以做的,但是难度想来应该是很高的,因为不同于风格迁移,动作信息往往会带来整个图片结构的变化。
但是文章Automatic Unpaired Shape Deformation Transfer(我写的解读),利用这种方法实现了human mesh的动作信息的迁移,而且demo展示非常漂亮,那么这个思路应该是可以做动作迁移的。
process overview
这是大概的思路,主要就是结构就是VAE-GAN,先将图片映射到latent space,S.P与T.P就隐藏在编码S'与T’中,我们期待找到映射完成动作信息的转移,同时转换过后不会被S:Discriminator 与D:Discriminator判别出来。
训练可以进行下几步:
利用S与T分别训两个VAE-GAN,loss 为对抗网络D与原图与生成图的相似损失(如 ) 固定VAE,训练两个映射与S:D,T:D与映射G,F(可以用全连接层做),loss为对抗网络D与原图与生成图的相似损失+cycle-consistency。关于为何这样可以迁移动作信息却不会损失S或者T的体型之类的信息,可以参照我的Automatic Unpaired Shape Deformation Transfer这个解读。
当然这个思路我还没有尝试,直觉告诉我是可以做的但是应该会很困难,图片的信息量应该还是比human mesh要大,两个映射在latent space直接映射,参数很多,这都会带来很多困难。
感觉latent space 里面加入一些feature disentangle的工作,让表示motion,位置信息与体型,衣服等identical的信息分割开来,可以降低映射参数,训练起来更简单些。或者想办法在latent space里面加入一些人体低维表示的先验,都是可行的思路。类似的工作可以从人脸的表情迁移中找到一些对应(人脸由于变化幅度远远小于人体,用这个思路是很靠谱的),如[5]
这个方法最大的优势就是无需对数据做预处理,只需要两段视频训练就是了。
总结:
两种方法对于遮挡,幅度较大的动作表现都不是太好,这是受数据集限制的。期待有更漂亮的方法吧
[1] Caroline Chan, Shiry Ginosar, Tinghui Zhou, Alexei A. Efros.2018. Everybody Dance Now.arXiv:1808.07371
[2] Zhe Cao, Tomas Simon, Shih-En Wei, and Yaser Sheikh. 2017. Realtime MultiPerson 2D Pose Estimation using Part Afnity Fields. In CVPR. [3] Tomas Simon, Hanbyul Joo, Iain Matthews, and Yaser Sheikh. 2017. Hand Keypoint Detection in Single Images using Multiview Bootstrapping. In CVPR
[3]Liu, Lingjie and Xu, Weipeng and Zollhoefer, Michael and Kim, Hyeongwoo and Bernard, Florian and Habermann, Marc and Wang, Wenping and Theobalt, Christian.2018.Neural Animation and Reenactment of Human Actor Videos.arXiv:1809.03658
[4]Angjoo Kanazawa, Michael J. Black, David W. Jacobs, Jitendra Malik.End-to-end Recovery of Human Shape and Pose.CVPR 2018
[5]Kaidi Cao, Jing Liao, Lu Yuan.2018. CariGANs: Unpaired Photo-to-Caricature Translation.ACM Transactions on Graphics (2018). [8]Chen, X., Duan, Y., Houthooft, R., Schulman, J., Sutskever, I., Abbeel, P.: Infogan: Interpretable representation learning by information maximizing generative adversarial nets. In: NIPS. (2016)