Sparselet Models for Ecient Multiclass Object Detection对应

论文Sparselet Models for Ecient Multiclass Object Detection的源码环境配置

声明:论文对应源码的运行环境为Linux,本文的配置是在Linux下,中文运行环境应该也行,还有待研究试验。

论文对应的源码下载地址为:https://github.com/rksltnl/sparselet-release1

除此之外,还需要下载INRIA的spams-matlab,,下载地址为:

选择V2.3的Matlab版本,高级版本我试的时候用不了,其下载地址为:?file=32609/spams-matlab-v2.3-svn2013-06-20.tar.gz,还需要下载安装的有Intel的编译器,我已经下载了一个月的试用版,下载地址为:,2013年的,其对应的Matlab版本需要是2014年的

环境配置:

1、将解压后的源码和spams-matlab文件放到同一个目录下,打开Matlab,进入到spams-matlab目录,运行compile命令,无错误的编译完成

2、解压Intel的编译器,安装,安装过程很简单,顺序执行即可,在Intel的编译器安装完成之后,需要配置运行环境变量,在当前用户目录下打开.bashrc,即在~/目录下打开.bashrc文件,加入

source /opt/intel/composerxe/bin/compilervars.sh intel64

语句,source 目录 intel64中间的目录需要根据intel编译器安装目录调节,主要是找bin目录下的compilervars.sh文件,否则按照源码中的readme文件过程中运行python语句会有错误,配置后重新打开shell,

输入export命令,发现LD_LIBRARY_PATH,如图,就成功了,否则,可能需要重启系统

3、修改源码下的sparselets文件夹下的compile_blas_singleTH.py文件,修改

<span style="font-size:18px;"><span style="font-size:18px;">mex_filename = filename + '_singleTH.' + "mexa64"</span></span>为:<span style="font-size:18px;"><span style="font-size:18px;">mex_filename = filename + "<span style="font-family:Helvetica,Tahoma,Arial,sans-serif;">.</span>mexa64"</span></span>修改<span style="font-size:18px;"><span style="font-size:18px;">matlab_path = "/Applications/MATLAB_R2011b.app"mkl_path = "/Users/song/Documents/Workspace/intel64"<span style="font-family:Helvetica,Tahoma,Arial,sans-serif;"></span></span></span>将这两个目录修改为自己的安装目录,例如我的是<span style="font-size:18px;"><span style="font-size:18px;">matlab_path = "/usr/local/MATLAB/R2014b"mkl_path = "/opt/intel/composer_xe_2013/mkl"</span></span>matlab_path是你的Matlab安装之后的目录,mkl_path是Intel编译器安装后的mkl的目录,我们主要是使用intel的MKL库

修改link_string语句,将其中的libmkl_intel_lp64.a,libmkl_sequential.a,libmkl_core.a前的目录都改为自己的对应目录,本文的系统都指64位系统,32位系统可能需要对应的修改,自己试一下

<span style="font-size:18px;"><span style="font-size:18px;">link_string = "g++ -O -pthread -shared -o " + "\&;" + mex_filename + "\&; " + \obj_filename + " /Users/song/Documents/Workspace/intel64/libmkl_intel_lp64.a"+\&; /Users/song/Documents/Workspace/intel64/libmkl_sequential.a /Users/song/Documents/Workspace/intel64/libmkl_core.a"+\&; -lpthread"+\&; -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lm -lgomp"</span></span>修改后的我自己的是:<span style="font-size:18px;"><span style="font-size:18px;">link_string = "g++ -O -pthread -shared -o " + "\&;" + mex_filename + "\&; " + \obj_filename + " /opt/intel/composer_xe_2013.5.192/mkl/lib/intel64/libmkl_intel_lp64.a"+\&; /opt/intel/composer_xe_2013.5.192/mkl/lib/intel64/libmkl_sequential.a"+\&; /opt/intel/composer_xe_2013.5.192/mkl/lib/intel64/libmkl_core.a"+\&; -lpthread"+\&; -L/usr/local/MATLAB/R2014b/bin/glnxa64 -lmx -lmex -lmat -lm -lgomp"</span></span>

对于matrix_sparse_ATB_csc_parsed_float.cc也需要进行修改,因为其中的mkl_scscmm函数与intel2013版的MKL库中的函数写法不一致,这是版本问题,将

<span style="font-size:18px;">extern "C"{ void mkl_scscmm_(char* chn, ptrdiff_t* m, ptrdiff_t* n, ptrdiff_t* k, \float* alpha, char* matdescra, float* val, int* indx, \int* pntrb, int* pntre, \float* b, ptrdiff_t* ldb, float* beta, float* c, ptrdiff_t* ldc);};</span>改为<span style="font-size:18px;">extern "C"{ void mkl_scscmm(char *transa, MKL_INT *m, MKL_INT *n, MKL_INT *k, float *alpha, \char *matdescra, float *val, MKL_INT *indx, MKL_INT *pntrb, \MKL_INT *pntre, float *b, MKL_INT *ldb, float *beta, float *c, MKL_INT *ldc);};</span>将<span style="font-size:18px;"> ptrdiff_t m = (ptrdiff_t)A_dims[0]; ptrdiff_t k = (ptrdiff_t)A_dims[1]; ptrdiff_t n = (ptrdiff_t)mxGetM(prhs[4]);</span>改为<span style="font-size:18px;">int m = (ptrdiff_t)A_dims[0];int k = (ptrdiff_t)A_dims[1];int n = (ptrdiff_t)mxGetM(prhs[4]);</span>在#include下加上<span style="font-size:18px;">#ifndef MKL_INT#define MKL_INT int#endif</span>或者在河边放下一盏写着心愿的河灯,祝愿一切安好。

Sparselet Models for Ecient Multiclass Object Detection对应

相关文章:

你感兴趣的文章:

标签云: