Towards High Performance Video Object Detection论文笔记

这篇文章可以说是很牛逼的又快有准的文章,对比之前的这个团队的deep feature fow(快)和Flow-guided feature aggregation(准),这篇文章可以说是又快又准。但是可惜,这篇文章没有公开代码。不过前两个工作是公开代码的,在github上很容易能找到。
先说结果,2017年的ImageNet VID winner是这个团队的作品,是基于前两个工作:快的dff(deep feature fow)和准的fgfa(Flow-guided feature aggregation)(以下使用缩写)做的,dff好像是73.多的mAP。速度很快,fgfa好像是78.多的准确率,但是速度比普通的单帧识别慢了三倍。这篇论文里宣称达到了77.8%mAP每秒15.22帧的速度。2017年的VID冠军是76.8%mAP每秒15.4帧的速度。
这篇论文的核心思想是对结合前期dff和fgfa的工作,提出了三个技巧改进速度和精度,来达到良好的trade-off。鱼和熊掌不能兼得。而且为了证明这三个工作的效果,这篇文章采用了大量的ablation study,各个试验及结果图标细致入微让人一目了然,赏心悦目的同时深感信服,证明了三个创新点都起到了很好的效果。工作量很足。
下面介绍三个创新点,也是本文的核心思想。

创新点一:稀疏递归特征聚合(Sparsely Recursive Feature Aggregation)

Towards High Performance Video Object Detection论文笔记Towards High Performance Video Object Detection论文笔记
看上面左图,左图是dff的方法,每隔一个固定间隔l选取关键帧,关键帧用resnet提取特征,非关键帧用flow的方法得到特征,大大降低运算花销,加快了速度,但是肯定没那么准,本文的方法是关键帧提取完特征后,再用上一个关键帧的特征聚合当前帧特征,可以理解为校准和强化。如此一来,理论上每一个关键帧都用到了之前关键帧的信息,在略微牺牲速度的情况下提升了精度。

创新点二:空间自适应部分特征更新。(Spatially-adaptive Partial Feature Updating)

Towards High Performance Video Object Detection论文笔记Towards High Performance Video Object Detection论文笔记
还是看上面左图,这是fgfa的方法,可以看出,在上面的7帧中,第四帧的特征在经过resnet提取完后,再通过第1帧和第7帧聚合,再通过第2帧和第6帧聚合,再通过第3帧和第5帧聚合,精度肯定不差,速度太慢。
本文的方法是部分特征更新,看下面公式。
Towards High Performance Video Object Detection论文笔记
公式的意思,Uk-i是一个指标,如果引入的Qk-i小于某个值的话,Uk-i就等于1,否则就等于0,可以看出,等于1时,就是说flow的效果不好,得用ResNet,等于0时就是说效果可以,不用ResNet进行复杂计算了,这样一来,就简化了计算。

创新点三:时间自适应的关键帧选取(Temporally-adaptive Key Frame Scheduling)

Towards High Performance Video Object Detection论文笔记
通俗易懂!
红点是关键帧,蓝点是非关键帧,凡是达到0.2这横条线以上的都是关键帧。从图片来看,关键帧都是那些变化比较大的,选择还挺准确。非关键帧的变化小一些,这样比单调死板的固定间隔取关键帧好多了,达到了很好的效果,这与0.2这个参数,详细看论文里的介绍,大体我理解为像素重合程度,一旦整体的像素不重合地严重了,那就说明确实变化的厉害。

算法流程

Towards High Performance Video Object Detection论文笔记
Ii是第几帧,
第二行设置k=0为初试帧第0帧,
第三行对F0进行Nfeat操作其中Nfeat是用ResNet提取feature map。
第四行是对F0作检测工作,即确定类别及位置等等。初试帧不用采取聚合操作,如果要采取聚合操作的话那第0帧的聚合结果就是F0,
然后第8行开始对随后视频中的所有帧进行操作
第9行是得到当前帧i和上一个关键帧之间的flow结果。
第10行是如果Qk-i达到了某一个值,即确定i为关键帧,(Q的定义应该是根据变化程度设置的一个具体的值,比如0.2,看论文里)
第12行在确定关键帧后Qk-i为负无穷,然后备注的解释是需要从头开始计算特征,这里应该是指的需要重新设置关键帧,并且feature map应该用ResNet重新提取。
第13行14行指的是需要部分更新特征,就是用的论文里提到的第二个技巧,partially updating
第16行指的是,Qk-i时,Nflow的方法达到了很好的效果,就这样就行,不用改动。
17行代表对当前帧的处理结束了
18行Fi最后用第二个技巧,部分更新,所有的帧都要部分更新吗?
第19行看是否采用聚合操作,如果有聚合模块,那么就聚合,而且采用的是第一个技巧:递归连续聚合。然后在检测结果,就是最终结果
第22行,如果没有聚合模块就直接检测结果
第25行判断及更新关键帧
输出结果。

未来值得探讨的工作

作者还提到的一个很有探讨性的方面,就是关键帧的选取甚至可以达到80.9mAP每秒22.8帧的效果,这个是怎么达到的?当然是试出来的,就是作者探索怎么选关键帧比较好,比如一个帧,同时用两个方法resnet的方法和flow的方法提取特征,哪个好用哪个,前者好的话它就是关键帧,后者好它就是非关键帧,再加上之前的一些技巧,达到了惊人的绝佳表现,但是,怎么才能找到这些关键帧序列呢?有没有一种机制和方法自动获取呢,这是一个有待开发的点,而且毫无疑问有价值!