关于Integral channel features以及softcascade

关于ICF(Integral channel features)以及softcascade,主要是从下面四篇文章入手的,第一篇文章是利用ICF+softcascade进行人头检测的;第二篇文章就是ICF的出处;第三篇文章试讲如何利用ICF+softcascade并且将其改进使得保持准确率的前提下能够快速的进行行人检测;第四篇文章是针对改进ICF+softcascade的检测准确率的。

1、Subburaman, V.B.Descamps, A. ,Carincotte, C. ,“Counting people in the crowd using a generichead detector”,  AdvancedVideo and Signal-Based Surveillance (AVSS), 2012 IEEE Ninth InternationalConference on, pp.470 – 475,18-21 Sept. 2012.

2、P. Dollar, Z. Tu, P. Perona,and S. Belongie, “Integral Channel Features,” BMVC, 2009. 

3、Rodrigo Benenson, Markus Mathias, Radu Timofte and Luc Van Gool, “Pedestrian detection at 100 frames per second,” ComputerVision and Pattern Recognition (CVPR), 2012 IEEE Conference on, pp.2903 - 2910 ,16-21June 2012.

4 、R. Benenson, M. Mathias, R.Timofte, and L. Van Gool, “Seeking the Strongest Rigid Detector,”  CVPR 2013

    第一篇文章对于ICF+softcascade没有太大改进,是在PETS2012和Turin metro platform(一个地铁站)上进行的测试,效果不错。改进的地方就是检测之前的背景分离,文章分别对(1)采用Idiap背景分离法(2)采用Vibes背景分离法(3)不使用背景分离法进行了测试,背景分离法效果不是完全的好,因此实际应用可以不采用,或者采用别的背景分离法。再有就是检测之前加入了兴趣点检测部分,是根据采集到图像的灰度图的梯度角度范围来确定可能的人头区域,文中没有提到具体的梯度角度范围,只是提到实验时的另外两个阈值(检测到的每个范围内的最小像素点数,检测到的范围内的梯度幅度门限)。我用opencv的代码进行了测试,简单试了试也没发现比较好的范围。还有就是实验结果检测速度相当慢,但是使用opencv自带的行人检测xml文件检测速度还行,基本能达到实时性,但是效果很不怎么样,可能是我的使用环境因素。

    第二篇文章就是integral channel features(有人把他叫做积分通道特征)的出处,其实思路很简单,就是把图像的线性或非线性变换进行组合,最后试验测试出组合效果最好的几个变换,结果显示梯度幅度,不同方向的梯度角度,luv空间像素值是最好的组合。之后所谓的ICF都是梯度在六个方向的幅度,梯度幅度,luv空间三个值,这样一共相当于十个通道。在训练的时候,首先对输入的样本进行计算是个通道中的特征值以及其积分图像,然后随机选择N个(如5000)矩形框,矩形框位于哪个通道,矩形框的大小位置等都是随机选择的,然后每个弱分类器训练时从这个特征池中选择最能代表样本特性的几个特征矩形框,每一个弱分类器训练完都有一个门限值,检测时用。作为把这些弱分类器线性组合成为强分类器。文章有个地方看不明白,关于选择负样本:Training is done in 3 stages. The first stage randomly samples 5 000 negative samples, the second and third stages use bootstrapping to add 5 000 additional hard negatives each. 希望明白的朋友指点。还有就是检测时的标准NMS(Non-maximal suppression)也不明白。另外,文中提到了pre-smoothing和post-smoothing,同样还没看明白,应该是需要查一下具体资料吧。

