天天看点

from local coordinate coding to local constrained linear coding

转载出处:http://hi.baidu.com/windey1988/item/de022800dfab8018acdc7066

                    http://blog.csdn.net/jwh_bupt/article/details/9837555

      最近阅读了关于Yu Kai,Yang Jianchao合著的文章,包括前面的博客中的那篇,一共三篇。这里说的两篇是:Nonlinear Learning using Local Coordinate Coding和Locality-constrained Linear Coding for Image Classification。对于这两篇文章,我转载的第一个出处有很好的解释与公式推导。本来想自己写,发现自己理解的不如作者深刻,干脆就转载了。而第二个转载的出处是对ScSPM和LLC 两种coding方式的总结,而且以很深刻的角度讲述共性的东西,写的很好。

     我在这里想介绍的还是local coordinate coding,如果读原文,会发现很多的数学定义与证明。在这里刨去深刻的数学推导不谈,我感觉可以从最简单的流形学习的角度来理解作者提出的local coordinate coding,虽然作者也提到了该方法与manifold learning的相似于不同,但是很多地方是相通的。就是假设我们编码的特征存在一个低维的流形空间。通过构建局部的线性来实现全局的非线性,这个与Nonlinear manifold learning的思想是一样的。

     废话不多说了,上正文。

 文章来源于CVPR10,即《Locality-constrained Linear Coding for Image Classification》,在其前一篇的基础上再次做出改进。前一篇引入了稀疏编码和最大化pooling技术,采用线性SVM对空间金字塔特征集分类,本文则引入了局部约束的概念,更进一步提高了计算效率和准确性。

    主要思想源自Kai Yu等发在NIPS09上面的文章《Nonlinear learning using local coordinate coding》,作者做实验发现,稀疏编码的结果往往具有局部性,也就是说非零系数往往属于与编码数据比较接近的基。作者提出的局部坐标编码(LCC)鼓励编码满足局部性,同时从理论上指出在一些特定的假设下,局部性比稀疏性更加必要,对于一些非线性学习能够获得非常成功的结果。

    传统的矢量量化方法需要解决如下的最小二乘拟合问题:

from local coordinate coding to local constrained linear coding

    X为待编码的特征集,B为码本,得到的系数向量c为特征对应的编码。由于这里的系数约束使得系数中必须仅有一个非零元,且其值为1。实际过程中求解这个问题通常采用最近邻搜索。

    稀疏编码放宽了对系数条件的限制,使得系数的一范数最小:

from local coordinate coding to local constrained linear coding

    这里稀疏编码的优势是可以获得更小的重构误差。

    作者提出了一种新的编码方法称为局部性约束的线性编码。优化问题描述如下:

from local coordinate coding to local constrained linear coding

    这里的

from local coordinate coding to local constrained linear coding

表示对应元素相乘。其中的d_i如何计算呢?公式如下:

from local coordinate coding to local constrained linear coding

    其中的

from local coordinate coding to local constrained linear coding

分析优化问题我们可以知道,d_i向量中的M个元素实质上描述了当前信号和码本中的基之前的距离关系。要保证正则项最小,即是保证求解系数与距离矢量之间的内积的平方和最小。如何保证这个值最小,那么就应该有距离较大值对应的系数尽可能小,而系数中的较大值则分布在距离较小的元素的对应位置。由于系数矢量中的较大值主要分布在离信号很接近的基上,因此该正则项可以满足局部性需求。

    下图可以形象地表述LLC与矢量量化和普通的稀疏编码之间的区别。

from local coordinate coding to local constrained linear coding

    相比于前两个算法,其优势有:可以获得非常小的重构误差,能够获得局部平滑的稀疏性,由于码本过完备,稀疏编码为了满足稀疏性,对于相似的patch可能会选择一些完全不同的基,这样丢掉了编码之间的相关性。而LLC很明显对于相似的patch其编码肯定会是相似的。

    另外,可以获得一个分析解如下:

from local coordinate coding to local constrained linear coding

    其中,

from local coordinate coding to local constrained linear coding

表示数据的协方差矩阵。

from local coordinate coding to local constrained linear coding

的基对信号进行编码,也就是求解一个最小二乘拟合的问题:

from local coordinate coding to local constrained linear coding
from local coordinate coding to local constrained linear coding
from local coordinate coding to local constrained linear coding

    上式可以采用坐标下降法来迭代地求解,即给定C,优化求解B,然后再给定B优化求解C。

实际上由于训练描述子的数量非常巨大,这种方法无用武之地。我们这里采用另一种在线学习的方法。

