安装dollar toolbox

安装dollar toolbox
一、准备:
1.https://pdollar.github.io/toolbox/下载dollar toolbox
2.http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/下载页面中的Matlab evaluation/labeling code (3.2.1),把这个文件夹下载下来
3.http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/datasets/INRIA/下载数据集,这是INRIA数据集,运行INRIA的demo所必需的
http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/datasets/USA/下载数据集,这是Caltech数据集,运行Caltech demo所必需的
4.Matlab2011b以上
5.编译器,由于工具包中用了大量的matlab与c/c++混编,所以编译器必需能够被matlab识别,windows下vs就没问题。由于我用的是mac本,用Xcode实现与Matlab的混编,这腾了好久,可以参考我的另一篇博文,详细介绍了如何实现的,连接如下:http://blog.csdn.net/ddreaming/article/details/52248348


二、安装

1.上面的东东都下载好了后,我们开始进行安装,首先打开Matlab,在命令行中输入:
>>mex -setup 
选择你所使用的编译器。

2.然后在命令行中输入:
>> addpath(genpath('path/to/toolbox/')); 
>>savepath;
其中'path/to/toolbox/'是路径,指向1中所下载的toolbox,这就是把toolbox的文件夹都添加到Matlab的搜索路径中。执行完上述指令后,我们可以查看Matlab的search path:

安装dollar toolbox_第1张图片

可以看到,在当前搜索路径中,多了很多在路径/users/Downloads/toolbox/下的文件,这些文件就是我下载的dollar toolbox文件夹所在路径。

3.将下载的Matlab evaluation/labeling code (3.2.1)文件夹添加到Matlab的搜索路径中,由于这只有一个文件夹,所以就用手动添加方式了:
在matlab中打开set path ->Add Folder->选择之前下载的Matlab evaluation/labeling code (3.2.1)->Save
然后可以在search path中查看包涵了Matlab evaluation/labeling code (3.2.1)文件夹 安装dollar toolbox_第2张图片

4.将下载的数据集解压,并保存在合适的路径下。我们就以INRIA数据集为例子,在Matlab evaluation/labeling code (3.2.1)文件夹中新建一个名为data的文件夹,再在data中新建一个INRIA文件夹。然后将在http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/datasets/INRIA/数据集中下载的set00.tar、set01.tar、annotations.zip解压,生成三个set00、set01、annotations三个文件夹。然后,将这三个文件夹存放到INRIA中,如下图:

PS:
code3就是在http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/下载页面中的Matlab evaluation/labeling code (3.2.1)。

5.运行demo,打开dollar toolbox->detector->acfDemoInria.m函数,如下:
% Demo for aggregate channel features object detector on Inria dataset.
%
% See also acfReadme.m
%
% Piotr's Computer Vision Matlab Toolbox      Version 3.40
% Copyright 2014 Piotr Dollar.  [pdollar-at-gmail.com]
% Licensed under the Simplified BSD License [see external/bsd.txt]

%% extract training and testing images and ground truth
cd(fileparts(which('acfDemoInria.m'))); dataDir='../../data/Inria/';
for s=1:2, pth=dbInfo('InriaTest');
  if(s==1), set='00'; type='train'; else set='01'; type='test'; end
  if(exist([dataDir type '/posGt'],'dir')), continue; end
  seqIo([pth '/videos/set' set '/V000'],'toImgs',[dataDir type '/pos']);%在作者给的数据集中,图片被存为。seq形式,标注被存为.vbb形式,正训练样本在V000
  seqIo([pth '/videos/set' set '/V001'],'toImgs',[dataDir type '/neg']);%负样本在V001,将.seq形式数据存入到指定文件。
  V=vbb('vbbLoad',[pth '/annotations/set' set '/V000']);%标注~
  vbb('vbbToFiles',V,[dataDir type '/posGt']);
end

%% set up opts for training detector (see acfTrain)
opts=acfTrain(); opts.modelDs=[100 41]; opts.modelDsPad=[128 64];
opts.posGtDir=[dataDir 'train/posGt']; opts.nWeak=[32 128 512 2048];
opts.posImgDir=[dataDir 'train/pos']; opts.pJitter=struct('flip',1);
opts.negImgDir=[dataDir 'train/neg']; opts.pBoost.pTree.fracFtrs=1/16;
opts.pLoad={'squarify',{3,.41}}; opts.name='models/AcfInria';

%% optionally switch to LDCF version of detector (see acfTrain)
if( 0 )
  opts.filters=[5 4]; opts.pJitter=struct('flip',1,'nTrn',3,'mTrn',1);
  opts.pBoost.pTree.maxDepth=3; opts.pBoost.discrete=0; opts.seed=2;
  opts.pPyramid.pChns.shrink=2; opts.name='models/LdcfInria';
end

%% train detector (see acfTrain)
detector = acfTrain( opts );

%% modify detector (see acfModify)
pModify=struct('cascThr',-1,'cascCal',.01);
detector=acfModify(detector,pModify);

