前言 这里是我第一次看完论文之后的疑虑。。。可跳过 本篇文章中使用到了光流,光流是什么? 颜色表示不同的运动方向,深浅就表示运动的快慢
不知道大家会不会跟我有一样的疑惑。 首先,论文中的flow map 是如何得到的?光流是通过什么估计的? 生成器的loss中有对《生成的光流图,真实的光流图》进行对比,除此之外还有,《将预测光流warp到当前真实的图像帧预测下一帧图像,真实的下一帧的图像》进行对比。两帧之间真实的光流图是通过flownet2.0得到的,真实的下一帧图像也是已知的,因此我们可以最小化这个loss来估计光流。
跟flow net 2.0得到flow map区别是什么? 我们预测的光流是要去逼近flownet 2.0 得到的光流的。
image.png
文中说,hallucinated image,optical flow,occlusion mask,这三种图获取都是通过(前L帧生成的图像, 前L帧的分割图 当前需要预测的第L帧分割图 )这个输入得到.
那么,输出的这三种图像,是通过什么样的方式训练得到的呢?
重点部分介绍
本文作者之前做过了pix to pix HD图像的工作,这个工作可以看作为之前工作的延伸,可以理解为他将视频分为一帧一帧图像,然后简化视频生成任务为一帧一帧图像的生成,但是考虑到视频生成时,我们需要抱证每一帧图像之间的连贯性,这里的连贯性可以从作者给的视频中看出来(车道中白色基线的连贯)。
既然考虑到了每一帧之间的连续性,那么作者为此建立一个(考虑了之前帧的信息)的生成器模型。除此之外考虑到了在视频连续帧之间是包含了大量冗余的,如果我们能够获取到两帧之间的光流信息,就可以warp当前帧来获取下一帧的信息。当然,在上下帧之间没有出现遮挡的情况,对于光流的预测是准确的。后面会提到如何解决这个问题。
建模公式,w是预测t-1到t之间得到的光流,h是当前分割帧初步得到的预测图像,m简单理解是加权,加权的原因是光流图对于靠近镜头的移动物体,用小的这帧的图像根据光流重建成较近的大的下一帧的图像会产生模糊,所以我们可以逐渐融合h和warp后的图。
重点是损失函数,让我们看看他是如何设计损失函数的
ummm...我们可以拆分每一部分看,F是生成的图像帧。
首先,判别器loss, L_{I}是我们从视频帧中随机取样图片,使得{真实图像帧,分割图像帧}对=1,和{生成图像帧,分割图像帧}对=0,来(训练)最大化图像判别器,然后,同样L_{V}是我们从视频帧中随机取样K个连续帧图像,使用一个操作器获取连续K帧之间的真实的光流图,使得{真实K连续图像帧,K帧之间的真实的光流图}对=1,和{生成K连续图像帧,K帧之间的真实的光流图}对=0,来(训练)最大化连续视频帧判别器。 那么对于生成器loss呢,最小化在分割图条件下的《生成的图像帧,真实的图像帧》之间的距离和 在光流条件下的《生成的连续K个图像帧,真实的连续K个图像帧》之间的距离,还有最小化生成的flow的loss。L_{W}包含最小化《真实光流,预测光流》之间的距离和《将预测光流warp当前真实的图像上从而预测下一帧图像,真实的下一帧的图像》之间的距离相加。
在上下帧之间出现遮挡的情况,对于光流的预测是不准确的。如何解决这个问题? 首先,根据分割的ground truth 将建筑、路面之类作为背景,将人,车之类作为前景,对生成器做一个较强的先验。因为人或者车在图像中所占面积小,并且会有较大的移动,所以光流的预测是不准确的,前景生成器必须要生成这些。对于背景区域,光流是很容易预测的,因此背景区域可以通过之前的warp操作获得,也就是我们的W网络,所以,这里的背景生成器仅仅需要去预测遮挡区域即可。
从这个式子就可以看到,前景的网络输入是分割图像帧,背景网络输入是跟其他W,M是一样的
最终的生成器的架构
这个先验的意义是,以一些小的视觉伪影为代价来获取的更好的视觉效果。
大概就是添加了模糊,人眼会有快速运动的感觉
看代码喽