• ScSPM & LLC


    为啥会有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的。

    作者在实验中得出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对应的系数。

    总结

    ScSPM 主要改进了SPM的硬投票的方式

    可以把,ScSPM 和 LLC 理解为特征的编码方式 —— 也就是给出一个新的特征向量,如何用之前聚类出的codebook表示 —— VQ是硬投票(最近邻原则找到距离最近的一个code),ScSPM软投票(由不同code的组合表示且做了稀疏性约束),LLC 软投票(locality 约束)

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

  • 相关阅读:
    ElasticSearch7.3学习(二十三)RestHighLevelClient Java api实现match_all、ids、match、term、multi_match、bool、filter、sort等不同的搜索方式
    ElasticSearch7.3学习(二十六)搜索(Search)参数总结、结果跳跃(bouncing results)问题解析
    ElasticSearch7.3学习(二十五)Doc value、query phase、fetch phase解析
    ElasticSearch7.3学习(二十八)聚合实战之电视案例
    Java开发学习(一)初识Spring及其核心概念
    ElasticSearch7.3学习(二十四)相关度评分机制详解
    ElasticSearch7.3学习(二十七)聚合概念(bucket和metric)及其示例
    JDBCDemo JDBCUtils
    SchedulerHelper 定时任务帮助类,ScheduledThreadPoolExecutor实现
    laydate 根据选择渲染日期控件及"日期格式不合法"
  • 原文地址:https://www.cnblogs.com/sprint1989/p/4004362.html
Copyright © 2020-2023  润新知