学习《Binarized Normed Gradients for Objectness Estimation at 300fps》

博客:http://blog.csdn.net/qianxin_dh

邮箱:qianxin_dh@163.com



      《BING: Binarized Normed Gradients for Objectness Estimation at 300fps》是作者Ming-Ming Cheng于2014年发表在CVPR上的一篇文章,该文章提出了一种利用二值化梯度特征(BING features),实现简单,快速,高效的物体检测(objectness)。文章有很多亮点,其中两点就足以引起很大的兴趣了:1)比目前最流行的检测方法速度快1000+倍,测试速度可达到300FPS!  2)c++代码开源!

        作者官方网站(附有demo演示)以及代码下载: http://mmcheng.net/bing/


一.  前言

        文章正文开始之前,首先学习下什么叫objectness

                    

          objectness measure(普通物体检测,即任意类别)相当于一个针对所有类别的目标检测,它量化了一副图像窗口中包含任何目标的可能性,正如在上图中所示的火车,行人,而不是草原,山脉。训练一个普通的物体检测器是为了产生一小组候选目标窗口,速度上比传统的滑动窗口目标检测快了许多(传统的目标检测器是利用指定类别的分类器通过依次滑动窗口发现物体)。目标与背景很大的区别之一就在于,目标具有很好的封闭型(well-defined closed boundary)。该论文提出,通过将图片窗口大小缩为一个小的固定尺寸,物体之间的梯度幅值会具有惊人的相关性(封闭物体的梯度幅值相对变化较小)。基于该发现,作者提出了将窗口大小改为8*8(这里选择8*8是出于计算的考虑,后面将会具体解释),并用梯度幅值作为特征来描述物体,实现对普通物体的检测。进一步研究发现,将该特征进行二值化,即binarized normed gradients(BING),能够更有效率地检测物体,而且程序上实现起来也很简单。

        objectless map


       上图中展示了三幅不同场景下的图像(上部分),同时也展示了各自的objectness map(下部分),通过利用非极大值抑制,抽样了一小组窗口,然后计算每个窗口的得分。objectness map向我们展示了目标位置的分布。

       普通物体检测能够很好的应用在一些预处理操作上:i)由于减少了搜索空间,计算量上明显效率更高。ii)测试阶段,利用强分类器可以实现较高的检测精度。那么,普通物体检测应该符合哪些条件才能称得上一个好呢??

              a)能够实现高检测率,能够把非物体目标过滤;

              b)产生少量候选windows,以至于后续检测器具有较小的计算量;

              c)具有较高的计算效率,可以实时应用;

              d)具有较好的推广能力;

       objectness应用在哪里呢?由于objectness是一个预处理阶段,是为了产生能够覆盖图像中所有物体的少量窗口,到目前位置,已经得到了很多领域的应用,比如:目标跟踪,显著性检测,图像质量评价,背景检测,提高目标检测方法中的空间内容支持等等。

       该文利用了简单的特征(梯度幅值)和简单的学习方法(Linear SVM),却实现了如此快速和高质量的检测,作者认为objectness会是detection的正确机制,并且也预测这次topic的出现,会对未来一段时间很多领域产生深刻影响,并且为了推动这一变化,作者也把代码进行了开源。在这里,也为作者自身付出的努力以及为推动科研事业所作出贡献点一个大赞!

       下面,也开始对正文的学习吧!


二.实现方法    

       为了发现图像中的物体,我们利用一个预定义尺寸(8*8)的窗口进行全图扫描,每个窗口通过与线性模型w进行计算获得fiter score(见论文中公式1,2)。本文在实验中共设计了36种不同的尺寸{(w,h)},其中w,h属于{10,20,40,80,160,320},首先将输入图像大小变为这36种尺寸(比如80*160),然后通过利用一个8*8大小的窗口在变化后的图像上进行滑动。并利用非极大值抑制方法(NMS),从每个尺寸图像中选出一小组备选物体框,原文中说由于每种尺寸包含物体的可能性是不一样的,比如说100*100的尺寸就比10*500的尺寸更可能包含物体(这里我的理解:是不是因为10*500尺寸的新图下,目标和背景的NG特征不明显了呢?大家如果有新鲜见解的话,希望能够指点一下),因此又定义了一个公式3,对于每种尺寸获得的filter score进一步计算,最终获得objectness score。


        再举例如下:尽管游船和游人在颜色,形状,光照亮度等方面由很大的不同,但是它们在梯度幅值空间中具有明显的相关性。那么为了有效预测到物体的存在,我们首先将(a)图resize到不同尺寸,即图(b),然后对于各种尺寸的新图,利用一个8*8大小的窗口进行遍历,将每次获得的梯度幅值作为NG特征,送到SVM分类器中进行判断该窗口所包含的是否为物体。为什么作者要这样选择特征呢?首先,NG特征具有不变形,无论物体的位置,尺度发生了多大的改变,相应的NG特征会保持不变,这也是一个好的普通物体检测方法应该具备的属性。其次,NG特征能够很好的被引入到实时性应用中。


        NG特征如何帮助我们发现物体呢?

        我们通过用一个[-1,0,1]模板找到图像x方向和y方向的梯度,分别设为Gx,Gy。则该点处的NG特征值为min(|Gx|+|Gy|,255),并以byte形式存储。然后通过svm与NG特征进行卷积计算,通过得分找到物体所在。

        我们也来了解下文中提到的两级cascaded SVM。

        i)第一级:将真实物体窗口的NG特征和随机抽样的背景窗口的NG特征分别作为正训练样本和负训练样本,利用线性SVM对模型w(上图d)进行学习,该级对所有窗口进行初步筛选。

        ii)第二级:对NMS规则筛选出的候选窗口进行得分计算,找到含有目标的窗口。


        BING特征  

        作者为了实现对特征提取和测试过程的速度提升,提出了一个NG特征的进化版本,命名为二值化梯度幅值(binarized normed gradients,BING)。

                

        如何利用BING特征进行计算?

        作者将线性模型近似地用一组基向量来表达,这里的计算过程Algorithm 1列表如下。其中,表示基向量的个数,表示相关系数。


        于是对于一个二值化特征b可以进行如下计算:。接下来的问题就是:如果将NG特征二值化?


        如何将NG特征二值化?

        前面提到,我们将计算得到的NG特征值以byte的形式进行存储。本文中作者利用前Ng个位值对特征值进行近似,比如说当一个特征值为210时,我们这样进行近似计算:210-> Binary:11010010-> 前Ng位:4 bits -> 1101。 

        因此一个NG特征通过该公式进行近似计算:

        如:

        

        为了计算一个8*8的BING特征,我们需要循环操作64个位置,为了提高计算速度与效率,提出了如下算法:

              

至此,一副图像窗口中BING特征的filter得分能够通过下式计算:



       Algorithm2算法的内部过程看的不太明白,这里也不敢提笔细细说明,最近会抽空看下程序运行代码,帮助自己理解,也希望高手能不吝赐教,指点一二。

           
        后续待分析~
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值