from local coordinate coding to local constrained linear coding
from local coordinate coding to local constrained linear coding

    值得一提的是,前一篇文章采用的是SIFT特征,本文实验用的是HOG描述子。在空间金字塔层中,都可以获得一个描述子的编码,这些编码合并(pooled)组成相应的合并特征。这些来源于每个子区域的合并特征最后串接在一起,归一化组成最终的图像特征描述子。这里采用最大化pooling进行合并,采用二范数进行归一化,最后得到的描述子放入线性SVM中进行训练。

下面是关于SPM 与LLC的总结:

前言

       上一篇提到了SPM。这篇博客打算把ScSPM和LLC一起总结了。ScSPM和LLC其实都是对SPM的改进。这些技术,都是对特征的描述。它们既没有创造出新的特征(都是提取SIFT,HOG, RGB-histogram et al),也没有用新的分类器(也都用SVM用于最后的image classification),重点都在于如何由SIFT、HOG形成图像的特征(见图1)。从BOW,到BOW+SPM,都是在做这一步。说到这,怕会迷糊大家------SIFT、HOG本身不就是提取出的特征么,它们不就已经形成了对图像的描述了吗,为啥还有我后面提到的各种BOW云云呢

from local coordinate coding to local constrained linear coding

。这个问题没错,SIFT和HOG它们确实本身已经是提取到的特征了,我们姑且把它们记为x。而现在,BOW+SPM是对特征x再进行一层描述,就成了Φ(x)——这相当于是更深一层(deeper)的model。一个十分相似的概念是SVM里面的核函数kernel,K=Φ(x)Φ(x),x是输入的特征,Φ(x)则对输入的特征又做了一层抽象(不过我们用核函数没有显式地对Φ(x)做定义罢了)。根据百度的余凯老师在CVPR2012的那个Tutorial上做的总结[5]:Deeper model is preferred,自然做深一层的抽象效果会更好了。而Deep Learning也是同样的道理变得火了起来。

       再次盗用一些余凯老师在CVPR2012的那个Tutorial上的一些图:

from local coordinate coding to local constrained linear coding

图 (1)

        SPM,ScSPM,LLC所做的工作也都集中在design feature这一步,而不是在Machine Learning那一步。值得注意的是,我们一直在Design features,而deep learning则是design feature learners。

      BOW+SPM的整体流程如图(2)所示:

from local coordinate coding to local constrained linear coding

图(2)

        Feature Extraction的整体过程就是先提取底层的特征(SIFT,HOG等),然后经过coding和pooling,得到最后的特征表示。

             ----Coding: nonlinear mapping data into another feature space

             ----Pooling: obtain histogram

        而SIFT、HOG本身就是一个coding+pooling的过程,因此BOW+SPM就是一个两层的Coding+Pooling的过程。所以可以说,SIFT、SURF等特征的提出,是为了寻找更好的第一层Coding+Pooling的办法;而SPM、ScSPM、LLC的提出,是为了寻找更好的第二层Coding+Pooling的办法。而ScSPM和LLC所提出的更好的Coding办法就是Sparse Coding。

from local coordinate coding to local constrained linear coding

图(3)

  • 再前言

        在总结ScSPM之前又要啰嗦些话。为啥会有SPM→ScSPM呢?原因之一是为了寻找better coding + better pooling的方式提高性能,原因之二就是提高速度。如何提高速度?这里的速度,不是Coding+Pooling的速度,而是分类器的速度。SPM设计的是一个Linear feature,在文章中作者用于实验则是用了nonlinear SVM(要用Mercer Kernels)。相比linear SVM,nonlinear SVM在training和testing的时候速度会慢的。至于其原因,我们不妨看看SVM的对偶形式:

from local coordinate coding to local constrained linear coding

(1)

        如果核函数是一个线性的kernel:K(z, zi)=zTzi,那么SVM的决策函数就可以改写为:

from local coordinate coding to local constrained linear coding

    (2)

          从两式可以看见,抛开训练和存储的复杂度不说,对于测试来说,(1)式对每个测试样本要单独计算K(z, zi),因此testing的时间复杂度为O(n)。而(2)式的wT可以一次性事先算出,所以每次testing的时间复杂度为O(1)。此外,linear classifier的可扩展性会更好。

          因此,如果能在coding+pooling后设计得到线性可分的特征描述,那就最好了。因此能否设计一个nonlinear feature + linear SVM得到与 linear feature + nonlinear SVM等效甚至更好的效果,成为ScSPM和LLC的研究重点。

  • ScSPM

        SPM在coding一步采用的是Hard-VQ,也就是说一个descriptor只能投影到dictionary中的一个term上。这样就造成了明显的重建误差(worse reconstruction,large quantization errors)。这样,原本很相似的descripors经过coding之后就会变得非常不相似了。ScSPM为此取消了这一约束,它认为descripor可以投影到某几个terms上,而不仅仅是一个。因此,其目标函数变成了:

