视频目标检测的特点
视频目标检测,相对于图片目标检测,最大的特点就是增加了上下文的信息,视频的每一帧图片有上下文的连接对应关系和相似性。由于有上下文的关系,所以可以利用前后帧的检测结果,提升当前帧的检测精度;由于前后帧具有相似连续性,所以可以利用冗余信息加快每一帧的检测速度。
目前大部分的论文都把视频帧分成关键帧和非关键帧两部分,关键帧的选取有两种方法:一种是间隔固定的帧数选取,另一种是自适应的方法选取。关键帧上的目标检测与图片目标检测一样,采用主流的检测算法,比如Faster R-CNN,SSD和YOLO等系列方法,有些方法也会利用前后帧的结果对关键帧的检测结果进行优化;在非关键帧上通常借助关键帧的检测结果和非关键帧与关键帧之间的信息差别,计算出非关键帧上的检测结果。
最近两年深度学习在视频目标检测的方法主要有这几种:光流法、跟踪、LSTM等。
1. Deep Feature Flow for Video Recognition. CVPR 2017.
这张图以分割为例,如果做检测的话把第一行的图片换成检测结果就好。这篇文章的思路比较简单,算是视频目标检测最早引入光流法的论文之一。
在图a中是用神经网络对每一帧进行图像目标检测计算,神经网络包括提取特征和识别结果两个部分,在文章中这两部分的网络分别叫做Feature Network( N f e a t N_{feat} Nfeat)和Task Network( N t a s k N_{task} Ntask)。熟悉卷积神经网络的都知道,大部分的计算量其实是在提取特征上面。所以在图b中,对关键帧仍然采取提取特征和识别结果的计算方法,但是在对非关键帧做检测计算时,把网络部分 N f e a t N_{feat} Nfeat去掉了,换成了光流网络 F F F计算上一个关键帧和当前非关键帧之间的光流和缩放信息,然后利用这些信息对关键帧的卷积特征进行空间传播propagation(采用双线性插值的方法和缩放),最后送入 N t a s k N_{task} Ntask网络里,识别出检测结果。
作者的Feature Network采用ResNet-50或ResNet-101,识别结果网络是R-FCN,光流网络采用FlowNet Simple版本。事实上,这篇论文以及后续几篇基于光流的改进论文均采用相同的网络结构。
由于光流网络FlowNet的计算远比Feature Network更快,所以在非关键帧的检测上能大大提高速度。速度的提升因子为 s = l 1 + ( l − 1 ) ∗ r s=\frac{l}{1+(l-1)*r} s=1+(l−1)∗rl,其中 r ≈ O ( F ) O ( N f e a t ) r\approx\frac{O(F)}{O(N_{feat})} r≈O(Nfeat)O(F), l l l是关键帧间隔的帧数,假设 N f e a t N_{feat} Nfeat所用的时间远大于 N t a s k N_{task} Ntask的时间。
由于对比的算法SFF有部分是在CPU上计算,我们只和每一帧做检测的Frame方法对比。在数据集ImageNet VID上,检测精度mAP略微下降0.8,但是速度提升了5倍左右(关键帧间隔帧数 l = 10 l=10 l=10)。运行时间是在NVIDIA K40的GPU上衡量。
2. Flow-Guided Feature Aggregation for Video Object Detection. ICCV 2017.
这篇文章主要专注于视频目标检测精度的提高,对速度没有做任何的优化,没有关键帧和非关键帧的概念。它所采用的是所有帧进行图像目标检测加上相邻帧优化的方法,所以速度上比每一帧做图像目标检测更慢,而且不是在线的视频目标检测,因为要借助当前时刻后面K帧的检测结果。
本文的算法首先对视频的K+1帧做图像目标检测的特征提取
f
k
f_{k}
fk,然后对当前帧
i
i
i的前后K帧(不足K的截断到有效范围)的特征在光流信息的引导下进行warp运算(flow-guided warp),映射到当前帧
f
j
→
i
f_{j\rightarrow i}
fj→i,方法与DFF一样,只是DFF只传播上一个关键帧的特征,而FGFA传播的是前后K帧。接着计算每一个传播的特征
f
j
→
i
f_{j\rightarrow i}
fj→i和当前
i
i
i帧自己提取的特征
f
i
f_{i}
fi之间的余弦相似度,计算之前先把
f
j
→
i
f_{j\rightarrow i}
fj→i和
f
i
f_{i}
fi通过一个小的卷积网络进行降维,再把这2K+1个余弦相似度进行softmax,得到每个传播特征的权重参数weight。最后根据这些权值加权平均传播特征
f
j
→
i
f_{j\rightarrow i}
fj→i,得到聚合后的网络特征
f
i
‾
\overline{f_{i}}
fi,通过检测子网络,获得最终的检测结果。
作者在Nvidia K40的GPU上实验,与每一帧做图像检测的方法对比,性能结果如下:
在不考虑其他附件改进方法的条件下,当
K
=
10
K=10
K=10时,精度从73.4提升至76.3,但是运行时间从288ms上升到733ms,这是一个典型的牺牲运行时间提升检测精度的算法。
3. Impression Network for Video Object Detection. CVPR 2018.
这篇论文在DFF的基础上加以改进,引入了印象网络的概念,对之前关键帧提取的特征与当前关键帧的信息加权融合,充分利用了先前视频关键帧的信息。
在关键帧上,首先将上一个关键帧的印象特征 f i m p f^{imp} fimp和当前关键帧提取的特征 f f f通过一个小的FCN得到weight map,再用softmax归一化,其中,weight map是宽高size和特征 f f f一样大的单channel图;然后用weight map对两个特征图进行position-wise加权,得到新的特征图 f t a s k f^{task} ftask,作为task network的输入。对特征 f f f和特征 f t a s k f^{task} ftask做加权和,更新当前关键帧的印象特征 f i m p f^{imp} fimp。
在非关键帧上,计算方法和DFF一样,只是用加权后的新特征
f
t
a
s
k
f^{task}
ftask作为输入。
印象机制的引入有助于缓解关键帧出现模糊等图片质量差导致提取特征不优的情况出现,提升新关键帧task network的输入特征质量,提高检测精度。
本文的Feature Network、目标检测网络和光流网络的选取方法与DFF一致。在GTX 1060上实验,作者与FGFA论文结果作对比:
Impression Network的精度是75.5,小于FGFA方法,和FGFA-fast的方法相当,但是运行时间大概是50ms(20fps),这个速度远高于FGFA的方法,几乎达到了实时的程度。
4. Towards High Performance Video Object Detection. CVPR 2018.
这篇文章可以看做是DFF的继承和改进,主要改进点是加入了自适应调整关键帧的方法,与DFF采用固定的关键帧不同。自适应调整关键帧避免选取到图像质量较差或者与上一个关键帧偏差过大的图片作为关键帧。
与DFF相似,在每一帧要先计算与上一个关键帧的光流网络,这个网络产生两个结果,一个是两帧图像中间的流动信息
M
i
→
k
M_{i\rightarrow k}
Mi→k,另一个是判断矩阵
Q
k
→
i
Q_{k\rightarrow i}
Qk→i,根据判别矩阵表征的是这两帧图像是否发生较大的光流运动。如果整体偏差过大,将把这一帧作为关键帧,采用图像目标检测的方法提取特征和检测结果;如果整体偏差小于阈值,说明作为非关键帧,将使用类似DFF的方法计算非关键帧的特征图
F
^
\hat{F}
F^和检测结果,不同的地方在于特征图是部分更新,根据判别矩阵中每个位置的值决定(如果值很小,该位置直接采用关键帧传播的特征信息;如果值大于阈值,该位置的特征由上一层网络特征图根据最近邻插值生成)。
文章还提出了另一种更新方法,叫做稀疏递归传播。将上一个关键帧的特征信息通过光流计算得到新的非关键帧特征图
F
‾
\overline{F}
F,将
F
‾
\overline{F}
F和
F
^
\hat{F}
F^加权得到新的特征图,权值计算方法和FGFA一样。最后再送入任务网络部分,得到检测结果。这种方法精度更高,但是速度有所下降。
和DFF一样,本文也是采用ResNet-101作为Feature Network,在ImageNet上预训练,目标检测网络也是用R-FCN。光流网络采用FlowNet Simple Version,在Flying Chairs上预训练。实验结果如下图所示:
在实验中设置两种不同的判别矩阵阈值,GPU分别为TitanX和K40,检测速度分别达到了13.0/8.6和22.9/15.2的帧率。在K40上与DFF做对比可以看出,速度更慢了,但是精度提高了,甚至超过了FGFA的方法(不与其他附加方法结合)。
5. Fully Motion-Aware Network for Video Object Detection. ECCV 2018.
这篇论文最大的特点在于加入了对proposal移动的预测(也是基于光流网络),并且提取该proposal特征,称为Instance-level calibration,并且和光流传播生成的特征(pixel-level calibration)互相结合。
通过光流网络传播的特征方法与FGFA方法相似,当前帧的特征由前后k帧的特征经过光流传播后统统得到。唯一不同的是FGFA是采用余弦相似度加权,该论文直接采用平均的方法,因为作者从实验中得出两种方法的性能差不多,但是平均法的计算量少很多。
另一种方式是对proposal进行移动,通过当前帧得到proposal对光流网络输出进行RoI pooling,然后再通过一个回归网络R估计proposal的移动,就可以计算出该proposal在前后K帧中的proposal位置和大小,将这些帧的proposal特征取平均得到新的特征。
最后还会根据proposal变形的比例和遮挡的多少对这两种特征进行归一化结合(具体公式参见论文3.4部分)。
整体上还是基于光流网络对特征进行传播,主要创新点在于加上了大尺度proposal的传播。论文在ImageNet VID上的实验结果为:
K取12的时候,性能已经饱和,mAP为78.09,运行时间大概为5fps,不过是在NVIDIA Titan X Pascal的GPU上测试的。速度慢,主要目的还是提升精度,相比于DFF的72.8和FGFA的76.5,检测精度高出不少。
6. Video Object Detection with an Aligned Spatial-Temporal Memory. ECCV 2018.
这篇论文也是根据前后帧的特征进行综合变换,不过脱离了光流法。作者提出了一种类似GRU结构的模块,叫做STMM (Spatial-temporal memory module)。下图就是STMM的计算公式。
∗
*
∗是卷积运算,
⊙
\odot
⊙是点乘运算,
z
t
z_{t}
zt和
r
t
r_{t}
rt可以看做是门,控制记忆
M
t
M_{t}
Mt和特征
F
F
F之间的计算。STMM可以认为是一种历史特征的变换和传播,并且与当前帧特征的融合,这一点与印象网络和FGFA的基本思想很接近,就是要充分利用历史提取的特征,并且计算与当前帧特征的关系,加以综合利用,提高模糊不清晰等质量较差的图像帧的检测效果。
文章中还对记忆特征进行改造,为了避免物体移动较快或者离开图片区域时而导致的记忆特征更新过慢的现象,作者还提升了MatchTrans的记忆更新方法。主要思想是计算当前帧每一个位置的特征与上一帧该位置周围的特征之间的相似度,得到变换相关系数小矩阵,矩阵的大小取决于选取四周范围的长度。再用该矩阵去插值
M
t
−
1
M_{t-1}
Mt−1,得到
M
t
−
1
′
M^{'}_{t-1}
Mt−1′,并用
M
t
−
1
′
M^{'}_{t-1}
Mt−1′去替换STMM模块中的
M
t
−
1
M_{t-1}
Mt−1。
作者基于两种base detector分别在Titan X GPU上实验,在ImageNet VID数据上进行训练和测试。当图片帧的输入batch size为11时,运行时间为1.378s,大概是8fps。
7. Object Detection in Video with Spatiotemporal Sampling Networks. ECCV 2018.
这篇论文引进了Deformable Convolution的方法重新调整相邻帧的特征信息。
首先也是对每一帧的图片进行特征信息提取。然后对当前帧(参考帧)的相邻帧(支持帧)的特征再channel维度上拼接,对拼接后的特征预测两帧之间的location偏差,再把偏差的拼接特征作为Deformable Convolution的输入,生成新的特征信息,再把新的特征信息用来再次预测location偏差以及新的特征信息,如此循环四次,最后得到相邻帧的采样特征信息。
从Deformable Convolution得到的前后相邻帧(共2K+1个)的采样特征图后,根据FGFA里面的余弦相似度的方法计算权重值,对这2K+1个采样特征图加权平均后得到当前帧最终的特征图,并作为目标检测网络
T
a
s
k
Task
Task部分的输入,生成检测结果。
作者在Tesla K40 GPU上训练和测试,训练时
K
=
1
K=1
K=1,而且是从前后帧附近各随机抽取一帧,测试时
K
=
13
K=13
K=13。实验结果在几种条件下与D&T和FGFA作对比,如下图所示。另外,作者没有给出测试的运行时间,不过可以想象,这个方法要融合前后那么多帧的信息,速度也不会快。
上面几篇论文都是基于特征传播的方法,学术界里还有一些论文是基于box的传播,类似跟踪的方法,将关键帧上预测的框在非关键帧上传播,用于检测非关键帧上的目标,而不再生成非关键帧的特征。目前基于box传播而且性能较好的主要有D&T和Scale-Time Lattice这两种代表性方法。
8. Detect to Tracks and Tracks to Detect. ICCV 2017.
这篇论文采用的也是离线的方法,也是先用目标检测算法提取每一帧的特征信息。主要创新点在于加入了correlation的网络,用R-FCN中conv3、conv4和conv5的网络特征去计算两帧之间的correlation特征。将两帧提取的特征分别应用RoI-pooling后得到的部分特征图,以及加上correlation特征,通过一个回归网络生成两帧之间的RoI移动(track)。
在测试的时候,综合两帧图片各自的分类得分(由各自检测网络得到)和track计算出来的box与detect得到的box之间的IoU,依次找出一段视频中每个框的跟踪过程,同时也会去除得分低的检测框。这就是这篇文章的大致思想,与其他文章只输出检测结果不同,这篇论文在每一个检测的基础上又把一段视频的检测框串联起来,获得每个检测框的移动变化过程(跟踪),同时又利用跟踪优化每一帧的检测结果。
作者在Titan X的GPU上实验,ImageNet VID验证集的精度达到79.8(backbone是ResNet-101),运行时间为每帧127ms。
9. Optimizing Video Object Detection via a Scale-Time Lattice. CVPR 2018.
这一篇论文在非关键帧上没有计算图片的特征信息,甚至没有计算传播到该帧的特征信息,只是通过MHI和小型网络对关键帧的box进行传播和refine。
本文也是一种离线的方法,需要用到下一个关键帧的检测结果。
本文的方法利用递归的思想,从两端的关键帧开始,先检测两个关键帧最中间的非关键帧,分成两段,再检测这两段中间的非关键帧,进而分成四段,递归检测下去,直至遍历检测完所有的非关键帧。
以图中第一行为例,分别计算关键帧到中间帧的MHI(运动历史图),并把关键帧、中间帧灰度图和MHI作为一个小型网络的输入,并结合RoIAlign,预测每个box的移动,获得中间帧的初步检测结果。因为是分别由两边向中间计算,所以会得到两个初步检测结果,需要对这些box进行union。接着把union后的box连同该帧图片作为输入再通过一个小的网络生成refine后的box,更接近ground truth。从上层到下层依次做这样的处理,直至遍历所有帧,每一层从上到下的scale也会越来越大(像素越来越高)。
作者还对关键帧的选取在平均分布的基础上做了自适应调整,如果检测物体过小或者运动过快,就把那一个关键帧片段的长度减半(在中间加一个关键帧)。
论文中的检测网络是基于ResNet-101的Faster R-CNN,在拉长关键帧间隔时,精度下降较慢。当速度为20fps时,检测精度mAP为79.6,当速度为62fps时,检测精度mAP为79.0,与之相比的是D&T方法的速度为5fps时,检测精度mAP为79.8。
10. Fast Object Detection in Compressed Video. ICCV 2019.
这篇文章与上面所有论文的区别在于,创新性地利用了压缩视频中的motion vector和residual error来做非关键帧上的特征传播和物体检测。其中,motion vector是前后两帧的相似块之间的移动,residual error表示的是相似块不能完全匹配情况下的剩余差别。
在编码格式为H.264的视频流中,分成 I I I帧和 P P P帧两种类别,其中 I I I帧就是参考的关键帧, P P P帧就是通过motion vector和residual error计算出来的非关键帧,通常在一个视频流中,一个 I I I帧后面会跟好几个 P P P帧。
在
I
I
I帧上,还是采用图像级别的物体检测方法,本文采用FPN网络对关键帧进行特征提取(
N
f
e
a
t
N_{feat}
Nfeat)和目标检测(
N
r
f
c
n
N_{rfcn}
Nrfcn)。在
P
P
P帧上,作者提出了memory network(
N
m
e
m
N_{mem}
Nmem)的方法处理和生成非关键帧上的特征。
N
m
e
m
N_{mem}
Nmem主要分成两部分:一个是Pyramidal Feature Attention,即金字塔特征注意机制,另一个是Motion-aided Memory Network,即运动补偿记忆网络。
金字塔特征注意机制只作用在
I
I
I帧的下一个
P
P
P帧上。作者把FPN的
l
=
3
,
4
,
5
l=3, 4, 5
l=3,4,5stage上的特征
f
t
l
f_{t}^{l}
ftl都通过一个卷积层resize到了
l
=
5
l=5
l=5的维度大小上,得到
f
t
l
^
\hat{f_{t}^{l}}
ftl^,接着把每个位置
(
x
,
y
)
(x, y)
(x,y)上的特征按照channel维度相加,得到三个单通道的特征图
e
t
l
e_{t}^{l}
etl。然后把这个三个特征图按照channel维度进行softmax操作,生成三个单通道的权重图
α
t
l
\alpha_{t}^{l}
αtl。最后把三个单通道的权重图分别乘于各自的特征图
f
t
l
^
\hat{f_{t}^{l}}
ftl^,得到attention的特征
f
t
a
t
t
e
n
f_{t}^{atten}
ftatten。
运动补偿记忆网络是一个LSTM网络,与标准LSTM的区别在于,利用motion vector对上一帧的输出特征
c
t
+
k
−
1
c_{t+k-1}
ct+k−1和、
h
t
+
k
−
1
h_{t+k-1}
ht+k−1进行双线性warp操作
c
t
+
k
−
1
→
t
+
k
c_{t+k-1\rightarrow t+k}
ct+k−1→t+k、
h
t
+
k
−
1
→
t
+
k
h_{t+k-1\rightarrow t+k}
ht+k−1→t+k,如果上一帧是
I
I
I帧,则两个皆用
I
I
I帧的提取特征代替。另外还以residual error作为输入进行特征信息的补充。LSTM网络的操作如下:
作者在ImageNet VID数据集上做实验,使用NVIDIA Titan X Pascal的GPU,并与先前的一些方法作对比,实验结果如下。可以看出MMNet在速度上占有一定的优势,如果用seq-NMS的方法进行后处理,还能进一步提高检测精度。
小结
对最近两年的视频目标检测算法进行分析,可以看出,主流算法还是基于光流法的特征传播(1,2,3,4,5),而且基本上是做离线式的目标检测(2,5,6,7,8,9,10),利用前后帧的检测特征或检测结果去优化当前帧的检测效果,提高检测精度。除了早期的DFF(1)和印象网络(3)外,在线的视频检测算法已经很少见。
目前看来,除了(9,10)以外,在精度上的提升都是以消耗大量计算为代价,而且精度的提升愈渐吃力,都在堆叠技巧去改善特征传播,没有重大的创新。而加速的问题则受限于关键帧的图像目标检测算法,整体上提高的速度也有限。所以需要从三个方面去改善视频目标检测算法:1. 除了特征传播或者box传播,是否还有其他方法利用上下帧等信息去做非关键帧的目标检测?2. 利用视频编解码能否进一步提高速度或者精度?3. 是否能设计一个快速的静态目标检测算法,针对某类特定的对象或者某些特定的场景?
论文 | 精度 | 运行时间 | 基本方法 | 传播 | 时序处理 |
---|---|---|---|---|---|
DFF[1] | 73.1 | 49.4ms(K40) | 光流 | 特征 | 在线 |
FGFA[2] | 76.3 | 733ms(K40) | 光流 | 特征 | 离线 |
Impression[3] | 75.5 | 50ms(GTX) | 光流 | 特征 | 在线 |
THP[4] | 78.6 | 116ms(K40) | 光流 | 特征 | 在线 |
MANet[5] | 78.1 | 201ms(Titan) | 光流 | 特征 | 离线 |
STMN[6] | 80.5 | 125ms(Titan) | STMM | 特征 | 离线 |
SSN[7] | 78.9 | / | Def. Conv | 特征 | 离线 |
D&T[8] | 79.8 | 127ms(Titan) | 跟踪 | 特征/box | 离线 |
STL[9] | 79.0 | 16.1ms(Titan) | MHI | box | 离线 |
MMNet[9] | 79.2 | 125ms(Titan) | Motion aided | 特征 | 离线 |
[1] Deep Feature Flow for Video Recognition. CVPR 2017.
[2] Flow-Guided Feature Aggregation for Video Object Detection. ICCV 2017.
[3] Impression Network for Video Object Detection. CVPR 2018.
[4] Towards High Performance Video Object Detection. CVPR 2018.
[5] Fully Motion-Aware Network for Video Object Detection. ECCV 2018.
[6] Video Object Detection with an Aligned Spatial-Temporal Memory. ECCV 2018.
[7] Object Detection in Video with Spatiotemporal Sampling Networks. ECCV 2018.
[8] Detect to Tracks and Tracks to Detect. ICCV 2017.
[9] Optimizing Video Object Detection via a Scale-Time Lattice. CVPR 2018.
[10] Fast Object Detection in Compressed Video. ICCV 2019.