《小超教你写论文》系列第四篇4.2

对于有一定经验能力的大神们,他们有无穷的想法和极强的算法实现能力,能够自由地将自己的想法实现验证。但对于我等小菜,天赋不够,能力不够,那如何实现自己的想法呢?要站在巨人的肩膀上。好处是能够借助已有成果实现自己的想法,缺点是要以大神的工作为根基,大方向需与大神相同。

     在前三篇中,提到自己的想法是处理多分辨率的行人,但不是依靠使用图像金字塔,而是采用第一篇翻译的文章中提到的方法。但还缺少一个完整的,可以使用这一想法的行人检测过程,于是选择了ACF算法。

    介绍算法之前,先声明上一篇,即4.1篇的错误。在4.1中,自己根据DPM-voc-release3.1的C编写了Felzenszwalb'sHOG,中间应该是有地方出错了,结果不太正确。根据我写的Matlab,对于图片

的HOG结果为

而根据Piotr的工具箱(早知道有人写过Matlab版本,我也不会班门弄斧的去自己写了)的代码,结果应该是

明显大神的结果更正确,更提醒我们信息的重要性,一定要多学习多膜拜大神啊。

下面简单介绍使用ACF算法进行行人检测的过程。ACF算法是加利福利亚理工的计算机视觉组通过4篇会议和1篇PAMI等一系列文章提出的行人检测方法,有着不错的检测结果和很快的速度,是目前比较比较优秀的行人检测算法之一。

先介绍使用的数据库,作者在INRIA和自己的Caltech数据库上测试了算法,这里只简单描述在Caltech上的检测过程。训练过程在下一篇与自己的想法结合后进行说明。

1)从www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/下载的数据库为(*.seq)格式,先用工具箱中的seqIO.m将其转化为一帧帧图片,这样比较好处理。转化后如图

2)训练检测器。这里就省略了,准备将其在下一篇中和自己的思想结合起来进行说明。好在工具箱中有训练好的检测器,直接使用就好。

3)载入检测器。本来应该载入2)中训练的,这里就载入自带的吧,使用load函数载入。

4) 使用检测器进行检测。使用acfDetector函数进行检测,并用bbApply输出检测到的Bounding Box。

下面是在Caltech数据库上的一些检测结果。

下面是自己简单的调用代码,为了让大家清楚具体调用过程。

for i=1:1845
    imgdir = 'E:\郑超\目标检测\data\Caltech\test\images\V001';
    imgNms=bbGt('getFiles',{imgdir});
    I=imread(imgNms{i});
    name = 'AcfCaltech';
    nm=[name 'Detector.mat'];
    t=load(nm);
    detector=t.detector;
    bbs=acfDetect(I,detector);
    figure(1); im(I); bbApply('draw',bbs); 
    pause(.1);
end