from local coordinate coding to local constrained linear coding

     (3)

        其中M是descriptor的数目,Um表示第m个descriptor在字典V上的投影系数。

        它对投影系数用L1-norm做约束实现了稀疏。求解问题称为LASSO (least absolute shrinkage and selection operator),在得到稀疏结果的同时,它无法得到解析解,因此速度肯定是很慢的。关于L1-norm和LASSO问题,可以参看这里。

        为什么Sparse Coding好,主要有以下几个原因:

      1)已经提到过的重建性能好;[2]

      2)sparse有助于获取salient patterns of descripors;[2]

      3)image statistics方面的研究表明image patches都是sparse signals;[2]

      4)biological visual systems的研究表明信号的稀疏特征有助于学习;[4]

      5)稀疏的特征更加线性可分。[2]

         总之,"Sparse coding is a better building block“。

         Coding过后,ScSPM采用的Pooling方法是max pooling:Zj=max Uij。相比SPM的average pooling:Zj=1/M *Σ Uij。可以看见average pooling是一个linear feature representation,而max pooling是nonlinear的。我是这么理解再前言中提到的linear和nonlinear feature的。(@13.08.11:今天在写理解sparse coding的时候发现这里搞错了。不光是pooling的函数是线性的,VQ的coding得到的u关于x好像也是线性的。)

        作者在实验中得出max pooling的效果好于average pooling,原因是max pooling对local spatial variations比较鲁棒。而Hard-VQ就不好用max pooling了,因为U中各元素非0即1。

        另外实验的一个有趣结果是发现ScSPM对大的codebook size表现出更好的性能,反观SPM,codebook大小对SPM结果影响不大。至于为啥,我也不懂。

  • LLC

         LLC和ScSPM差不多了,也是利用了Sparsity。值得一说的是,其实Hard-VQ也是一种Sparse Coding,只不过它是一种重建误差比较大的稀疏编码。LLC对ScSPM的改进,则在于引入了locality。为了便于描述,盗用一下论文的图:

from local coordinate coding to local constrained linear coding

图(4)

        这个图实在是太棒了,太能解释问题了。VQ不用说,重点在于SC和LLC之间,LLC引入了locality的约束,即不仅仅是sparse要满足,非零的系数还应该赋值给相近的dictionary terms。作者在[4]中解释到,locality 很重要是因为:

     1)nonlinear function的一阶近似要求codes是local的;

     2)locality能够保证codes的稀疏性,而稀疏却不能保证locality;

     3)稀疏的coding只有再codes有局部性的时候有助于learning。

        总之,"locality is more essential than sparsity"。

        LLC的目标函数是:

from local coordinate coding to local constrained linear coding

     (4)

       和(3)一样,(4)可以按照加号的前后分成两部分:加号前的一项最小化是为了减少量化误差(学习字典、确认投影系数);加号后的一项则是做出假设约束(包括是一些参数的regularization)。这个求解是可以得到闭合解的,同时也有快速的近似算法解决这个问题,因此速度上比ScSPM快。

       di描述的是xi到每个dictionary term的距离。显然这么做是为了降低距离大的term对应的系数。

       locality体现出的最大优势就是,相似的descriptors之间可以共享相似的descriptors,因此保留了codes之间的correlation。而SC为了最小化重建误差,可能引入了不相邻的terms,所以不能保证smooth。Hard-VQ则更不用说了。

       实验部分,则采用max pooling + L2-normalization。

        文章的最后,盗窃一个ScSPM第一作者的总结表格结束吧(又是以偷窃别人图标的方式结束

from local coordinate coding to local constrained linear coding

from local coordinate coding to local constrained linear coding

References:

[1] S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. CVPR2006

[2] Jianchao Yang, Kai Yu, Yihong Gong, and Thomas Huang. Linear spatial pyramid matching using sparse coding for image classification. CVPR2009.

[3] Jinjun Wang, Jianchao Yang, Kai Yu, Fengjun Lv, and Thomas Huang. Locality-constrained linear coding for image classification. CVPR2010

[4] Kai Yu, Tong Zhang, and Yihong Gong. Nonlinear learning using local coordinate coding. NIPS2009.

[5] Kai Yu. CVPR12 Tutorial on Deep Learning: Sparse Coding.

继续阅读