前言
笔者之前一直在OpenCV进行DPM研究,目前因为研究需要转向Matlab,但是作者发布的源代码用的不是Windows平台,引起了很多不便,网上的资料虽然不少,但是还是折腾不少时间,现在将我的配置过程公布如下,免去很多可能与我陷入同样编译错误的童鞋不必要的麻烦。如有不足之处,敬请指正,一起学习,一同进步!
实验环境:
Windows7_64/matlab R2014b/VS2013
DPM版本:
voc-release3.1
VOC开发包版本:VOC2007_devkit_08-Jun
Deformable Part Model 第三版voc-release3.1下载:http://cs.brown.edu/~pff/latent-release3/
PASCAL VOC 2007 数据集及开发包下载:http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/index.html
一.目录设置:
1.globals.m中的目录设定
cachedir=‘D:\...’; tmpdir ='D:\...';
VOCdevkit =['D:\PascalVOC\VOCdevkit'];
cachedir存储模型结果和中间数据,tmpdir临时文件目录,这两个目录任意设定,关系不大。
VOCdevkit开发包目录,请指向你的VOC开发包所在目录
2.建议目录结构:
-VOCdevkit
-local
-VOC2006
-VOC2007
-results
-VOC2006
-VOC2007
-VOC2007
-Annotations
-ImageSets
-JPEGImages
-SegmentationClass
-SegmentationObject
-VOCcode
注意上面的VOC2007是整个PASCAL VOC数据集!我们在下载完训练集和测试集图片及标注文件后,需要将他们放在一起,标注文件放在Annotations中,图片文件放在JPEGImages中,这里要完整数据集!
二.下面我们主要关注程序配置:
1.解压完源程序压缩包后,修改dt.cc,fconv.cc,features.cc和resize.cc的后缀为.cpp;然后到compile.m中修改上述文件名。
compile.m配置如下:
2.在dt.cpp中添加 #define int32_t int(位置当然是开头)
3.features.cpp、resize.cpp和fconv.cpp中加入
#define
注意,这里很多网上的资料都让加入int
但是,我加入了却提示重载错误,不加反而正确,细细研究发现,源程序调用round时都做了强制类型转换,例如:a=(int)rount(b);
所以,加那句话是画蛇添足。当然,如果你们发现按照我的方法不行的话,可以加上这句话试试。总之,一切为了解决问题!
4.在resize.cpp的大约36行的样子,将alphainfo ofs[len]; 改为 alphainfo *ofs = new alphainfo[len];
当然,在函数最后要加上 delete [] ofs; (至于位置,我们做研究的都有一双慧眼,作用域不难找,但需谨慎~)
5.到这里,运行compile.m按理说已经OK了,但是有报错:大致是这么说的process函数需要一个返回值,但是process函数明明是void,好吧,那我们就加上一个return 0;又何妨。
6.运行compile。编译通过!
7.运行demo.m显示结果。
三.实验结果:
感悟:
笔者之前一直用VS,对matlab很陌生,对它也有点抵触,通过今晚的摸索发现,不是想象的那么难。懂matlab的人说语法比C++简单的多。逢山开道,遇水架桥,方法永远比困难多!想想当初我们一次次被各种奇葩编译错误困扰时,最后不都一一解决走到了现在!我想我们对未知的领域都有一份抵触吧,究其原因,懒惰也好,不自信也罢,我想说的是别人能做到的,我们就也能做到,只是他们比我们多花了功夫罢了!同样,当你取得一些成绩时,戒骄戒躁,你要知道,你只是比别人多努力了点罢了!谨记,前进的道路永远没有终点!因为不进则退!
参考资料:
我将我看到的有用的参考网站全部放在这里,大家如果发现什么问题,可以根据他们的提示,大胆尝试,我想说的是,我们不应该完全按照步骤来做,而是运行自己的程序,根据错误提示,修改相应错误的部分,方为快速解决问题之道!
http://blog.sina.com.cn/s/blog_4af4d81f0101dk38.html
http://blog.youkuaiyun.com/masibuaa/article/details/22855473
http://blog.youkuaiyun.com/pozen/article/details/7103412
http://blog.youkuaiyun.com/dreamd1987/article/details/7399151
http://blog.youkuaiyun.com/pozen/article/details/7103412