读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)

http://openaccess.thecvf.com/content_cvpr_2018/papers/Zhao_Recognize_Actions_by_CVPR_2018_paper.pdf

摘要首先介绍背景:尽管近些年动作识别领域的进展很大,但是其效率还是很有限的,将appearance和motion分别对待的方法常常会有需要大量计算资源计算optical flow的问题;依赖于在原始video上进行3D卷积的方法表现又常常不是很好。本文提出了一种representation learning的模型可以直接从原始的video中提取出运动信息的三个组成部分(不依赖于opticalflow),分别是static appearance的representation、apparent motion和appearance change。

一个简单的模型示意图如下

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第1张图片

本文将video视作short-term的dynamics和long-term的时序结构(temporal structure),本文将注意力集中在short-term的dynamics上,使用TSN来进行long-term temporal structure的模拟。上图展示的就是short-term representation,包括static appearance、apparent motion和appearance changes三个部分,给定一段video,模型会先通过几层卷积网络计算常规的low-level features,之后通过三个分支提取三个组成部分,具体来讲分别是用3D pooling抓取static appearance,用cost volume processing抓取apparent motion,最后的用warped feature difference表示appearance changes。这些不同的模块通过unified network整合到一起,生成最终的prediction。

本文的这个模型主要是抓取短程的short-term dynamics,然后和其他high level model结合起来抓取long-term temporal structure(例如用TSN和LSTM)。

下图是一个更加详细一些的模型示意图

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第2张图片

模型的输入是短的video clip,因为模型处理的是short-term dynamics,输入的video clip先通过卷积层转化为64 channel的feature map(好像一开始都喜欢转化为64channel的,lindahua的那篇sgtcn也是如此),然后,三个分支都用这个feature map进行进一步的高层次特征的提取,接下来具体介绍这第三个分支都是如何提取相应的高层次信息的。

第一个分支是static appearance branch,这个分支是想要从观察到的场景中得到static appearance的representation,在主流的模型中,appearance feature一般都是一帧一帧计算的,这样容易受到异常值的干扰,比如哪里模糊了,哪一帧摄像机突然动了之类的影响。因此,本文的思想是要在neighborhood中选择响应最高的,而不是每一帧都保留。基于这种思想,此分支的设计如下图

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第3张图片

首先进行2D卷积,用来抓取visual pattern,接着进行spatial的2D pooling,接着是1D的temporal pooling(temporal pooling就是为了使feature更加稳定而设计的),这个模式不断地重复,不断地提取特征,2D pooling和3D pooling相结合的模式其实相当于3D pooling,可以在spatial temporal维度上都将activation进行池化,在不断地迭代中,每一帧的分斌率都在下降,但是channel数量却在上升,最终每一个像素点的channel数都会由64变成1024,这也就得到了最终的static appearance component。

作者将这个模块与已有的3D卷积模型进行了对比,提出本文这个static appearance branch更加的合适,首先是因为这个branch是为了抓取一些static的appearance feature,而不是抓取dynamic信息,因此这种设计的表达能力已经够了,并且对资源的花费更小;第二点说的其实还是节约资源好训练, 3D卷积网络由于参数数量远多于本文的这个模型,因此需要更多地样本,迭代更多次来进行训练,而本文的这个3D pooling是不需要参数的,而2D的卷积层可以使用一些已经训练好的CNN模型(应该是用已有的模型初始化,否则就没有需要训练的部分了)。

第二个branch是apparent motion branch,这个branch意在捕捉空间位置上feature point的移动。以往的工作通常是用optical flow来表示这个motion信息,但是optical flow太耗费资源,并且常常需要额外的模块(extra module,不是很懂这个额外的需求是什么)。在本文的设计中,作者探索了另一条路来表示这个很重要的motion data,是直接通过cost volume来进行motion representation,cost volume是一个在low-level的视觉任务中常用的东西,例如在optical flow estimation中起到一个中间步骤的作用。据作者所知,本文是第一个直接用cost volume进行motion representation,进而进行action recognition的工作。

cost volume是在连续的frame的feature map之间两两进行计算的,例如两个feature map,建立的cost volume 是通过将每一个点在一定大小的窗口中和其neighborhood进行对比得到的,窗口的大小是,也就是每一个点都对应一个这么大的窗口,这个窗口内每一个数值都是这个点的neighborhood和这个点对比计算出来的similarity,在本文中,具体采用的是cosine similarity,表示的就是之间的cosine similarity,这里的指的是第t帧feature map中第i第j列的feature vector。另一个工作FlowNet中也进行过类似的操作,但是在那篇文章中用的不是cosine similarity,而是直接feature vector点乘,此外,FlowNet中生成的correlation map是和appearance feature一起送入下一层的,而本文的工作中,cost volume是只关注motion information。

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第4张图片

得到cost volume还不是最终要的结果,还要进一步得到一个低维的representation,更简洁的表示motion data,毕竟原来的feature map是3维的,现在突然变成4维的,可能也不好一起处理。降维的方式是建立一个displacement map

用来表示从第t帧到t+1帧之间的motion,为了简化表示,t和t+1都不写了。在这个map上,每一个点都是一个长度为2的vector ,表示这个位置在x和y一个水平一个竖直方向上的移动。具体来讲,计算公式如下:

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第5张图片

也就是为前述的cost volume中的每一个位置的window中的每一个位置在两个方向上进行加权求和,分别得到两个方向上的结果。而这个加权的系数由下式计算:

读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018)_第6张图片

这里面,也就是计算x方向上某一个的权重时,就把第i行所有列的数值计算softmax值,这里面τ是temperature coefficient,这个值越小,计算出来的概率分布就越集中在概率值大的位置,t趋于0时,就接近于winner-take-all的形式,只保留概率最高的。实际试验中这两个可以通过两个方向上的softmax函数计算获得,而最终的displacement map可以通过2D的卷积获得。得到map之后,就可以继续采用卷积网络来进行高层次特征的提取了,最终还是得到1024channel的feature map,表示apparent motion

第三个branch是appearance change branch,这个branch是考虑到不同frame之间的变化不只有motion造成的,有的时候还可能有光照变化之类的变化产生,这种外观的变化称为appearance change,以往的方法可能就是将相邻帧之间做差来获取这个变化,但是那样就会把motion变化和appearance变化混杂在一起,与本文想将其分解开来的愿望相悖。因此本文采取的措施是先用前面所说的displacement map将第t帧进行一下warp,得到,其实也就是生成一下没有appearance change,只有motion displacement的下一帧feature map,再用这个只有motion change的feature map和两种变化都有的t+1帧相减,得到的就是appearance change,称之为warped differences,在warp的过程中,如果哪个点需要用到上一帧feature范围外的点进行计算,就置零。

本来作者在具体介绍三部分结构之后要介绍这三个部分得到的结果如何聚合,但是并没有说,不过前面倒是说过这三个分支得到的结果是通过取平均的的方式聚合在一起的。

你可能感兴趣的:(读书笔记30:Recognize Actions by Disentangling Components of Dynamics(CVPR2018))