EBT:Proposal与Tracking不得不说的秘密

EBT:Proposal与Tracking不得不说的秘密

首发于:目标跟踪算法,感谢MM Wang邀请,开门见山。

我来给大家分享下面这篇不太火爆的论文:

  • Zhu G, Porikli F, Li H. Beyond local search: Tracking objects everywhere with instance-specific proposals [C]// CVPR, 2016.

作者只给了实验结果:GaoCode/EBT

VOT2016也只给了exe:votchallenge.net/vot201

直说吧,这是一篇没有源码的论文!我也一样失望,exe配置比较麻烦也没有跑过,原则上,没有源码的论文我内心是拒绝的,除非是大公司出品。。但这篇我就很有兴趣了,主要是因为EBT在VOT竞赛上的不凡表现。

在VOT2015是它第三名,在SRDCF之前,R(Robustness,健壮性)排第二:


在VOT2016它是第七名,Robustness这一指标依然很高排第三,Rrank竟然并列第一:

看到这里您是不是也对这个Accuracy略低但Robustness爆高的偏科算法有了一点兴趣呢?

为防止您以前没有看过这篇论文,以后也可能不会看(没有SOURCE CODE),这里总体介绍一下EBT:

大多数检测跟踪方法(tracking-by-detection),都假设前一帧跟踪位置准确、目标运动轨迹平滑,当前帧在预测目标位置周围进行局部窗搜索,采用计算能力允许的搜索半径以获得最大速度,半径足够小以减少误匹配,但这一假设在变形遮挡,目标快速和不规则运动,尤其是目标超出搜索半径时失效。

EBT跟踪算法,不局限于局部搜索窗,能够高效搜索整帧,通过特例的类物体度量(instance-specific objectness measure),生成少量“高质量”的提案(proposals),用以现有检测跟踪方法为核心的tracker对它们进行评估。
在跟踪过程中,关注由proposals提供的难误检样本更新目标模型,有助于抑制困难背景杂波引起的干扰,并学习如何根据目标模型重排proposals。
由于大幅减少了需要tracker评估的候选样本,EBT可以用更丰富的目标特征和更强的分类器。

估计您已经看出来了,请原谅我翻译了四句摘要。从摘要中我们得到两个关键信息:

  • 目的:整帧搜索代替局部搜索窗,这可能就是Robustness的源头
  • 方法:proposals减少候选样本,作者好像还做了重排是创新点


tracking-by-detection都采用局部搜索,原因是:1. 全局搜索样本数量会非常大,计算能力不允许;2. 图像中有多个类似目标的物体时,背景干扰严重导致飘逸,而局部搜索可以避免较远距离的背景干扰。相关滤波Corr. Filter的循环矩阵密集采样在搜索半径很大时非常慢,不适用于很大的负样本空间。总的来说,局部搜索有很多缺点,tracking-by-detection类方法,尤其是相关滤波,对快速运动目标很难处理,所以EBT采用proposals进行整帧搜索解决这个问题。

就是这样,如果您恰好了解object/detection/region proposal(类物体区域检测,我倾向于这个翻译,如果您有其他译法欢迎讨论),想必您已经明白是怎么回事了。如果您不是很了解,那么请听我细细道来,之后就很容易理解EBT到底干了什么。

/************************************************分割线*****************************************/

话分两头。以前文章我也提到过,tracking-by-detection类跟踪算法就是比较“弱”的检测算法,跟踪和检测算法都需要以多尺度滑窗(Multi-scale Sliding Window)的方式去检测目标。做过检测的都知道这种滑窗遍历有多慢,如640*480的图像,用已经训练好的猫检测器进行检测,最小窗大小64*128,尺度缩放比例1.1,滑窗步长8,那么需要对13473个候选样本提特征并判别是否有猫(以上数据来自博文),如果为了检测更加精细准确,需要同时减小缩放比例和滑窗步长,候选窗(样本)数量将剧增,检测速度必然会非常慢。在跟踪问题中也一样,如果我们扩大搜索区域,甚至整帧搜索,那需要检测和更新的候选样本数量就会非常非常恐怖,问题来了:那么有没有办法减少候选样本的数量,加速检测和更新呢

回到检测问题,要在下面这幅图中检测猫,您可能会和我有一样的看法:只需要多尺度滑窗检测右半边图像,而左半边完全可以忽略(红框内部分连纹理都没有,更别说猫了)。更直观的感受是:如果某些候选样本没有纹理或者纹理很少,那就不太可能包含目标,我们就没有必要滑窗检测,再或者,如果我们的检测目标是白猫,那图像中大片深色区域就没必要检测。可见用一些简单的约束就能排除那些完全没有可能的区域,专业说法是,用简单的分类器就能排除一些可能性极低完全没必要检测的候选样本,这里介绍两种比较常见的检测加速方法:cascade和proposal。(其实我就知道这两种 -_-!,欢迎补充)