%% run detector on a sample image (see acfDetect)
imgNms=bbGt('getFiles',{[dataDir 'test/pos']});
I=imread(imgNms{1}); tic, bbs=acfDetect(I,detector); toc
figure(1); im(I); bbApply('draw',bbs); pause(.1);

%% test detector and plot roc (see acfTest)
[miss,~,gt,dt]=acfTest('name',opts.name,'imgDir',[dataDir 'test/pos'],...
  'gtDir',[dataDir 'test/posGt'],'pLoad',opts.pLoad,...
  'pModify',pModify,'reapply',0,'show',2);

%% optional timing test for detector (should be ~30 fps)
if( 0 )
  detector1=acfModify(detector,'pad',[0 0]); n=60; Is=cell(1,n);
  for i=1:n, Is{i}=imResample(imread(imgNms{i}),[480 640]); end
  tic, for i=1:n, acfDetect(Is{i},detector1); end;
  fprintf('Detector runs at %.2f fps on 640x480 images.\n',n/toc);
end

%% optionally show top false positives ('type' can be 'fp','fn','tp','dt')
if( 0 ), bbGt('cropRes',gt,dt,imgNms,'type','fp','n',50,...
    'show',3,'dims',opts.modelDs([2 1])); end
要运行这个demo我们要做的就是合适的选择路径,我们所下载的数据集,即set00和set01中的数据,都是.seq格式的,上述程序的第一步就是要将这些.seq格式的数据集,转换成.png形式的数据集。下面部分就是实现.seq转换成.png的功能
cd(fileparts(which('acfDemoInria.m'))); dataDir='../../data/Inria/';
for s=1:2, pth=dbInfo('InriaTest');
  if(s==1), set='00'; type='train'; else set='01'; type='test'; end
  if(exist([dataDir type '/posGt'],'dir')), continue; end
  seqIo([pth '/videos/set' set '/V000'],'toImgs',[dataDir type '/pos']);%在作者给的数据集中,图片被存为。seq形式,标注被存为.vbb形式,正训练样本在V000
  seqIo([pth '/videos/set' set '/V001'],'toImgs',[dataDir type '/neg']);%负样本在V001,将.seq形式数据存入到指定文件。
  V=vbb('vbbLoad',[pth '/annotations/set' set '/V000']);%标注~
  vbb('vbbToFiles',V,[dataDir type '/posGt']);
end
上述函数中
 seqIo([pth '/videos/set' set '/V000'],'toImgs',[dataDir type '/pos'])
这个指令的意思就是,将存储在由路径[pth 'videos/set' set '/V000']指向的.seq格式数据,转换成.png格式的数据,并存在由路径[dataDir type '/pos']指向的文件夹中。我是安装如下方式设置的:
cd(fileparts(which('acfDemoInria.m'))); dataDir='/Users/wangxuewei/Downloads/INRIA';
for s=1:2, pth='/Users/wangxuewei/Downloads/code3/data/INRIA';%dbInfo是在CaltechPedestrians 中的代码,是返回这个文件夹路径等信息
  if(s==1), set='00'; type='train'; else set='01'; type='test'; end
  if(exist([dataDir type '/posGt'],'dir')), continue; end
  seqIo([pth '/set' set '/V000'],'toImgs',[dataDir type '/pos']);%在作者给的数据集中,图片被存为。seq形式,标注被存为.vbb形式,正训练样本在V000
  seqIo([pth '/set' set '/V001'],'toImgs',[dataDir type '/neg']);%负样本在V001,将.seq形式数据存入到指定文件。
  V=vbb('vbbLoad',[pth '/annotations/set' set '/V000']);%标注~
  vbb('vbbToFiles',V,[dataDir type '/posGt']);
end
即,dataDir指向一个文件夹,用于存储生成的.png图像,可自行设置;pth指向的是第4步中 INRIA文件夹,因为这里面包含所下载的.seq格式数据。这样设置后,就可以运行该程序了。

6.运行结果:
Elapsed time is 0.100636 seconds.
/bin/bash: gs: command not found

cmd =

gs -q -dNOPAUSE -dBATCH -dEPSCrop -dPDFSETTINGS=/prepress -dEmbedAllFonts=false -dUseFlateCompression=true -dAutoRotatePages=/None -dHaveTrueTypes -r300  -sDEVICE=png16m -sOutputFile="models/AcfInriaRoc.png"  -dUseFlateCompression=true -dLZWEncodePages=true -dCompatibilityLevel=1.6 -dAutoFilterColorImages=false -dAutoFilterGrayImages=false  -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -f "models/AcfInriaRoc-temp.eps"

Detector runs at 22.56 fps on 640x480 images.
可见,速度是很快的,处理640*480大小的图像,每秒钟能够处理22.56张。
处理效果:
安装dollar toolbox_第3张图片


再测试一张:
>> I=imread('/Users/Downloads/10603471_184804238179_2.jpg');
>> tic,bbs=acfDetect(I,detector);toc
Elapsed time is 0.162255 seconds.
>> figure(1);
>> im(I);
>> bbApply('draw',bbs);

安装dollar toolbox_第4张图片


你可能感兴趣的:(行人检测,dollar,toolbox学习笔记)