论文下载地址:http://fanyix.cs.ucdavis.edu/project/stmn/project.html
官方源码地址:https://github.com/fanyix/STMN
Abstract
简单的总结一下,本文针对视频目标检测问题提出时空记忆网络(STMN)
主要贡献如下:
1.STMM(时空记忆模块):用于提取视频中时序信息的RNN模型的核心模块
2.Match Trans:为了建模目标运动提出匹配变换去对齐帧到帧的特征
Introduction
1.首先作者介绍一下视频目标检测中存在的难点以及对应的解决思路:
1)视频目标检测的难点:视频的运动模糊、遮挡和极端视角等情况会使得静态图像检测器出问题
2)解决难点的对应思路:视频提供了丰富的时空和运动信息,应当学习去利用这些信息,使得视频目标检测器更加鲁棒
从图1可以看出,静态的目标检测算法在对视频进行检测时由于视频中的运动模糊、遮挡等问题会出现不同程度的误检漏检等问题,而本文提出的STMN模型与静态检测模型相比,可以更好的进行视频目标检测任务。
2.接下来作者介绍了一些研究者们的成果;
很多研究者开始研究视频目标检测问题,比较有名的微软的DFF和FGFA,商汤的T-CNN,2016年代的SEQ-NMS,牛津VGG组的D&T,其实视频目标检测的研究最早约在2015年左右,ImageNet用VID数据集进行比赛。
这些方法存在的问题:
1)使用临时的、后处理的方式利用时间信息。所以这种方法不能避免单帧检测器所存在的问题
2)使用视频分割来优化检测结果
虽然这些方法相比于静态检测器有提升,使用后处理的方式利用时间信息是次优的,因为在检测器训练中忽略了时间和运动信息。因此这类方法很难克服静态检测器的连续故障。
3.接下来 作者又介绍了一些近期的成果:
D&T,FGFA,THPVOD等在模型的训练中,通过预测帧间的平移,将帧与帧之间的特征聚合起来。然而这些方法处理的是固定长度窗口的图像,不能建模较长的依耐性,Tubelet Proposal Network开始考虑建模长时间的信息,但是速度较慢,对tubelet的初始化依赖严重。
4.为了解决上面的问题,作者开始介绍本文的贡献:
作者提出了一个 Spatial-temporal memory Network(STMN),用一个网络统一建模目标的长时间的外观和运动。
它的核心为Spatial-Temporal Memory Module(STMM):一种卷积递归计算单元(可以完全集成静态检测器的预训练模型参数)
这种设计可以解决当前视频目标检测领域中一个很重要的难题:视频数据集缺乏类别内对象的多样性(因为视频帧是高度冗余的)。
考虑到图像数据的二维特性,STMN中保留了每帧图像的二维空间信息。为了实现帧间的像素级对齐,本文提出了MatchTrans模块显式建模帧间的平移。由于将每帧图像做了对齐聚合,这样的得到的特征对于区域的定位是有好处的,而且包含多帧信息也有助于识别。同时,每个区域的特征可以用ROI pooling从记忆模块中提取。
基于以上的工作,本文在VID数据集中用不同的backbone和检测器均获得了state-of-the-art的效果
Related work
吧啦吧啦吧啦吧啦...................
Approach
整理一下思绪,下面开始进入本文的精华部分!!
1.首先展示一下作者提出的这个新颖的RNN架构---STMN:对视频目标检测中的目标随时间变化的外观和运动进行建模
假设视频序列的长度为T,每一帧图像首先各自提取其卷积特征得到F1,F2,⋯,FT作为表观特征,为了沿时间轴集成这些特征,每一帧的表观特征都被送入STMM。STMM在时间t得到当前帧的表观特征Ft以及在时间步t-1得到的带有之前所有帧信息的时空记忆,然后更新得到当前时间步的时空记忆单元。为了同时捕获过去帧和之后帧的信息,我们使用了两个STMM,进行双向特征聚合,同时聚合和。将包含了时间信息的M送到卷积/全连接层进行分类和回归。这种做法的提升在于,如Fig2,图像检测器往往只看过自行车的俯视图,所以看到前视图的时候会识别不出来,但是本文的方法,因为模型已经看过了两边的侧视图,所以识别出前视图会容易一些。
2.下面介绍一下架构中最核心的STMM模块:
---------------------------------------这部分解释了STMM是如何跨帧建模对象的时间相关性-------------------------------------
---------------------------------------------------设计非常巧妙,大佬真强!!!(破音)-------------------------------------------------
STMM模块利用上面的四个公式来生成;首先明确一下公式中各个符号的意义:
1) 表示的元素相乘,*表示卷积操作
2) ,,,,,都是2D的卷积核(通过端到端的训练进行学习)
3)是更新门,表示中有多少需要丢掉,从而生成暂时的状态记忆;因为是门,范围在[0,1]
4) 是重置门,决定了之前的状态和暂时的状态;因为是门,范围在[0,1]
5) 是作者自己设计的一个用于将后面的数据归一化到[0,1]的操作
下面详细介绍一下作者设计的这个操作:
为了让数据合理的归一化到[0,1],作者对标准的batch normalization做了两个改变得到
1)第一个改变:
计算输入batch X的均值μ(X)μ(X)和标准差σ(X)σ(X),利用下图的线性挤压函数S(X;μ,σ)进行正则化
---------------------------------------------------------一些自己的深入理解,如有问题请指出 (begain)------------------------
这个线性压缩函数非常简单,也很好理解。但有一个疑惑就是作者为什么要将输入的x的有效定义域设定为[0,μ+Kσ]呢?深入思考了一下,认为它的数学意义如下:
首先看到μ+Kσ立刻就能想到正态分布的这个图,那么[0,μ+Kσ]就很好的覆盖了对于网络结构最有效的数据范围。
那么这个x是不是正态分布呢?(其实标准的batch normalization中已经告诉我们答案啦!!!)
证明很简单:拿起你的应用数理统计翻到中心极限定理那一章!
是不是瞬间就懂了,深度学习有一个前提就是假设输入的样本们要服从独立同分布,然后根据中心极限定理,这些x的整体当然服从正态分布啦!
下面再思考两个问题:
1)为什么要选[0,μ+Kσ],而不直接选取[0,255]这个完整的区间呢?
我理解的是选取数据集中分布的区域进行归一化会让整个函数对数据变化更敏感,这样网络效果更好
2)为什么不选取[μ-Kσ,μ+Kσ]呢?这样难道不是更加的敏感嘛?这个问题没明白,当然可能作者压根也没考虑这么多吧hhh
---------------------------------------------------------一些自己的深入理解,如有问题请指出 (end)--------------------------------------
思绪扯得有点远,现在回到论文继续看作者对标准BN做的第二个改变
2)第二个改变:
对每个batch单独计算均值和方差,而不是在训练过程中持续计算所有training batch的均值方差。用这种方式不用在不同时间步存储不同的统计量,这使得我们在测试的时候不用试训练长度而定。
3.时空记忆对齐
在有了核心的时空记忆模块STMM后是否就可以很好的将视频中的时序信息进行建模了呢?当然不是,有一个很重要的问题被我们忽略了:由于对象在视频中移动,因此它们的空间特征可能在帧之间错位。(如图4中的下半部分)由于目标的运动,如果特征不进行对齐的话,会造成融合的特征图长时间不能忘记之前目标的信息,造成虚影,而且和其他特征图重叠之后会降低特征图的质量。为了解决这个问题,作者提出了MatchTrans模块:
对于Ft中的(x,y)位置的特征元Ft(x,y),MatchTrans计算Ft(x,y)和Ft-1 (x,y)位置周围小范围的特征元之间的关系。转换系数计算如下:
使用系数Gamma,本文将非对齐的变化到对齐的,对齐公式如下:
相当于用2k+1领域内的与的相关系数,对的特征图的值进行加权重构。对齐后的才是最终的公式(4)中的值。对齐的示意图如Fig5
k的选择涉及到性能和速度的权衡,在本文实验中选择k=2。用光流进行对齐的问题在于计算比较慢,而且存储光流也占用了内存。对于FlowNet,它的速度是24.3ms,MatchTrans的速度是2.9ms,有数量级的优势。