SPAMS (SPArse Modeling Software)是一个为解决各种稀疏估计问题的开源优化工具箱,其主页为http://spams-devel.gforge.inria.fr/index.html ,其可实现的功能如下:

  • Dictionary learning and matrix factorization (NMF, sparse PCA, …) 字典学习与矩阵分解,如(NMF非负矩阵分解,sparse PCA稀疏PCA,…)
  • Solving sparse decomposition problems with LARS, coordinate descent, OMP, SOMP, proximal methods 使用LARS、快速下降法、OMP(Orthogonal Matching Pursuit,正交匹配追踪)、SOMP等算法解决稀疏分解问题
  • Solving structured sparse decomposition problems (l1/l2, l1/linf, sparse group lasso, tree-structured regularization, structured sparsity with overlapping groups,…). 解决结构化稀疏分解问题

    由于这个工具箱给出的是c++代码,所以需要编译才能最终使用。也正因为如此,这个工具箱实现的算法在执行时是很快的,而且可以移植到各种平台使用。

    这个工具箱网上很多人有提到,都说编译时出现问题,我的电脑也不例外,下面稍微总结一下它的安装及使用情况。

    我的电脑环境:win8 64位,matlab2012b,VS2010\2012

    对于安装,下载安装包,解压到一个文件夹,如下图,解压后有不少文件、文件夹,其中的doc_spams.pdf是一个详尽的使用说明,介绍了各个函数接口如何使用(每个函数都有一个测试文件供测试,在test_release文件夹中)。

这里写图片描述

导入matlab—set path
执行命令:mex -setup
这里写图片描述
然后n—-y——y——-y
这里写图片描述
出现上面,恭喜您的第一步已经成功了

对于安装,在HOW_TO_INSTALL.txt中有简单说明,啰嗦了半天就是说使用compile.m进行文件编译,对于不同的计算机,配置都在这个文件中调整,所以使用matlab打开compile.m文件。

修改compile.m

见下图
这里写图片描述

接下来最重要的修改,不然一直文件找不到
原来
‘-I.\linalg -I.\decomp -I.\prox -I.\dictLearn dictLearn/mex/mexArchetypalAnalysis.cpp’, 为linux系统目录
改成你的文件所在目录
这里写图片描述

这样compile.m就修改好了。
执行compile.m文件,就会在build目录下生成很多编译后文件。

测试生成字典

clc

clear

close all

I=double(imread('/data/lena.png'))/255;

I = imresize(I, 0.25); % 图片太大,运行时间过长,所以缩放一下

X=im2col(I,[8 8],'sliding'); % extract 8 x 8 patches

X=X-repmat(mean(X),[size(X,1) 1]); % 减均值

X=X ./ repmat(sqrt(sum(X.^2)),[size(X,1) 1]); % 标准化

param.K=256;  % learns a dictionary with 100 elements

param.lambda=0.15;

param.numThreads=-1; % number of threads

param.batchsize=400;

param.verbose=false;

param.iter=1000;  % 迭代次数,原始是1000,效果好但时间过长,这里减为100

tic

D = mexTrainDL(X,param);

t=toc;

fprintf('time of computation for Dictionary Learning: %f\n',t);

fprintf('Evaluating cost function...\n');

alpha=mexLasso(X,D,param);

R=mean(0.5*sum((X-D*alpha).^2)+param.lambda*sum(abs(alpha)));

ImD=displayPatches(D);

imagesc(ImD);

colormap('gray');

fprintf('objective function: %f\n',R);

成功如下效果:
这里写图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