整理Robust Object Detection Via Soft Cascade论文中的要点

论文探讨了传统瀑布式结构在对象检测中的优缺点,如速度提升与稳定性不足的问题。提出了改进的软级联方法,关注求和过程而非仅结果,通过长层结构和阈值调整实现时间-准确率权衡。采用适应性Boosting训练,通过校准算法在检测率和运行时间之间进行优化,解决了传统方法的复杂性和参数调整难题。
摘要由CSDN通过智能技术生成

这篇论文首先根据人脸识别传统方法的经典文章[1]总结了传统瀑布式结构的优缺点,如下:

传统cascade方法的优点:
运用瀑布结构大幅加快了检测速度

传统cascade方法的缺点:
1.该识别器后面的层数不能很好的利用前面层数的结果信息。尽管在前一层可能高分通过,但仅仅因为一层表现不好就被拒绝,可能导致该分类器的稳定性不高。
2.因为必须通过所有层,意为着最后的发现率(detection rate)是各层的乘积,所以对每层的发现率都有很高的要求。(感觉和是对第一点的解释…)
3.因为该面部识别器的最终识别率基于所有层的表现,其中某一层的表现不好估计,所以想要研究该识别器运行时间和正确率之间的权衡问题时将会开销大量的时间去重新训练整个识别器。
4.因为识别器基于所有层的作用,所以很难找出一个最优的调节参数的方法(这个识别器要几层,每层要多少个特征等等),很难根据需求的正确率来调整一个该识别器。
5.为了减少false positive rate,该方法不可避免的要新训练一层,这不可逆的减少了detection rate。
6.当positive example变化过于巨大(比如识别多个角度的人脸)时该方法(指传统方法)将会非常难用。
(优缺点总结自Lubomir 和Jonathan的论文Robust Object Detection Via Soft Cascade)

说了半天就是传统的cascade方法因为瀑布的原因造成了整个过程的一些复杂性,比如要提高整个人脸检测器的正确率,到底是去动那一层呢?要减少false positive又是要去改那一层呢?我想做个能在0.2秒出结果,并且要求正确率为99.5%的检测器,又要怎么做呢?传统方法因为参数太多并且没有一个选择参数的模型,所以做出的检测器有一些偶然性在里面,并且调起来特别麻烦,因为改起来就要把整个瀑布重新训练,要花费难以接受的时间。

然后这个论文就要根据这几个问题提出改进,要先提出需求(如0.2秒出结果),再根据需求来训练检测器,并且能把检测器的时间-准确率权衡通过一个叫ROC surface的3维曲面清楚的展示出来,方便调节参数,让玩家明确的知道我动了哪个参数对这个检测器的性能会有些什么影响。

该论文一开始就将[1]的adaboost训练拿出来讲,[1]中adaboost训练出的强分类器h(x)(其实就是t个弱分类器的组合)对脸部判断是这样:

t个弱分类器,将目标图像输入到t个弱分类器中,每个弱分类器都会输出一个数值,然后将t个弱分类器输出的数值求和S,再对这t个弱分类器的阈值求和Sr,将S和Sr对比,若S>Sr则h(x)=1,否则h(x)=0。

既然是对t个弱分类器求和,这个论文就将这个求和的过程加以观察,制作了一个以t为横坐标,以到t为止的求和作为纵坐标的图,如下(论文中figure2的截图):

论文中的截图

对于[1],figure2是一个黑盒过程,[1]中只知道在2500时s是不是大于sr,如果是,进入下一层(然而[1]中每一层不会有2500那么多个,前几层乃至只有几个),也就是说figure2整幅图只是传统cascade方法中的一层,而传统cascade方法由好多层组成,问题就在于你去到下一层了,上一层的累加s具体是怎样是不关心的,下一层又会从0开始累加,也只关心累加的结果是否超过阈值和Sr。

然后接下来就是本论文中提出的方法和[1]不同之处了,本论文没有很多很多层,而是用了一个很长的一层(比如说[1]的方法用了25层,每层100个features,那么一共就用了2500个features,然后该方法直接就用一层2500个features)。然后呢,本来[1]中是不关心求和过程只关心求和的结果的,该方法为了克服层与层之间的断隔,将要关心这个过程,而且只关心这个过程,具体想法如下:

看figure2可知,在累加到1500之后,正样本开始和负样本有很大的隔阂,就是其实对于一个输入,有一个最小的t,正样本的累加到t个弱分类器时都大于Sr,负样本累加到t时都小于Sr,那么t个弱分类器就足够了。基于这个想法,一共T个弱分类器,对于每个弱分类器t,都有一个累加到t时的阈值累加和Sr(t),最后这个Sr(t)将会构成一个曲线。对于一个输入,该输入将逐步累加,首先是S(1)=h1(x),然后要比较看S(1)是否大于Sr(1),若是,则累加到S(2)=S(1)+h2(x),然后看S(2)是否大于Sr(2),依次类推,如果一直到S(T)=hT(x)+hT-1(x)+…+h1(x)都大于Sr(T),那么就认定该输入为脸,即H(x)=1;若在其中某一步t<=T,有S(t)< Sr(t),那么立即中断计算,并且认定该输入为非脸,即H(x)=0。具体过程如下图(截图于论文figure3):

截图于论文figure3

这个分类器的训练简单来说也是adaboost的改型,得出的结果也是T个弱分类器,分类的流程上面也提到了,接下来就讲讲这个论文中方法的亮点,就在于这个calibration上面。

这个分类器在训练完毕后,可以根据对detection rate和运行时间的需求进行权衡调整,这个调整是基于这个思想:如果拒绝曲线在初始的几回合成长很快,则很多输入都会很快低于拒绝曲线并且被拒绝,结果就是detection rate和false positive rate都下降,如果这个拒绝曲线缓缓上涨,那么很多输入都能多活几个回合导致最后运行时间变长,结果当然是detection rate和false positive rate都会上升。

这个权衡就在于,要快还是要更高的detection rate,在确定detection rate的时候如何最大的降低false positive rate,那么这里就出现了一个calibration算法了。

这里大概描述下,对于每个回合t,首先要人工指定出每个回合可以被错认的脸的上限Pt,选择一个能让正样本和负样本分隔最大的一个弱分类器,然后设置一个最大的阈值Rt,在Rt的下面又多了Pt个脸被错认,然后这个Rt最优当然是极限接近Pt+1的曲线的位置,这样就让这个弱分类器在牺牲可以接受的detection rate的同时尽可能的减小了false positive rate(通过尽可能的提高阈值Rt)。

*很重要的一点是在这篇论文中我终于看懂横轴为false positive纵轴为detection rate的图表了……

[1]Rapid object detection using a boosted cascade of simple features

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值