解析Im2Flow:Motion Hallucination from Static Images for Action Recognition

这篇论文是2018年cvpr的口头演讲论文,作者是德克萨斯大学奥斯汀分校的,这篇论文的思想主要是基于卡耐基梅隆大学的Dense Optical Flow Prediction from a Static Image的思想,但是采用的方法和结构都不太一样,总体来说,这篇论文的方法很有效,值得继续做下去。这篇论文主要从以下几点进行阐述:

  • 论文思想
  • 论文贡献
  • 实现细节
  • 实验结构
  • 实验结果

论文思想

解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
本文通过预先训练的Im2Flow网络,实现从静态图预测得到光流图的目的。通过利用大量的视频数据训练Im2Flow网络,让其学习行为先验,然后向网络中输入一张静态图,从而得到该静态图的预测光流图,利用静态图和预测得到的光流图,共同送入双流网络中得到分类的结果。

论文贡献

这篇论文的主要贡献有两点:
1.提出一种新的光流编码方式
2.提出一种编解码网络结构生成光流
3.可以将原始静态图像和生成的光流图像共同送入双流网络结构

##实现细节
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
该论文提出的网络结果如上图所示:经过大量的视频预训练之后,将静态图像送入编解码网络中,该部分的网络主要利用了U-Net的网络结构,其中在编码,也即提取特征的部分网络中采用的卷积方式为空洞卷积(Dilated Convolution),空洞卷积的作用主要就在于既能不需要像池化那样丢掉信息,又能扩大感受野,同时还能不增加计算量。静态图像经过编码部分后提取高维特征,又经过解码部分得到预测的光流,这样得到的光流势必是不精确的,而作者在后面又添加了一个loss Network 用于对生成的光流图进行修正,逐像素的修正光流图,最小化loss,最终得到的**图。
论文作者在github上给出的源代码(代码地址)主要是基于pixelGAN的,使用的框架是Torch。在编码解码网络结构中作者使用的是U-net网络,使用了三个U-net结构对应生成光流的三个通道,在loss network中使用的resnet18的前两层,将光流图输入到loss network中进行**并逐层的计算预测光流和真实光流的activation map,计算他们之间的差值,通过将pixel loss和content loss加和来反向传播调整U-net网络的权重,让其生成更加准确的光流。

  1. 损失函数的解析

解析Im2Flow:Motion Hallucination from Static Images for Action Recognition

文中给出的损失函数的公式如上图所示,其中L_pixel损失代表的是预测的光流图与真实的光流图之间的差值的l2范数,它的作用是衡量预测值与真实值之间的一致性。L_content损失表示的是预测光流图和真实光流图的特征表达之间的欧式距离(差值的l2范数)。
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
上图所示为pixel损失,可以看到的是它衡量的是真实值和预测值之间的欧式距离,这一损失的主要作用是衡量预测光流和真实光流的一致性。
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
上图所示为content损失,可以看到的是它衡量的是在经过**函数后的feature map的一致性,他这样做的目的是保持预测光流能够保持high-level的特征。其中,就我的理解来说,前面乘上的与D,H,W有关的常数的作用在于对特征图的差别的期望的平均值,因为这个损失衡量的是逐层的feature map的欧式距离,在原文中采用的结构是resnet-18的前两层,也就是说会产生两层的feature map。

将pixel和content损失加和后,作为整个网络的损失,反向传播来调整U-net结构的参数,让其生成更符合要求的光流图(个人理解,这个根据损失和反向传播的过程文中并没有详细说明,但是值得注意的是网络结构并非一个端到端的网络)。

2.新颖的光流编码方式

本文中提出了一个新颖的光流的编码方式,原始的光流编码方式可能主要是以相邻两帧之间水平/竖直方向的像素点的位移组成的向量表示,而在本文中,提出将光流梯度转换为由三个变量表示的可factored的三个量, 并且这三个量形成的图作为光流图的三个通道,即将原始的光流图表示成为一个三通道的光流图。这三个量的公式如下图所示:
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
原文中,梯度M表示光流向量的大小,用正弦和余弦角度对光流的方向进行分解,这样做的好处就在于:即解决了角度的圆性(0=2pi),又将行为特征编码为三个值,使得行为特征可分解了,更有利于做回归。

###实验结构
前文也反复提到,本文中使用的生成光流图的结构是U-net,并且为了对应生成三通道的三张光流图,代码中作者使用了三个U-net结构,并且结构基本都是相同的。在loss network中,作者使用的是ResNet-18的前两层,并在UCF101上做了finetune。

实验结果

实验结果如下面两图所示,本文对比实验采用的一个结构就是2016年卡耐基梅隆大学的Dense Optical Flow Prediction from a Static Image, 这篇论文的基本思想是利用卷积神经网络,对输入的静态图像上的每一个像素点进行方向的预测,其中方向的类别共有40类左右。通过下面两张图可以看到,本文中提出的方法,得到的光流图用于行为识别的效果略好于Walker的论文,并且准确度也更高,但是距离用真实光流做的行为识别的效果还有一段距离。
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition
解析Im2Flow:Motion Hallucination from Static Images for Action Recognition

###总结
总的来说,这篇论文中的思想,用预测的光流来实现行为识别,在未来的研究中应该还有很大的提升空间,2018年LeCun在IJCAI的演讲中提到在未来的深度学习研究中,自监督学习应当是未来发展的重点,而自监督学习中一个很重要的概念就是好奇心机制。当我们走在一个十分熟悉的走廊时,当我们走到一个转角的时候,虽然被墙挡着,但是我们的脑海中马上就能浮现出走廊的后面有什么,是一个楼梯还是一个门,因为我们对于这个走廊十分熟悉,而这种幻想走廊的转角后面有什么的思路,就与本文中的这种“幻想”行为不谋而合。有兴趣的同学可以查一下自监督学习的部分,有一个非常好的解析,忘了是知乎还是简书上面的了,如果我后面找到的话会放上来。整篇论文的解析也许会有不正确的地方,有错误还望指出,我们一起交流一下~