(下面关于第三篇文章的部分是从百度文库中找的,跟我想表达的意思差不多,直接拿来主义了 

 地址:http://wenku.baidu.com/view/e40c3a775acfa1c7aa00cc4e.html)    

第三篇文章文章的算法核心主要分两部分,第一部分是基于“stixel world model”,这个算法的作用是exploiting geometry,也就是检测出行人出现的可能区域,这个思想由Benenson(也就是作者本人)在2011年ICCV的《Stixels estimation without depthmap computation》中提出;第二部分是基于“Integral Channel Features”,这个算法的作用是检测行人,这个思想是引用Dollar在2009年BMVC上发表的《Integral channel features》。作者系统配置是:CPU(8 cores machine Intel Core i7 870)+ GPU(Nvidia GeForce GTX 470)。

作者的贡献:

①Object detection using stixels:“stixel world model”的本质是检测出图像上的柱状物(column,行人也算是柱状物),并且估计出柱状物的低端像素(bottom pixel)和顶端像素(top pixel),将这些像素点标记出来就围成了行人出现的可能区域,作者之前在《Stixels…》这篇文章中就希望可以将这种思想与物体的检测结合起来,但当时并没有实现,作者在本文中将“stixel world model”与行人检测完美的结合在了一起,这是其中一个贡献。

②Object detection without image resizing:

围绕这个,作者首先提出GPU的加速功能,并暗示虽然后面作者的方法会令training time增加,但有了GPU的加速,training time还是可以令人接受的。                       

之后作者比较了四种训练和检测的思路,并指出自己方法的优越性。⑴训练出一种标准模型(model),检测的时候将图像缩放N(≈50)次,然后将每次检测的结果与model对比;⑵通过寻找大小不同的样本,训练出N种models,检测的时候只检测一次,与N种models进行对比;⑶上面两种方法都是最原始的方法,Dollar在2010年BMVC的《The fastest pedestrian detector in the west》一文中提出了一种新的思想,这种思想只需要训练一个标准model,检测N/K(K≈10)次,然后其余的N-N/K种大小的图片的特征不需要再进行这种复杂的计算,而是跟据这N/K次的结果,由另外一种简单的算法给估计出来,这种思想实现的基础是大小相近的图像的特征可以被足够精确的估计出来;⑷作者在这部分的贡献就是将Dollar的成果反过来用,训练N/K个models,然后其它的models由这N/K个models估计出来,这样就只需要检测1次。

作者的最后一个贡献是soft cascade的应用。Adaboost分类器包括2000个弱分类器,传统的方法每一次检测都必须通过一层一层的通过这2000个弱分类器,通过每层分类器时会返回一个detection score,soft-cascade的思想就是在每个弱分类器里添加一个门限值(threshold),如果detection score低于这个threshold,便中断本次检测,而不需要通过后面的分类器以节省时间。作者训练的每个model都有其自己的soft-cascade threshold。

杂谈:

①本程序在计算“stixel world model”时用的是stereoimages(同一时刻不同角度的两张图片),在检测行人的时候用的是其中一张图片。

②代码里面既有GPU版本,也有单独使用CPU的版本。

文章给我的另一个启发就是关于GPU的使用,希望以后有时间可以好好看一下GPU的部分。


第四篇文章主要是为了提升ICF+softcascade方法用于行人检测上时的检测准确性。(1)对于特征选择,不再使用之前的随机选择,作者尝试了几种选择方法,最后发现使用所有可能的矩形框(Allfeatures)效果最好,但是由于需要占用大量内存以及计算速度太慢,最终选择了SquareschnFtrsAll方法来选择特征,好像是每隔四个像素选择矩形框,选择的时候所有尺寸的都要。但是在最后多尺度进行训练的时候,第一阶用了Allfeatures法选择,第二阶用了SquareschnFtrsAll法选择,后面的两阶用了randomSymmetric++法(randomSymmetric就是在一个通道先选择150个,然后在这个通道镜像对称的再选择150,这样得到300个特征,然后再相同位置的其他九个通道,每个通道选择300个,这样共3000个,++表示把这种方法得到的3000个特征训练10次?,然后从这十次的结果中选择第11次的特征??不是很明白。。。。)进行选择。(2)对于归一化,实验结果表明采用简单的GrayWorld normalization效果上会有改进,采用ACE(automatic colour equalization)归一化效果改进更多,但是ACE速度太慢了。  (3)弱分类器使用level-2 decision tree效果很好,而且we transform the level-2 decision tree in a three bits vector, and use it to index a table with 23 entries. With a similar computational cost, we obtain a (slightly) more discriminative weak classifier.我看训练结果每个弱分类器相当于选择了三个矩形框出来,是不是就是这个意思?  (4)训练方法采用adaboost,而且弱分类器达到一定数目后,在增加弱分类器的数目效果也不会有什么改善了,而且训练方法的选择(应该是说哪种boost的选择)对于训练效果的影响不如特征的选择以及弱分类器的选择影响大。 (5)训练样本的选择。主要是从这五个方面进行了讲述如何改善检测质量,实验结果表明检测率比之前的HOG+SVM提高至少30%。但细节方面的选择对于最终的检测率有很大影响。 文章最后还提到本文的思路与deep learning有相似之处,这个我不懂。文章先是线性处理,(地图方向滤波以及积分图像),之后弱分类器用决策树训练属于非线性,最后强分类器就是弱分类器的线性组合。

    随时有什么想法就记录。。欢迎讨论指点。

原文链接

http://blog.csdn.net/tracyliang223/article/details/25391935

你可能感兴趣的:(关于Integral channel features以及softcascade)