读书笔记27:Im2Flow: Motion Hallucination from Static Images for Action Recognition(CVPR2018)

openaccess.thecvf.com/content_cvpr_2018/papers/Gao_Im2Flow_Motion_Hallucination_CVPR_2018_paper.pdf

本文的题目可看出,与上一篇读书笔记的文章有很大的相似之处,都介绍了从image中幻想出video,然后利用video的temporal feature进行action recognition。

摘要一开始还是介绍背景,即当前的从静态image中识别动作的方法都是用其face value,顾名思义也就是表面的数值,通过学习各种表现出来的东西,例如物体、场景、人体姿态等等,但是这样的方法都缺少动态信息。本文提出的方法就是从静态的图片中幻想出未来的一段motion来辅助预测。本文的贡献主要有二,一是设计了一个encoder-decoder convolutional layer和一个新颖的optical flow encoding用来将静态的image转化为一个精确flow map;第二点是hallucinated flow在动作识别中的重要作用。

本文的摘要分这么几个部分,首先简介背景,也就是当前方法的不足;之后针对提出来的不足引出介绍本文算法,说明自己算法的核心操作是什么;接着作者介绍了本文的主要贡献;最后介绍下实验情况。

optical flow能够很有效的抓住视频中的动态信息,但是二维的video的optical flow只有两个channel,而当前的深度学习模型都是处理3channel的数据(RGB),因此有些人就将optical flow加一个channel,加的channel可能是optical flow的大小,也可能都是零,但无论加什么,这两个都是冗余信息。

直接从static image中学习optical flow是一个highly under-contrianed problem,不好学习,在本文中,作者将optical flow分解成方向信息和大小信息,但是直接用角度θ表示方向不是很合适,因为在坐标系系统中角度是循环的,加上2π减去2π还是表示同一个方向,因此作者认为选取这种表示方式不是很合适(我感觉可能对于模型的表现不会产生什么影响吧?),作者采取的是用正弦和余弦两个三角函数来表示方向,然后再加上optical flow的大小M,就构成了3 channel的对optical flow的表示。具体用以下的公式表示

每一个F表示一个channel的信息。

用X表示静态image的domain,Y是包含了对应的flow images(刚提到的optical flow)的,目标是学习一个映射 ,可以从image中推断出flow。在训练的时候,给定的数据是“labeled pair” ,xi是video的frame,yi是用每一帧xi周边的几帧计算出来的true flow maps,生成optical flow的算法用的是别人做好的,同时为了对抗数据中的噪声,video中每一个image的optical flow都是通过对此image之后的5个image的optical flow取平均获得的。

刚刚提到的映射G是通过一个称为Im2Flow的卷积网络实现的,这个Im2Flow是一个encoder-decoder,将static image作为输入,输出的是预测出来的flow image,本文的这个网络是根据 Image-to-image translation with conditional adversarial networks中的U-Net改进设计的,具体结构可由下图示意

encoder和decoder都使用Batch normalization: Accelerating deep network training by reducing internal covariate shift中的convolution-batchnorm-relu模块,encoder中使用了dilated convolution,decoder是一个up-convolutional network,用来生成flow image,在encoder和decoder之间还加入了skip connection,可以直接将低层次的信息shuffle到高层次的网络(supplementary material中有更加详细的结构介绍)。

Im2Flow最小化的loss是两个loss的和,一个是pixel error,另一个是motion content loss,也即

pixel loss是衡量预测出来的flow和ground truth的flow之间的差别,

也就是预测结果每个像素值和ground truth的每个像素值差值的平方求和。

motion content loss的设计动机是要让预测出来的prediction不仅能够精确的预测每一个低层次的像素值,还要能够保证高层次的信息,也就是经过同样的神经网络进行特征的提取,在高层次提取出来的特征也要准确,这个loss很直接,因为需要从image中获得高层次信息,就要让模型生成的高层次信息准确,这可能会对某些像素值在低层次的预测进行干扰,不是那么一致,但是保证了整体的利益和高层次信息的准确性。

在motion content loss中抓取特征使用的是一个18层的ResNet(事先在ImageNet上训练过了),在本文中的数据集是UCF-101,使用flow image作为输入,经过encoder-decoder的处理得到flow map,得到的flow map再通过loss network(也就是前面说过的,用的是resnet)提取出高层次的运动信息,然后用flow map和高层次的运动信息分别生成loss,相加得到总的需要最小化的loss,假设是loss network中第j层的激活值,那么这一层的motion content loss就用下式表示

(个人觉得这个式子写的有问题,E的下标中的pq都没用上,后面应该用pq而不应该是xi和yi)

D,H,W分别表示feature的三个维度的尺寸,在反向传播的时候,模型会使用flow map的每一个pixel的数值strength值对这个像素值对应产生的梯度加权,意思是strength越大的,也就是动态变化越大的,也就是在动作识别中起作用越大的,要加大权重,相反,那些strength很小的,几乎不动的pixel,就不应该起到太大的作用。

以上介绍的方法是作者尝试后得到的最好的模型,作者还尝试过cGAN的方式生成optical flow,生成的optical flow视觉效果和ground truth一样,但是所包含的运动信息并不靠谱,不准确,作者认为这是因为cGAN考虑的是真假输出的区别,更适合用于视觉效果要求高的任务中。

得到预测的optical flow map之后,模型采取的动作预测模型是two-stream CNN,一个stream输入原始的image,一个输入生成的flow image,two-stream CNN的设计动机是模仿人类视觉皮层识别物体和动作的工作方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值