上个博文我讲了一些CNN相关的论文,比较浅显都是入门知识,这节课来总结一些稀疏表示方面的文章。至于上个博文说到的要讲的sparse coding的知识,我将会放在Deep Learning的专题里面讲解。好了,闲话不多说,下面还是列出几篇我看过的sparse representation方面的论文。
第一篇:Robust Face Recognition via Sparse Representation,这是08年马毅等发表PAMI上的一篇文中,利用稀疏表达识别人脸,打开Google Scholar引用次数3500多次。其实之前我一直没弄懂SP到底是怎样工作的,最后才明白其实SRC相当于一种分类的方法,但是不同于传统的NN, NS, SVM等分类方法。SRC是利用字典得到一系列的稀疏系数,然后利用系数的性质得到test data的所属类别。其原理如下图所示:
上图最左边是一张test image(上下两张图片分别是occluded和corrupted),每个test image可以表示字典和对应的系数相乘然后加上一个误差。等号右边第一列就是图像,第二列是字典的可视化,第三列是误差。红色的系数对应的就是字典中红色框出的人脸,实验中我们用AR库700个样本构建字典,一共100类人脸,每类7个样本。指出,这里的字典是过完备字典(即字典的行数小于列数),最简单的字典我们可以直接把每一个训练样本拉成列得到,具体构建方法如下:
A就是我们要构造的字典,A1~Ak对应k类,其中, 那么给定一张测试样本y就可以表示成这样:
其中就是我们要求的系数。那么问题来了,给定一个test 样本,怎么才能让这个系数很好的表示呢。我们想是一个向量,如果test对应那一类的样本的系数比较大,而其他类对应的系数为零,这样我们就能用很好的表示test了,且这样的系数也是稀疏的。那么怎么才能使得这样的系数足够稀疏呢,这就是数学上的问题了。给定要求的式子:
其中y是test样本, A是字典,x0是待求的系数,我们的目的是要使得x0足够稀疏。这里先来谈谈之前的问题,“过完备字典”,为什么字典必须是过完备的呢。假设我们的字典不是过完备的,那么上式是过定的,对应的x0就只有唯一解了,而这个解往往不是稀疏的。相反,如果字典是过完备的,那么上式就是欠定的,对应着无穷多的。这样我们可以做一个最优化问题,找出这无穷多解里最稀疏的作为上式的解,而这个解对应着就是同类系数非零,其他类系数全零的情况了。
那么问题来了,我们怎么才能找到这个最稀疏的解呢,我们可以看成是求下式的一个最优化问题:
由于求解这个0范数是一个NP难问题,所以文中想到放宽稀疏条件,转而求解1范数问题:
这一点文中有详细的讲解:
由于实际情况中往往会引入噪声,所以我们求解中我们实际上是求解这个式子(其中Z是噪声),那么在求解这个优化问题的约束项就变成了这样
通过求解这个最优化问题,我们就可以得到最稀疏的1范数解,理论上说这个解肯定没有0范数解稀疏,但是通过不断的迭代这个解释可以求出来的并且这个解在分类问题上效果已经很好了,这样我们就可以通过求出的解(也就是稀疏系数),来判断y到底属于哪一类。之前不是说过我们的字典用了700张image,100individual(7each)吗。假设test对应的是第三类的样本,那么理论上说第三类的7个系数非零,而其他的99类的系数全零。由于实际中求出的解不可能如此理想,所以我么可以通过判断residual(残差)来决定y属于哪一类。residual如下:
其中,对应的是第i类的系数,A是字典,y是测试样本。这样我们可以把100类每类的7个系数分别代入上式,哪一类使得最小,y就属于那一类。这就是SP的分类原理了。具体算法求解过程如下:
由于用系数分类的时候我们必须判断系数的两个性质residuals和sparsity,residuals越小说明测试样本被字典表示的效果越好。会出现这种情况,给定一个非人脸的样本也能使得很好的被字典表示,但是这时候sparsity往往不满足。也就是说并非residuals越小越好,要把两者结合起来判断才可能,才能很好的用来分类,于是文中提出了SCI的概念:
当(x是test样本对应的系数)我们判断此测试样本valid(即此样本是人脸样本),In Algorithm 1, one may choose to output the identity of y only if it passes this criterion。
至此我们大概把稀疏表达的原理说清楚了,上面提到的字典构建方法比较简单,直接用train data拉成列。我们可以改进下利用一些特征选择的算法提取样本的特征,然后用这些特征来构建字典,文中利用Eigenfaces, Laplacianfaces, Fisherfaces, Randomfaces and downsampled images 分别进行了测试,用这些方法进行特征选择然后构建字典。得到的分类效果如下图:
从图中可以看出这几种方法得到的效果相差无几,也就是说SRC对特征并不敏感,即使是不进行任何特征选择也能得到很好的分类效果。同时文中还把SRC的分类效果和NN,NS,SVM等分类效果做了比较,其结果如下:
从图中不难看出,SRC的分类效果远远要好过其它三类,并且文中分析SRC对遮挡情况的鲁棒性也比较好,总而言之这是一个非常好的东西,哈哈。多的不说了,如要深究自己去细看文章就是了。
第二篇:Sparse Representation Based Fisher Discrimination Dictionary Learning for Image Classification 这篇文章是偶然情况下一个同学给我看的,看了之后就感觉灰常不错,对我们这种初出茅庐的菜鸟启发性很大。这篇文章其实是对上篇文章的一个改进,从题目我们就可以看出这篇文章把SRC和Fisher线性判别做了一个综合,文章巧妙就巧妙在将FLD的思想用到了系数的分析上而非类别的分析上。其数学思想如下所示:
其中, 。如果我们能使得最小,表示此测试样本能很好的被字典表示,如果能使得
最小,就能使同类系数最紧密,不同类系数最稀疏。同时使这两项最小,就能得到更好的稀疏系数了,显然这个系数比之前SRC的系数更好。 这就是这篇文章的大概思想了,实验代码我也跑过,分类效果确实不错,但速度着实太慢,实时性不好。
第三篇:Robust Object Tracking via Sparsity-based Collaborative Model 这是教研室学术交流会上一个师兄讲到的文章,后来我又仔细的把文章看了一篇,文章利用SPC进行目标跟踪,首先利用第一帧建立训练样本字典,字典的构建如下所示:
A+表示正样本训练的字典,A-是负样本构成的字典。把A+和A-放在一起构建一个总的字典A。红色框内表示前景目标,红色框外表示背景目标。由于稀疏表示构建的字典必须是过完备的这就要求训练量很大,但实际检测中为了实时性好不可能选取太多的训练样本。于是文中就利用特种空间去冗余的方法降低每一个样本的行数,以求达到字典过完备的目的。这是本文的一大亮点之一。其特征选取方法如下:
在实验过程中由于,人的移动背景区域在不断的变化,所以我们要不断更新负样本。而正样本是我们要检测的目标,正样本就不必更新了。文中还有一大亮点就是利用kmeans得到k个聚类中心,利用这些聚类中心构建一个新的字典D,并且利用字典D得到稀疏系数,生成直方图。在待检测区域滑窗选取patch,每一个patch就会对应着一个系数直方图,利用这个系数直方图和原直方图比较就可以知道,这个patch是否遮挡。具体操作如下: