首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Octave上编译vlfeat库

如何在Octave上编译vlfeat库
EN

Stack Overflow用户
提问于 2013-06-05 05:53:31
回答 1查看 2K关注 0票数 0

我想在Octave上使用vlfeat库,但vlfeat.org没有在Octave上安装它的说明。如有任何帮助或建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 19:15:04

我需要将patch应用到八度makefile。下面是一个完整的脚本,可以让vlfeat在全新安装的Ubuntu 13.04上运行:

代码语言:javascript
复制
# install required packages
sudo apt-get install octave octave-pkg-dev build-essential octave-image transfig

# get vlfeat
wget http://www.vlfeat.org/download/vlfeat-0.9.16.tar.gz
tar xzvf vlfeat-0.9.16.tar.gz

# apply patch
cd vlfeat-0.9.16
sed -i 's/mex $(OCTAVE_MEX_FLAGS)/mex $(OCTAVE_MEX_FLAGS) $(OCTAVE_MEX_LDFLAGS)/' make/octave.mak

# compile
MKOCTFILE=mkoctfile make

# run demo
mkdir -p doc/demo
cd toolbox
octave --persist --eval "vl_setup; vl_demo"

在我的系统上,演示程序会一直执行,直到到达需要当前体系结构的点。似乎八度音阶在这一步不被识别,演示停止。但尽管如此,它还是能够产生一些曲线图,这表明它总体上是有效的。但我不知道在多大程度上,因为我没有做任何进一步的测试。

更新:

要运行phow_caltech101,我首先必须安装liblinear,因为提供的支持向量机使用了一些octave没有提供的函数:

代码语言:javascript
复制
cd 
wget "http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/liblinear.cgi?+http://www.csie.ntu.edu.tw/~cjlin/liblinear+tar.gz" -O liblinear.tar.gz
tar xzvf liblinear.tar.gz
cd liblinear-1.93/matlab
sed -i 's/include\/octave/include\/octave-3.6.4\/octave/' Makefile
make octave

然后我不得不修补一些vlfeat文件:

代码语言:javascript
复制
cd
cd vlfeat-0.9.16
patch -p0 << EOF
--- apps/phow_caltech101.m    2012-10-04 11:57:08.000000000 +0200
+++ apps/phow_caltech101.m    2013-06-07 12:37:29.413434382 +0200
@@ -56,7 +56,7 @@
 conf.numSpatialY = [2 4] ;
 conf.quantizer = 'kdtree' ;
 conf.svm.C = 10 ;
-conf.svm.solver = 'pegasos' ;
+conf.svm.solver = 'liblinear' ;
 conf.svm.biasMultiplier = 1 ;
 conf.phowOpts = {'Step', 3} ;
 conf.clobber = false ;
@@ -218,6 +218,8 @@
                           conf.svm.biasMultiplier, conf.svm.C), ...
                   'col') ;
       w = svm.w' ;
+      b = w(end,:);
+      w = w(1:(end-1),:);
   end
 
   model.b = conf.svm.biasMultiplier * b ;
@@ -259,7 +261,7 @@
 % -------------------------------------------------------------------------
 
 im = im2single(im) ;
-if size(im,1) > 480, im = imresize(im, [480 NaN]) ; end
+if size(im,1) > 480, im = imresize(im, [480 round(480*size(im,2)/size(im,1))]) ; end
 
 % -------------------------------------------------------------------------
 function hist = getImageDescriptor(model, im)
EOF


patch -p0 << EOF
--- toolbox/sift/vl_phow.m    2012-10-04 11:57:08.000000000 +0200
+++ toolbox/sift/vl_phow.m    2013-06-07 12:08:43.653416992 +0200
@@ -135,6 +135,8 @@
     sigma = opts.sizes(si) / opts.magnif ;
     ims = vl_imsmooth(im, sigma) ;
 
+    ims = im2single(ims);
+
     % extract dense SIFT features from all channels
     for k = 1:numChannels
       [f{k}, d{k}] = vl_dsift(...
EOF

然后我就可以成功地运行它了:

代码语言:javascript
复制
octave --eval "addpath('~/liblinear-1.93/matlab'); cd toolbox; vl_setup; cd ../apps; phow_caltech101" --persist
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16928158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档