您的位置:首页 > 移动开发 > Objective-C

关于Object Bank的几篇文章解析

2016-02-22 16:14 555 查看
1. Object Bank: A High-Level Image Representation for Scene Classification & Semantic Feature Sparsification.pdf

         这是10年NIPS上的一篇文章,它指出了对于场景分类的一种新的方向。

        文章在Abstract就提出了,尽管图片low-level的特征在场景分类以及物体识别中有着比较好的应用。但是它的特征是基于像素或是图片的某个部分区域的。这导致了其只含有很少量的semantic meanings。对于更高层次的视觉任务,这种low-level的特征就不是很好了。所以这篇文章就提出了Object Bank这个工作,其主要思想就是“an image is represented
as a scale-invariant response map of a large number of pre-trained generic object detectors”.大概意思就是说,每一幅图片的特征已经训练好的那些object detectors共同表示的。不论这个图片是属于哪个数据集的,使用的object detector都是一样的。而且如果使用了稀疏算法,Object Bank对于规模较大的场景数据库能够有更有效的表示和更好的可扩展性。

        在这个工作中,所遇到的最重要的问题就是维度灾难。因为Object Bank所提取出来的特征的维度通常都是很大的。但对于一般的数据集来说,一个类可能只有几十个或是几百个实例以供测试。所以我们需要“structural risk minimization via appropriate regularization of the predictive model is essential.”

        其实可以将Object Bank视作“generalized object convolution”。Object Bank中使用了两种detector作为object detector。一种是“the latent SVM object detector”,用它来识别blobby objects。另一种是“texture classifier”,用来识别texture- and
material- based object。

        Object Bank在12个detection scales上使用了200个object detector,有3个spatial pyramid level(L=0,1,2)。这样就产生了No.Objects x No.scales x (1^2+2^2+4^2)个grid。对于每一个object中的每个grid,计算它的maximum response。对于每一个grid就产生了长度为No.objects的特征向量。将这些特征向量串联起来就得到了Object
Bank对于一个图像的表示。

        这篇文章中对于object detector的介绍与上一篇博客中提到的那一篇文章中的并不一样,具体的细节还需要通过看代码来明确。这篇文章的代码可以在网上搜到。具体过程可以在本篇文章的Appendix中找到。

        既然一幅图片的特征是由Object Bank中的object detector所产生的,那么使用多少个object detector比较合适呢?理论上应该是越多越好,这样的话产生的特征中能够包含更多的信息。但实际上,在一个nature image中,每一个object的重要性并不是一样的。我们能够使用一小部分的物体来识别很大一部分的图片。

        因为OB产生的特征是超完备的,我们希望找到一种压缩方法是没有semantic salency损失的。这样就跟卷积这样一种压缩方法产生了对比。我们称这样一种压缩方法为基于内容的压缩。

        对于一个分类器来说,其目标函数为:

。其中,

表示模型的损失函数。

是一个正则项,用来避免过拟合。损失函数的一般形式为:

。本篇文章所使用的分类器是logistic回归方法,所以

。这里不使用SVM的原因是,因为SVM对structured
regularization难以区分。现在有l1范式,l1/l2混合范式作为正则项来学习到一个有效且又具有稀疏性的参数



        对于正则项的选择有3种方法:

        1)l1范数,

。这样处理的话其实对参数的每一维度是不加任何区别的,也不能将一些相似的特征组合起来。

        2)l1/l2范数,

,其中

是第j个group,这个是按object来分组的。使用这样的正则项就是为了使同属一个组里的那些参数是稀疏的。这样稀疏性就扩展到了object的层次上。这样做就是为了更好的实现基于内容的压缩。

        3)l1+l1/l2范数,

。上述方法虽然实现了组内的稀疏,但却没有实现组间的稀疏。因为在一个图片内,并不是所有的物体都会被包含在内。

2. Unsupervised and Transfer Learning under Uncertainty: from Object Detections to Scene Categorization.pdf

