DPM(Deformable Parts
Model)
Reference:
Object detection with discriminatively trained
partbased models. IEEE Trans. PAMI, 32(9):1627–1645,
2010.
"Support Vector Machines for Multiple-Instance
Learning,"Proc. Advances in Neural Information Processing
Systems,2003.
最近在研究车辆跟踪,其中对粒子滤波跟踪以及CT跟踪做了相关实验和测试,感觉都不是很理想,所以,考虑到先检测车辆再对检测出来的车辆进行匹配相结合的一种跟踪方法,对于车辆检测方法,打算采用adboost和svm结合的算法检测,即:先通过adboost粗检测出车辆目标,然后通过svm进行二次精确识别。针对该方法,首先要制作车辆样本,之前是手动扣去一些,后来网上看到一种基于DPM的目标检测方法,所以就看了一下,网上(http://cs.brown.edu/~pff/latent-release4/)下载了DPM源码(linux下matlab版本),而本人的电脑只能在windows下运行,所以就很无语,但是经过在网上的翻阅,终于实现了windows
版本的DPM,其中,主要是借鉴:xun悟空博主的经验。下面就具体的操作做一个简单的介绍:
1、解压voc-release4.01.tgz......
2、修改dt.cc,fconv.cc,features.cc,getdetections.cc,resize.cc的后缀.cc为.cpp;
3、在修改后的dt.cpp中添加 #define int32_t int
4、在features.cpp和resize.cpp中加入
#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; }
5、resize.cpp中
将alphainfo ofs[len]; 改成struct alphainfo *ofs
= (struct alphainfo *)malloc(sizeof(struct alphainfo)*len);
在该函数的结尾要free(ofs);
6、在compile.m中配置如下图:
7、经过以上步骤,就可以编译了,在matlab命令界面上运行compile.m,当没有错误出现的话,说明编译成功,此时就可以运行demo.m了,如果出现编译错误,可以根据对应的错误修正代码(应该是windows变量定义问题,这个只要把变量的定义放在函数操作前就能解决)。