Cascade Classifier 级联分类器:以VJ人脸检测为例,训练多个复杂度不一样的分类器,先用最简单也最快的分类器排除那些绝对不可能是人脸的候选窗,再用稍微复杂一点但也很快的分类器排除剩余候选窗中不可能是人脸的那部分,以此类推,最后由那个最复杂最慢但最可靠的分类器确定经过层层筛选留下来的少量候选窗中有没有人脸。在VJ中分类器用了boosting集成线性分类器,boosting集弱成强(强调任何弱分类器都可以经Boosting集成),集成的线性分类器越多,判别力就越强但也越慢,可以非常方便地控制分类器复杂度和速度。级联分类器用简单快速的前端分类器过滤掉大量“低质量”的候选窗,从而提高检测能力并有效控制计算量。

  • Viola P, Jones M. Rapid object detection using a boosted cascade of simple features [C]// CVPR, 2001.

Object/Detection Proposal 类物体区域检测:以R-CNN为例,如果直接以多尺度滑窗方式,用ImageNet上训练的CNN去做分类,速度绝对让人抓狂(太~~慢~~~了~~~~),RGB大神用region proposals加速检测,流程如下图:输入图像,首先用类物体区域检测(这里是Selective Search)生成~2k个类物体区域,然后依次对每个区域提取CNN特征,再用SVM去分类识别就可以了。这样不仅可以大幅提高速度,而且降低了误检率,因为那些没有包含完整物体的候选窗连进入分类器的机会都没有,更不可能分类错误了。

  • Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation [C]// CVPR, 2014.


可以看出,Cascade和Proposal都用简单方法过滤掉那些“低质量”的候选窗,从而提高检测速度,不同点在于,Proposal是普适的,目标是过滤掉那些不包含完整物体的候选窗,而Cascade是针对特定任务专门训练的,目标是过滤掉不可能包含检测目标的候选窗。接下来简单介绍几个Object/Detection Proposal方法。

Selective Search:贪婪合并超像素生成proposals,没有学习参数,手工设计特征和相似度函数用于聚合超像素。特点是被RGB大神钦点过。

  • Uijlings J R R, Van De Sande K E A, Gevers T, et al. Selective search for object recognition [J]. IJCV, 2013.


BING:作者大家都很熟悉,出发点是具有明确边界的通用对象可以通过观察归一化梯度来辨别。在边缘特征上训练简单分类器,以滑窗方式检测类物体区域,特征是专门设计的二值标准化梯度(BING),分类器是linear SVM(强调SVM可以没有kernal-trick)。特点是速度非常快,CPU上300fps,BING采用简单分类器非常类似Cascade中的前端分类器。当然BING还是有点争议的,如果您也喜欢看热闹,请自行搜索“Cracking bing and beyond”这篇论文 。

  • Cheng M M, Zhang Z, Lin W Y, et al. BING: Binarized normed gradients for objectness estimation at 300fps [C]// CVPR, 2014.


EdgeBoxes:出发点是边界框中包含完整轮廓的数量是边界框包含物体的可能性指标,边缘轮廓检测之后,滑窗遍历计算每个边界框包含的轮廓数量得到类物体分数,最后返回分数最高的部分候选框(论文中~1k)。EdgeBoxes没有学习参数,召回率和速度都不错。这个作者就更厉害了,如果您不知道Piotr Dollár是谁,请回想一下您所用的fHOG。特点:我觉得这个方法最厉害,这也是EBT为什么叫EBT的原因(EdgeBoxes Tracker)。

  • Zitnick C L, Dollár P. Edge boxes: Locating object proposals from edges [C]// ECCV, 2014.


前面介绍比较粗略,因为我也没有仔细研究过这些方法,建议您有兴趣直接看论文。这部分的最后,关于Object/Detection Proposal推荐一篇综述论文:

  • Hosang J, Benenson R, Dollár P, et al. What makes for effective detection proposals? [J]. IEEE TPAMI, 2016.

总结和对比了从2010年Objectness到2014年的顶尖proposal方法,结果如下:


可以看出BING最快但性能很低,EdgeBoxes和SelectiveSearch总体性能最好,而EdgeBoxes也很快,所以最佳推荐当然是EdgeBoxes了。再推荐一个资源:Cloud-CV/object-proposals 大部分代码都在这里了,请自取~

