K-SVD算法

转载 2015年12月05日 21:43:38

1、目标:找到一个字典D,使得对于给定的训练信号集能获得稀疏表达。具体目标为:

K-SVD算法

2、具体迭代步骤

(1)第一阶段:固定字典 D ,找最好的稀疏矩阵 X 。

K-SVD算法
此为NP难问题。 给定T0,可以采用任何approximation pursuit method去求解 X。论文采用OrthogonalMatching Pursuit (OMP) algorithms。

(2)第二阶段:也是K-SVD与MOD的不同之处,字典D是逐列更新的。

因为矩阵的相乘A*B=A的列向量*B的行向量的线性相加。

假设系数X和字典D都是固定的,要更新字典的第k列dk,令稀疏矩阵X中与dk相乘的第k行记做K-SVD算法,则目标函数可以重写为: 

上式中,DX被分解为K个秩为1的矩阵的和,假设其中K-1项都是固定的,剩下的1列就是要处理更新的第k个。矩阵Ek表示去掉原子dk的成分在所有N个样本中造成的误差。

如果在这一步就用SVD更新dkK-SVD算法,SVD能找到距离Ek最近的秩为1的矩阵,但这样得到的系数K-SVD算法不稀疏,换句话说,K-SVD算法与更新dkK-SVD算法的非零元所处位置和value不一样。那怎么办呢?直观地想,只保留系数中的非零值,再进行SVD分解就不会出现这种现象了。所以对EkK-SVD算法做变换,K-SVD算法中只保留x中非零位置的,Ek只保留dkK-SVD算法中非零位置乘积后的那些项。形成K-SVD算法,将K-SVD算法SVD分解,更新dk

 这里因为X的系数很多是0的,所以我们可以用E的SVD分解出来的E=UWV;W是E的特征向量的根号,很多是0可以得到X。

3、K-SVD总可以保证误差单调下降或不变,但需要合理设置字典大小和稀疏度。

 

4、在Michael Elad的主页上有KSVD的matlab代码下载:http://www.cs.technion.ac.il/~elad/software/。感觉速度还是有点慢。

    A newer version with various improvements, created by Ron Rubinstein, is available in his webpag:

http://www.cs.technion.ac.il/~ronrubin/software.html

 

function [A,x]= KSVD(y,codebook_size,errGoal) 
%============================== 
%input parameter 
% y - input signal 
% codebook_size - count of atoms 
%output parameter 
% A - dictionary 
% x - coefficent 
%============================== 
if(size(y,2)<codebook_size) 
   disp('codebook_size is too large or training samples is too small'); 
   return; 
end 
% initialization 
[rows,cols]=size(y);
 r=randperm(cols); 
A=y(:,r(1:codebook_size)); 
A=A./repmat(sqrt(sum(A.^2,1)),rows,1); 
ksvd_iter=10; 
for k=1:ksvd_iter 
 % sparse coding 
        x=OMP(A,y,5.0/6*rows); 
  % update dictionary 
    for m=1:codebook_size 
       mindex=find(x(m,:)); 
       if ~isempty(mindex) 
            mx=x(:,mindex); mx(m,:)=0; my=A*mx; resy=y(:,mindex); 

            mE=resy-my; [u,s,v]=svds(mE,1); A(:,m)=u; x(m,mindex)=s*v';
       end 
   end 
end

机器学习(十三)k-svd字典学习

给定训练数据Y,Y的每一列表示一个样本,我们的目标是求解字典D的每一列(原子)。K-svd算法,个人感觉跟k-means差不多,是k-means的一种扩展,字典D的每一列就相当于k-means的聚类中...
  • hjimce
  • hjimce
  • 2016年03月05日 18:44
  • 11482

目标检测——深度模型总结

目标检测——深度模型总结简介传统目标检测(基于滑动窗口的检测)主要包括三步: 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域; 提取候选区域相关的视觉特征。 利用分类器进行识别。 深度学习相关的...
  • yzhang6_10
  • yzhang6_10
  • 2017年03月05日 15:39
  • 1712

K-均值和K-SVD算法—最简单最透彻的讲解,不要看其他资料了

一。K-均值算法:(每个信号由一个Ck表达)     输入参数:     目标函数: ek为自然向量,除第k个分量为1,其余为0     输出:(1)求坐标矩阵X(本质上是稀疏编码,每一列非零元只有一...
  • qq1028850792
  • qq1028850792
  • 2013年10月21日 14:51
  • 37923

【目标检测】Fast RCNN算法详解

转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51036677 Girshick, Ross. “Fast r-cnn.” Proc...
  • qq_26898461
  • qq_26898461
  • 2016年04月27日 16:31
  • 3160

深度学习的目标检测

原文地址:https://www.52ml.net/20287.html 引言 普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在...
  • michaelhan3
  • michaelhan3
  • 2017年04月13日 23:26
  • 1494

Deep Learning回顾之基于深度学习的目标检测

转自:https://www.52ml.net/20287.html 引言 普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在ILSVRC...
  • u012507022
  • u012507022
  • 2016年10月24日 09:23
  • 8664

K-SVD算法学习

1:稀疏表示: 考虑线性等式,或者是线性逼近。X=DaX=Da,这里的D是M∗PM*P 的矩阵。称为字典(字典学习中),测量矩阵(压缩感知中),权重矩阵(多任务学习中),其中M...
  • lanyanchenxi
  • lanyanchenxi
  • 2016年01月06日 21:04
  • 1222

K-SVD算法—图像解析,让你看透彻!(附代码)

举例:K-SVD最大的不同在字典更新这一步,K-SVD每次更新一个原子(即字典的一列)和其对应的稀疏系数,直到所有的原子更新完毕,重复迭代几次即可得到优化的字典和稀疏系数。如下。    ...
  • liu_guanzhang
  • liu_guanzhang
  • 2015年03月13日 15:42
  • 2342

基于深度学习的目标检测

普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在ILSVRC(ImageNet Large Scale Visual Recognition Cha...
  • witnessai1
  • witnessai1
  • 2017年11月25日 19:29
  • 416

目标检测-RCNN系列

•   RCNN        RCNN(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类...
  • linolzhang
  • linolzhang
  • 2017年01月11日 16:26
  • 7950
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:K-SVD算法
举报原因:
原因补充:

(最多只允许输入30个字)