《BING: Binarized Normed Gradients for Objectness Estimation at 300fps》读后感~

来源:互联网 发布:crazybaby安卓软件 编辑:程序博客网 时间:2024/05/14 21:32

夜深人静了,就想写点什么,早在去年,BING刚一出现就对其进行了关注,CVPR2014的文章,作者提供了详细的源代码,得到了普遍的认可,本文谈谈对BING的一些个人理解,欢迎批评指正!


1. 算法思想

与之前介绍的edge boxes有异曲同工之妙,也是考虑了我们人类观察事物的习惯:先粗看,再细看。BING就是提供一种”粗略检测“的方法,先将目标大概的位置提取出来,主要目的是为了提速,与edge boxes不同,BING是基于学习的,换句话说,我们如果将检测人体,就可以用大量的人体样本训练BING,使得BING专注于人体的检测,这是BING的一大优势所在!下面我们的描述都是基于人体检测。

BING的算法共分为两个阶段,并且两个阶段都是基于SVM的,第一个阶段,用SVM进行二分类,一类是人体,一类是非人体。第二阶段,由于检测出来的BING框框的大小不一,有的大小,比如说高10个像素,宽200个像素,是人体的可能性明显较低,作者采用了对各个框框加权重的方式,对框框内包含人体的可能性进行了排序。两个阶段都基于SVM,干脆直接称呼为cascade SVM。

2. 算法流程

根据BING代码,给出训练阶段算法流程图,如下所示:




其中,SVM共分为两个阶段,这里说一说第二阶段的SVM,这个时候的训练样本其实就是proposal的得分,得分一定是标量,于是人体的proposal是正例,非人体的proposal就是负例,每个尺寸对应所有的训练样本得分,也就是说其实每个size都要进行一次SVM,公式如下所示:



我们要求的目标是<vi, ti>,只要做一个简单的变形<sl, 1>,我们就可以直接利用linear SVM求解了,作者提供了详细的源码, SVM用的是三方库liblinear中的函数。

在测试阶段,先用事先定好大小的各类扫描框扫描图像,得到各个尺度下的训练样本,这个时候再计算各自的得分s,然后利用非最大抑制(NMS)方法进行筛选,最后再利用上面的公式进行计算最终的得分。

重点说说作者在代码里面的一个大招,在第一阶段,正样本是proposal真值,负样本是随机提取的非目标proposal,根据这两类样本得到的滤波器w,在第二阶段,作者没有沿用第一阶段得到的正负样本,而是又重新基于w过滤了每一幅图像,得到了一堆proposal(经过NMS处理过的),注意这个时候的proposal完全不知道类标哈,那怎么确定类标呢?方法是拿这些新proposal和第一阶段的真值propoals比较(重叠面积),然后将这些新proposal进行分类,以及计算各自对应的尺度和得分s,进一步,每个尺度都计算<v, t>。

我的疑问是:第二阶段为什么要重新生成proposal,直接利用第一阶段弄好的proposal不行吗?不行吗?不行吗?重要的问题要问三遍。

作者是否有什么不可告人的秘密,不可告人的秘密,不可告人的秘密。。。。。

大家都长点心想想吧!!!

再者就是NMS方面的处理,一般我们在人脸检测中使用NMS,都是基于重叠面积选择最大的那个框作为检测框(可以将一个目标的所有检测框看成一个局部区域),但是在BING第二阶段训练中是对每一个像素都要计算滤波器的得分,此处作者在代码中采用的方式较为简单,其直接定义一个邻域(NSS宽度),现将所有像素的代价值从大到小排序,然后将每个邻域内最高得分值的像素保留,剩余的全部去除。按照正常的流程来说,应该在领域内计算1到次高得分所对应的窗口与最高得分窗口之间的重叠面积,满足阈值的窗口就要保留,否则抑制掉,这意味着可能在一个邻域内可能会存在多个窗口得以“幸存”。作者可能是考虑到这么做比较耗时,所以未采用传统方式。

3. 结论

BING提供了一种基于学习的目标检测方法,准确率算好的了,进一步可以基于BING框(proposal)进行细致的目标检测,相比较于滑窗方式而言,速度成倍的提高(我采用了评分最高的100个),正检率比滑窗方式低了一些,误检率没有明显提高,速度提高了3倍左右,这种算法思想果断是目标检测以后的一大趋势了!
1 0
原创粉丝点击