当然,Object/Detection Proposal是从2010年开始的,发展比较短暂,尤其2014年Multibox就已经宣布深度学习占领这个方向,到后来Faster R-CNN,用RPN以端到端的方式训练proposal,独立模块的proposal就慢慢被object detection抛弃了。但CNN类proposal速度是硬伤,端到端训练的网络也难在其他方面应用,最近也没看到非CNN,速度快还比EdgeBoxes更好的方法出现。(或许只是我不知道,若有~望推荐)

/************************************************分割线*****************************************/

终于要介绍EBT了,我自己都等的不耐烦了。简单来说,EdgeBoxes就是从图像中得到~1k个候选框,这些框包含物体的概率比较高,而且每个框都有类物体分数(objectness score),可以简单理解为这个框包含物体的置信度。有了Object Proposal就不需要多尺度滑窗了,EBT的整帧搜索只需要在排名靠前的200个候选框上进行目标检测和模型更新,就可以提高帧率。

是不是很简单?当然不可能这么简单,真这么简单效果好不好我不知道,但创新度太低论文肯定就要悲剧的。。。

EBT的主要贡献是前面提到过的训练特例DE类物体度量(instance-specific objectness measure)对proposals进行重排。通用检测识别需要考虑所有不同类别不同大小的所有proposals,而目标跟踪不同,因为跟踪问题在轮廓和尺寸等几何结构方面有强烈先验,所以EBT没有直接用EdgeBoxes给出的高分proposals,而是训练分类器对proposals重新打分,根据得分重新排列proposals,然后用于目标检测和模型更新,此外还加入连续帧平滑项约束决定目标位置。

具体流程:输入图像,EdgeBoxes检测proposals,仅保留objectness scores大于0.005的候选框(样本);然后对每个框,在边缘信息结构图上计算10维的类Haar小波特征,如图(b)所示;接下来,用训练好的linear SVM分类器对所有proposals重新打分,并重新排序,只取得分最高的200个候选框。linear SVM重排分类器每5帧更新一次,训练细节请看论文3.3节,其实这个过程就是根据跟踪目标先验(特例属性),挑选出了那些与跟踪目标在结构、尺寸方面比较相似的proposals,所以叫Instance-Specific Proposals。



EBT的基础方法是Struck,检测阶段,只对Instance-Specific Proposals的候选样本进行检测,再加入连续帧平滑项约束确定目标位置,本文的公式来了:


最终检测得分B分类器响应f平滑约束项s组成,平滑约束其实就是抑制离上一帧目标位置比较远的候选框得分,即如果两个高分候选框,一个位于上一帧目标位置附近,另一个位于距离较远位置,那我们更加相信比较近的那个框,毕竟太快的快速运动还是比较少的。更新阶段,训练样本同时采用了Instance-Specific Proposals给的全局候选样本和目标位置附近的局部样本(即原始Struck所用训练样本,半径30像素内),实验结果表明这样更好。


实验结果:没啥好说的,VOT上的结果已经证明了一切,EBT对快速和无规则运动,尤其是低帧率情况效果非常好。唯一值得一提的是,作者把object proposal方法的换成BING,实验结果比不用proposal的基础方法Struck还要差,前面也看到了,主要是BING的召回率太低了。

速度:作者给出基础Struck是4.8fps,而加了proposals的EBT是4.4fps,单独Instance-Specific Proposals的部分不到100ms,总体来说EBT是比较慢的方法。

/************************************************分割线*****************************************/

总结一下:

  1. EBT给出了proposal结合tracking的有效方法,尤其是Instance-Specific Proposals部分,从适合检测识别的通用类物体区域检测,到适合跟踪的特例类物体区域检测。
  2. Object Proposal让整帧搜索成为可能,而且自带降低误检率属性,这是EBT高Robustness的根本原因。
  3. 速度慢,没source code是硬伤。

最后,感谢您看完,以上大部分是瞎写的,欢迎批评指针。

编辑于 2018-03-13

文章被以下专栏收录

    本专栏主要针对单目标跟踪算法研究,做一些算法分享以及剖析。欢迎有兴趣的朋友关注和投稿。

    关注当前目标跟踪方向最火的方法之一,相关滤波的最新工作,分享好论文和心得,推荐好用的高速方法,当然也包括那些结合深度特征或结合CNN训练的相关滤波方法,欢迎道友投稿。近期也会关注深度学习相关的检测、识别算法。