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)鼓励编码满足局部性,同时从理论上指出在一些特定的假设下,局部性比稀疏性更加必要,对于一些非线性学习能够获得非常成功的结果。

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


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

 

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


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

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


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


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

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



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

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


    其中,表示数据的协方差矩阵。

    


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




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

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



    值得一提的是,前一篇文章采用的是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云云呢抓狂。这个问题没错,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上的一些图:

图 (1)

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

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

图(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。

图(3)

 

  • 再前言

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

(1)

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

    (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上,而不仅仅是一个。因此,其目标函数变成了:

     (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。为了便于描述,盗用一下论文的图:

图(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的目标函数是:

     (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第一作者的总结表格结束吧(又是以偷窃别人图标的方式结束委屈

 

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.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值