在window下运行deformable part models(包括训练和检测)

      研究dpm快一个月了,终于可以用自己的数据训练模型了,检测效果还不错,在此分享一些我的经验,我也是计算机视觉方面的一只小菜鸟,如果各位觉得有什么不对的地方请指出。欢迎和大家一起讨论计算机视觉和图像处理方面的问题。这里借鉴了几篇其他同路中人的博客:

http://blog.csdn.net/pozen/article/details/7023742

http://blog.csdn.net/dreamd1987/article/details/7396620

      可以从http://www.cs.berkeley.edu/~rbg/latent/index.html获得的源码,采用MatlabC++编写,我下载的是voc-release4.01版本,大概是因为版权的问题源码是在 Linux and Mac OS上运行的,考虑许多人在Linux平台上运行该源码不方便,这里将源码转化到Windows平台上运行。

微笑检测demo部分:

1.dt.cc中加入#define int32_t  int

在window下运行deformable part models(包括训练和检测)_第1张图片

2.features.cc和resize.cc中加入

#define bzero(a, b) memset(a, 0, b) 

int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }

在window下运行deformable part models(包括训练和检测)_第2张图片

在window下运行deformable part models(包括训练和检测)_第3张图片

resize.cc

alphainfo ofs[len]; 改成 alphainfo *ofs = new alphainfo[len];


同时,同一个域中加入delete []ofs;

3. compile.m

源程序用的是0)用多线程,但是在Windows上跑不起来,这里用4)

在window下运行deformable part models(包括训练和检测)_第4张图片


经过以上步骤,就可以编译了,运行compile,但是事先要设置好matlab的编译器,我的环境是Windows操作系统、VS2010+Matlab2012b,在matlab设置编译器的命令为mex -setup,然后按照提示操作,选择vs2010编译器就行;编译完成后可以运行demo看检测效果。

 

微笑训练pascal部分:

1. 准备正、负样本,可以使用VOC提供的样本集和工具集,下载地址为:http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2012/index.html#devkit 。


下载完成后,解压缩文件后,将VOCtrainval文件夹下的VOC2012文件夹拷贝到VOCdevkit文件夹下(我这里用的是2011年的数据)

在window下运行deformable part models(包括训练和检测)_第5张图片

若要自己准备正、负样本,这个就比较麻烦了,为了减少对源码的修改,我写了生成VOC数据的工具,将生成的数据放入相应的文件夹下就好。如有需要给向我要。

2. 数据准备好了,若在Window下运行训练的代码,还是要修改源码

① 在pascal_data.m中,最好加上一段代码来防止图片不存在的情况



② pascal.m

unix(['rm ' tmpdir cls '.dat']);变成system(['del ' tmpdir cls '.dat']);

③ rewritedat.m

unix(['mv ' datfile ' ' oldfile]);变成movefile(datfile, oldfile);

unix(['rm ' oldfile]);变成delete(oldfile);

unix(['cp ' inffile ' ' oldfile]);变成system(['copy ' inffile ' ' oldfile]);

④ train.m


./learn 变成 learn

⑤ procid.m

’/’ 变成 ’\’

⑥ 关于learn.cc的修改和编译执行后的结果在compileLearn文件夹下,编译方法将修改后的learn.cc添加到vs2010项目中,运行一下就行,最后就要生成的learn.exe

⑦ 修改global.m配置路径


3. VOCdevkit\VOC2012\ImageSets\Main这个文件夹下放置trainval.txt  train.txt  test.txt分别放了正样本图片名、负样本图片名、测试图片名(只有名,没有后缀)

4. 最后一步就可以训练了,pascal(‘obj’,n)   obj就是你要训练的目标名, n就是目标大概有几类(如人有正面、侧面、背面,n就为3)  运行pascal(‘person’,3)就训练起来了


我用dpm做沙发检测,dpm中自带了很多训练好的模型例如person_final.mat,但沙发模型效果比较差,我又重新训练了一下,下面是结果

在window下运行deformable part models(包括训练和检测)_第6张图片 在window下运行deformable part models(包括训练和检测)_第7张图片

你可能感兴趣的:(计算机视觉,物体识别)