这篇文章主要是借助了“Object Bank: A High-Level Image Representation for Scene Classification & Semantic Feature Sparsification”这篇文章所提出的Object Bank的工作。Object Bank的主要思想就是提取出一张图片中尽可能多的物体的信息,将其组合起来,使其有助于场景的分类。而本篇文章的工作主要就是将Object
Bank所提取出的特征利用PCA和Contractive Auto-Encoder(CAE)进行再一次的组合,使其达到更好的效果。文章标题中所提及的迁移学习的概念则是:将从一个环境中学习到的知识用来帮助新环境中的学习任务,而且数据是服从不同分布的。

        对于一些复杂场景的识别问题来说,基于属性的方法被证明是一种比较有效的方法。这里的属性指的就是场景中的物体。这种方法的主要思想就是通过组合low-level的特征来得到对于一个场景来说high-level的表示。本文所使用的关于物体识别的特征是由177个object detector所产生的,直接使用的话会产生两个问题:(1)维度灾难的问题,177个object detector产生的特征维数是44604,这个特征向量太过于庞大,本文使用了PCA的方法对其进行降维。(2)每一个object
detector的正确率其实不高,最多只有30%。所以产生的特征其实并不是特别好。所以文章使用了CAE对原有的特征进行进一步的组合,以产生更优的结果,同时也能起到降维的效果。

        对于每一个object detector都有两个root filter,每一个表示物体的不同角度,共有177x2=354个part-based filters。对于每一个filter,在6个不同的scale上被卷积,the max-response among 1+4+16=21 positions is kept, response map的维度为21x6=126,共有177x2x126=44604维。

        PCA的部分就直接略过了吧,网上资料也很多。这篇文章在这里提到了一个知识点我觉得还是挺好的:“a linear auto-encoder with k hidden units, trained to minimize squared reconstruction error, will learn projection directions that span the same
subspace as a k component PCA.”水平不够,就不翻译成中文了。

        接下来就来讨论下Contractive Auto—Encoders(CAE),这本质上也是一种自编码器,只不过是在目标函数中加了一项,目标函数的具体形式为:

,其中h(x)表示的是自编码器的隐层,g(h(x))就表示的是对输入的重构。添加的一项就是h(x)的雅可比矩阵每一项平方的和。模型能够通过添加的这一惩罚项学习到图片局部的变化的方向。乍一看,其实模型并不复杂,添加的这一项也比较简单,但是却能够达到不错的学习效果。

        特征在由object bank输出,再输入到CAE中,还是经过了一些处理的。第一类处理方法就是使用池化的方法。每一个object detector的输出是252维的,通过池化将其降低到1维,这样池化过程之后就是177维的特征。这里的池化方法还是有两种:平均池化和最大池化。另一类的处理方法就是PCA,这里又有分成了3中方法。第一种是whole-PCA方法,它是将object bank的输出直接使用PCA进行降维,降维之后的结果是1300维。第二种是pose-PCA方法,每一个object
detector的输出是252维,通过PCA降维到15维。第三种是object-PCA方法,每一个object detector是由2个pose-detector组成的,每一个的输出是126维德,通过PCA降维到5维。之上三种方法通过PCA降维之后的维数是由5-fold交叉验证所得到的。

        对于PCA的输出还需要对其进行进一步的正则化处理:

。这样是为了保证所有输出的特征都在同一个范围之内。

        CAE的使用只是建立在pose-PCA这一方法之上。在试验中,其他PCA方法都只是直接输入到分类器中观察分类结果的质量。模型的结构如图所示:



        文章标题中所提到的transfer learning在试验中的体现是:将整个网络在某一个数据集上训练好之后,并不改变模型的参数,将其用来训练另一个数据集,发现能够取得不错的效果。这只是最简单的迁移学习的一个例子。

        在实验部分,文章关于非监督学习还有一个比较有意思的知识点:“the features learned through unsupervised learning could be improved upon by fine-tuning them through a supervised training stage.”

        实验部分所使用的分类器基本上都是svm,但还使用了一个比较有意思的分类器,使用的是Multi-Layer Perception(MLP)。它是构建在CAE之上的,初始的权值与CAE是相同的。在调参的时候,是将CAE与MLP同时进行调整的。试验中也正是这个模型取得了state-of-the-art效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: