(学习笔记)An Uncertain future: forecasting from static images using variational autoencoders
最近在看这篇关于视频生成的论文,看之前google了一下没有找到有关的中文导读或翻译,所以既然要做笔记,就干脆写在这里好了,然鹅本人水平有限,有可能会产生误导,这篇blog只作讨论。
这篇论文的目的可以归为:event/action detection & visual activity forecast。
理想下,模型可以输入一张静态图片,输出对图片中的目标semantic动作的预测,这里的semantic就是指以人的角度怎么看,模型就应该怎么预测,比如摄影师抓到了一张照片:熊孩子在街上跑,摔了,那么我们看到熊孩子摔倒瞬间的图片时,第一反应应该是熊孩子往前倒了,所以模型读到这张图片,应该输出下一时刻的一系列帧应该是熊孩子趴在地上了。也就是说,输入模型的是目标前倾的照片,输出是一系列接下来的动作的预测图像。然而现有技术还不支持输出如此规模的输出,算一下,如果一张320*240的图片30fps,那么即使半秒的输出维度也达到了。所以本文采用通过静态图片生成接下来图片目标的运动的dense trajectory 利用轨迹来预测目标的运动。
简单说,dense trajectory就是图像中兴趣点随时间变化的描述,下一时刻兴趣点的位置等于这一时刻位置加上dense trajectory在这一时刻的分布。原理这篇讲的非常可以https://zhuanlan.zhihu.com/p/27528934
现有方法分为两种,一种是以像素为单位展开的方法,非semantic,非监督,可以说非常的atomic,所以这种方法本身需要非常大的计算量;另一种方法就是使用机器学习,现有方法主要有两种,一种是agent-based,导致其在空间上的预测受限;另一种是利用optical flow,但在时间上受限。总之就是这篇论文的方法比较好,它基于第二种机器学习的方法,它厉害在:首先它不需要人工标注;其次它预测时间很长,长达一秒,不要小看这一秒,刚才我们计算过半秒的数据量;并且它的输出可以包含所有可能的预测。
对于一张图片,目标可能的动作实际上有很多,比如正在深蹲的小哥,他站起来和蹲下的动作在中间位置的图片差异可能会非常小,那么这就产生了一个问题,我们输入非常相似的一张图片的时候我们要求可能的输出结果不只一个。深度神经网络实际上做的是对函数的拟合,那也就决定了它对于同一个输入不可能做到不同的输出,即使有细微差异导致不同的输出也需要模型有超大的capacity,这点很难做到。因此,文章利用的生成模型variational autoencoder (VAE),也就是采样latent space(通常是高维高斯分布)将其映射至输出模型的分布。但是问题来了,对于不同的图片的预测一定是不同的,所以聪明的作者想到了将图片作为先验条件,再对latent space采样以概率的形式产生输出的方法。下面来讲一下作者怎么做到这件事的,先看一下模型的结构。
来推导一下数学公式,经过推导我们会发现推导的结果和作者给出的模型图是一样一样的。
我们本来的目的是想得到,但由于刚才的解释我们无法直接得到,所以我们希望利用去近似,即,为了生成方便,我们希望。
根据bayes,,
则,
为了生成模型,引入q(z):
分析一下,上面公式LHS第二项是XY下生成z先验分布的KL divergence,如果我们可以将其缩减至0的话,就可以直接逼近p(Y|X),事实上,我们完全可以将KL divergence加入目标函数来使其降至接近0(因为Q的结构可以做到capacity很大),这也吻合了VAE的特点,当Y未给出时,z与X无相关性,可以与第三项消掉,那么就达到了testing时的目的。而训练时,对KL的缩小既促进了逼近,又提升了。所以在implementation时,用decoder(CNN)来近似(reparameterization)使其tractable就大功告成了。
在实现上,分别有三个tower来解决相应的问题。首先是image tower,实际上是比AlexNet更深的CNN,用来对图像作特征提取;encode tower,也是CNN,输入是将后续视频提取的dense trajectory与image tower提取到的特征进行concatenation,输出八对图片分别作为均值和标准差,这个在测试阶段就会分别接近0和1了,主要是拿来逼近p(z|X,Y);decoder tower实际上也是CNN,输入是image tower和encoder tower的输出相乘,输出预测的dense trajectory,用来近似p(Y|X,z)。
这里注意几个细节,首先目标函数是
他们这样做的原因是他们发现把dense trajectory normalize之后拆分成图和全局magnitude两部分会收敛的快,而最后一项就是VAE经典的KL divergence。
在label的处理上他们使用的是与action recognition with improved trajectory一样的方法,这个方法的原理来源于dense trajectory and motion boundary descriptors for action recognition,都是为了得到,最大的不同在于这篇文章使用了SURF和optical flow descriptor结合的方式进行interesting points的采集并使用了RANSAC进行camera motion的过滤,说白了就是防手抖。从文章decoder tower的输出层数来看,他们提取了每一张图片后1s内的5帧进行处理得到dense trajectory(分为x、y两个方向);另外,他们分别针对得到的dense trajectory的x和y方向上的偏移分别进行了离散余弦变换压缩。(这里实际上看的不是很清楚)
对于升采样,他们把得到的输出与decoder不同的conv layer concatenate在一起,再经过decoder的最后一层输出出来。
在评估中,他们选用了比较直观的Euclidean distance,因为log likelihood不好解释,他们对比了不用VAE直接用regressor和利用optical flow两种方法,在预测ED上效果拔群!文章的图片中还展示了,沿着z采样会生成从正确到正确相反的预测,但都是可能的预测。
最后,他们还利用他们的模型(image tower)进行了representation learning的评估,经过一些fine-tune之后,很惊喜的发现他们的模型对目标检测的能力也超过了目前的unsuperised learning model。
参考
http://people.csail.mit.edu/torralba/publications/evt_pred_eccv2010.pdf
http://vision.cs.utexas.edu/aavl_workshop_eccv16/papers/AAVL_PID14.pdf
https://www.cvfoundation.org/openaccess/content_iccv_2013/papers/Wang_Action_Recognition_with_2013_ICCV_paper.pdf
https://www.cvfoundation.org/openaccess/content_iccv_2015/papers/Eigen_Predicting_Depth_Surface_ICCV_2015_paper.pdf
https://hal.inria.fr/hal-00725627v2/document
https://blog.****.net/ecnu18918079120/article/details/78195792
https://blog.****.net/shenziheng1/article/details/52965104
https://blog.****.net/u011835903/article/details/77848011
https://blog.****.net/zyh821351004/article/details/47206297