假期里参加了百度的飞浆论文复现的课程,遇到一篇比较有意思的文章,分享一下。
First Order Motion Model for Image Animation
——Aliaksandr Siarohin, Stéphane Lathuilière, Sergey Tulyakov, Elisa Ricci, Nicu Sebe
这篇论文是多伦多大学的Aliaksandr Siarohin等人在NeurIPS 2019(33rd)上发表的文章,主要讲的是通过深度学习来实现动图或者影像的预测或者构建。
通过静态图像来直接生成类似影像的动图或者视频有比较大的应用价值,特别是在电影制作、动画游戏、电子商务等行业,传统的方法比较侧重于采用GAN、VAE等方式,用大量的训练数据,在像素级别来预测构建未知的视频帧,这种方法训练数据需求较大,训练过程比较消耗资源,但是效果并不好,不够清晰。论文中的方法以前期的Siarohin提出的Monkey Net为参考,并不是直接针对未知的帧在像素级别进行直接预测推断,而是通过深度网络模型来分析推断影像相邻帧的变换矩阵上,然后将预测到的变换矩阵施加到静态图上来获得一系列变换后的影像帧。
网络结构
这篇论文所采用的模型可以在上图中进行直观的呈现。模型的输入端包括最左侧的两部分:上面的是原始静态图,也就是已知的源图片,Source Image;下面的是参考影像,它是一副开始的帧与静态源图类似的,后面有持续的动态变化的一段影像或者帧序列,称为驱动视频。这个模型的目的是让静态源图能够学习到驱动视频中的主体在后续帧中的的连续的空间和位置变换,从而在驱动视频的“指导”下生成源图的后续帧序列。
它所搭建的网络结构包含两部分:
第一部分称为Motion模块,就是框在浅黄底色的部分。这个模块的采用在源图和驱动视频中寻找对应关键点的方式来计算驱动视频的变换矩阵。这篇论文中比较有特点的是,它假定了一个隐性的参考帧R,然后将驱动影像对源图变换的指导转化为参考帧对源图变换的指导,以及驱动影像对参考帧的指导,两个相对独立的部分。论文提到,这样做能够将源图和驱动视频进行分离,在测试阶段,即便在静态源图和驱动视频的场景存在较大的差异同时仍然能够保证模型预测的稳定性。参考帧在模型搭建和数学处理中会消掉,在模型构建中并不是以真实的图像帧的形式来显式表现。
论文中的模型通过关键点以及相邻帧的变换来提取能够对源图主体模型进行指导的变换矩阵,同时,在模型中还对驱动视频中每一帧的内容进行了分析,将其中静态的部分和动态的部分进行了分离,这样除了获得驱动视频每一帧的变换信息,还获得了差异化的信息,从而能够更好的对源图的主体进行运动指导,同时还避免了主体以外的部分被驱动视频的变换所干扰。
第二个部分称为Generation模块,这个模块相对比较简单明了,源图直接输入这个模块,在Motion模块所获得的变换矩阵以及差异化的屏蔽矩阵的作用下,通过变换获得了与驱动视频类似的动画效果。
通过这个模型的实施方式可以看出来,与常规的GAN、VAE等生成模型不同,这个模型Motion模块关键部分的计算是针对关键点来开展的,而不是针对源图和驱动视频各帧的像素来开展的。最终所获得的模型,也是将变换施加到源静态图上,而不是通过计算结果和输入的像素级的Loss来开展的,这样即便源图、视频比较大,模型整体的计算资源消耗能够得到较好控制。
论文特点:First Order
这篇论文将它所设计的模型称为First Order Model,之所以称为First Order,是因为论文在处理R→D和R→S仿射变换的数学模型时采用了泰勒展开的方式来处理,如下图所示。任意位置p处的R→X的变换在特定的pk位置进行泰勒展开,展开后p处的R→X变换转化为pk位置的变换和相对于位置的1阶以及高阶的无穷小量,论文截取了1阶的近似,舍弃了高阶小量,用来作为对R→X的变换的近似。论文还指出在Monkey Net实际上是这种处理方式的0阶近似。
论文采用上述的泰勒展开近似,结合前述的在D→S的变换中引入参考帧R,将变换分解为R→S以及D→R逆变换两部分,并将最终的问题转化为雅可比矩阵Jk的计算。Jk最终被输入到生成网络模块,用于视频合成。
评价
这个模型从结果来看效果还是很好的,有些人还用论文的模型用冰火中的人物对懂王的表情动画进行了模仿,合成效果很自然,可惜gif文件太大,发不上来。在比较相近的研究中,前期类似的模型主要有X2Face和Monkey Net,论文作者在太极拳(Tai-Chi-HD)等数据集上面所获得的定性和定量的评价指标都体现出更为优异的性能,特别是在视频生成中,前两者在前几帧尚好,很快就预测出非常怪异的动作结果,但是这篇论文中提到模型的预测结果通常都能较好的符合正常情形,不会很怪异,而且预测结果也较为清晰,有兴趣的朋友可以尝试一下。