基于Transformation Generation的单张图像视频生成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feimengjuan/article/details/73614125

最近北京大学的几位研究者在ACM会议上发表了基于变换生成的单张图像视频生成。原论文题目为《Video Imagination from a Single Image with Transformation Generation 》。


论文代码在Github上也给了出来https://github.com/gitpub327/VideoImagination。


 当看到这篇论文时,瞬间就被吸引,是因为生成的视频效果确实很好。毕竟在几个月前,导师让想想如何进行这种视频生成时,自己脑子一片空白。2016年,MIT人工智能实验室的研究员利用GAN来自动生成视频,当时已经惊讶于GAN的强大,但是从生成的视频结果来看,自动生成的视频结果还是不太真实,视频中的物体场景常常被渲染成模糊的一团。而北京大学的这篇论文里面的生成的视频结果十分真实,也没有出现场景模糊的情况。


正好趁这个机会,啃啃视频生成的论文,给出自己的一些总结。


《Generating Videos with Scene Dynamics》


这篇论文的主要思想是用生成对抗网络来进行视频生成。在生成器中,利用一个100维的高斯噪声作为生成器的输入。文章假设视频的背景是静态的,前景是动态的,旨在对运动的物体进行建模。于是提出了一个“双流架构”的生成器,由两个网络组成,一个网络用2维卷积来生成静态背景,一个网络用三维卷积来生成动态的前景。最后将前景放到背景中,形成视频,作为生成器的输出。


生成器


下图是生成器的结构图


生成器中将生成前景和背景结合的公式为:



用文章中的一个图表示,前景和背景相加得到generation:



判别器


生成器生成的视频会被填入判别器中。判别器需要可以解决两个问题:第一,它必须可以判断出哪些视频场景是机器合成的,哪些是真实的;第二,它必须可以识别出视频帧之间的运动。于是,文中设计一个判别器来同时解决这两个问题。他们使用一个kernels为4x4x4的5层的3维卷积,从而让隐含层可以学到视觉模型和运动模型。这个模型差不多就是生成器中的前景生成网络的反向结构,把上采样改为下采样,以及最后一层改为binary classification(real or not).


下面贴出文章中的结果,有几张图还是相当吓人。



基于单帧图像的视频生成


之后,他们也提出给定一帧图像作为输入,来生成这张图像的future,也就是让模型从静态图片中生成多帧的视频。整个模型的框架没有变化,不过将输入变为一帧图像,用一个5层的卷积将图像encode到latent space,作为输入。生成器和判别结构没有变化,但是为了让生成器生成的视频与输入图像保持一致,训练时的目标函数中加了一项损失项来最小化输入图像和生成的第一帧图像的L1距离,从而损失函数变为:


最后的结果如下:


视频生成能有这样的结果,已经非常令人兴奋,不过生成的视频中,特别是人物,常常被渲染成模糊的一团,离生成非常好的动态场景还是有一定距离。



《Video Imagination from a Single Image with Transformation Generation 》


当前几天看到ACM会议上这篇论文时,感觉就像打开了视频生成的新世界,因为一眼看到的视频生成效果太好,于是迫不及待进行了分享。


感觉这篇文章更像是用一些小技巧来使生成的视频图像更真实、清晰。利用Transformation generation应该是本文最大的亮点,也是我说的技巧。上篇文章中直接让生成器从一个高斯噪声中自己去生成视频,没有任何干预(打个不知道恰不恰当的比喻,第一种情况是,给一个从没有见过房子的你一堆砖头,让比建一间房,但是你完全不知道房子该是什么样子的,然后你就开始自己随便搭呀搭,有可能只是把砖头排成了一排,最后把建好的房子放到判别器,结果判别器只告诉你跟真实的房子有多少差距,然后你又自己返回来调整,但事实上你还是不知道房子该是怎么样的结构,也许经过无数次的返回来调整,你终于建了一间跟真实房子差不多的,但是这个过程所需的时间绝对很久,而且最后效果也不一定好。 第二种情况是,如果我给了你一间建好的房子,然后告诉你就把这个房子给我作些变换,给我生成一间稍有差别的房子就行。那这就简单多了,你可能只需要挑几个地方稍微改一改,挪一挪,一间房子就建成了。)


好了,这么长的比喻后,言归正传。MIT的方法就像第一种情况,而这篇论文中的方法就像第二种情况。论文中给定一张图像作为输入,就好比供参考的房子,Transformation就好比挑几个地方稍微改一改。因此生成的几帧图像与输入图像相比,图像场景的大结构不会变,也不会出现生成图像模糊成一团的现象。生成的几帧图像与输入图像之间由于transformation带来一些小的变化正好构成了生成视频内容的动态变化。这里的transformation就是用来对视频帧之间的motions进行建模。


下面就来详细介绍文中所用的方法


先上论文中的总框架图


首先利用卷积将输入图像encode为condition code,再将condition code 和高斯噪声一起输入到Transformation generator,输出为transformation sequence集合。


第二步,将这些transformation sequences应用到原始Input image上,通过一个volumetric merge network来重建frames;

最后,将这些frames组合为一个生成的imaginary video,并利用视频评价网络(video critic network)来实现对抗训练(adversarial training).


整体来说,该文中使用的大框架模型还是生成对抗网络,判别模型没有改变,采用的是上一篇文章中的模型,但是在生成模型中,作者加入了transformation的思想,利用一张输入图像和高斯噪声输入来生成Transformation sequences,然后将这些生成的Transformation sequences应用到输入图像上来重建出frames,组合为生成视频。


下面给出文章中的一些概念和理论定义:


1、问题描述


给定一张图像X,输出m个imaginary视频(每个视频涉及不同的运动情况),每个imaginary视频包含T帧连续图像帧.

理想情况下,我们希望对给定一张图像X下的所有可能生成的imaginary videos的分布进行建模,我们旨在训练一个参数为的神经网络来建立分布。通过训练,我们期望收敛于的最好估计。(后面主要是 文章的一些算法介绍,来不及写,未完待续)

猜你喜欢

转载自blog.csdn.net/feimengjuan/article/details/73614125