在Windows上运行DPM VOC-release 3.1 (MATLAB 2015a,VS2013)
1. 首先下载DPM release 3.1:https://people.eecs.berkeley.edu/~rbg/latent/index.html
2. 将下载文件解压,在MATLAB中设置路径为release 3.1当前路径
3. 把用到的文件dt.cc resize.cc fconv.cc features.cc的后缀都修改为cpp
4. 在dt.cpp中加:#define int32_t int
5. features.cpp、resize.cpp、fconv.cpp中加入
#define bzero(a, b) memset(a, 0, b)
int cround(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; elsereturn (int)a; }
注意:其中的cround不要参考其他资料中的round,否则会出现与C++不兼容现象,导致会一直报错“DPM\voc-release3.1\resize.cpp(6) : error C2556: “int round(float)”: 重载函数与“float round(float) throw()”只是在返回类型 上不同”。
6. resize.cpp中的alphainfo ofs[len] 换成:alphainfo *ofs = new alphainfo[len]
7. fconv.cc中process()函数增加一个返回值:return NULL;(将其添加在process函数最后一个括号之前)
8. compile.m中修改为:
mex -Oresize.cpp
mex -Odt.cpp
mex -Ofeatures.cpp
% use one of thefollowing depending on your setup
% 1 is fastest, 3 isslowest
% 1) multithreadedconvolution using blas
%mex -O fconvblas.cc-lmwblas -o fconv
mex -Ofconv.cpp-outputfconv
% 2) mulththreadedconvolution without blas
% mex -O fconvMT.cc -ofconv
% 3) basic convolution,very compatible
% mex -O fconv.cc -ofconv
9. 在matlab中运行compile进行编译了,这时还可能出现重定义的错误,应该是VS对c++的一些不兼容,可以参考第5步的注意事项。
10. 输入demo()。可以查看demo的运行效果图。