您的位置:首页 > 产品设计 > 产品经理

总结SPM,ScSPM,LLC

2015-11-24 17:22 453 查看
博客开了很久,一直没有写东西。刚好前两天在实验室做了一个关于图像分类的报告,所以拿过来试试水。但CSDN的编辑器用起来不是很顺手,所以为了方便,博客中用了很多图片。

引言

关于图像的工作门槛一直比较高,因为图像中的信息太丰富,展现形式也很多,噪声也丰富,所以很难提取有效的特征,这就导致后面的分类任务变得非常麻烦。正如下图所示:



正如于凯所说,特征定义了整个分类问题性能的上限,选分类器只是逼近这个上限的一种途径

因此接下来讲的内容主要针对特征提取。

一、词袋模型(BoW)

在讲LLC之前先提一下BoW,因为后者是基础。BoW网上已经有很多的资料了,所以这里提及BoW的目的只在于与后面讲的内容以及LLC作对比。词袋模型总体上可以分成3步:前两步用于特征提取;第三步分类。

流程如下:



step 1: 计算图像的特征描述符,其实提取的是图像的浅层特征

step 2: 然后对所有图像中计算的描述符进行聚类(后文中凡是字典学习的地方,都是用所有图像的所有特征在学习。),也叫向量矢量(VQ),机器学习领域通常叫做是字典学习。然后统计每个簇中的特征数量(计算直方图),每个聚类中心就是直方图中的一个bin,后面也叫字典中的一个原子。这一步也是提取图像的深层信息

step 3: 使用分类器分类。

但是BoW有一个问题:因为全图的所有特征进行直方图计算,所以原图像新的表示(特征)失去了空间信息。保留图像的空间信息就是后面所讲内容的出发点。

二、Spatial PyramidMatching(SPM)(06'CVPR)[1]

这个工作利用金字塔匹配核(Spatial Pyramid Matching)[2] 保留图像的空间信息。简单来说,也就是将图像分块,每块采用BoW,这样左上角的特征就不会跑到右下角的直方图中。如下图:



那么问题来了,图像怎么分块,也就是每块的大小是怎么定的。如果块太小,处理旋转问题效果不好。如果太大,跟BoW一样失去大部分的空间信息。要解决这个问题最直观的做法就是使用多种分块方式,然后在合并。的确SPM就是这么做的。

Spatial Pyramid Matching

先讲一下金字塔匹配核,这个概念是在05’ ICCV的paper中提出来的。它原本是用来计算两个特征集合X和Y的相似性(可以将X和Y理解成两幅图像的特征集),X和Y中的每个特征是d维(如:SIFT是128维的)。匹配过程主要分为两步:

第一:分层。层数从0层开始,最顶层L。每一层代表一种粒度,如果体现在一个线段上,就是将这个线段分为多少段,如2段,3段等。从0到L,粒度越来越细。第

层上,每个特征的每一维被分为个

区间。这样特征空间被分为个

区间。这里可以借助下面这个图来理解:



上图处于金字塔的第二层,因为特征的每个维度被分为4个区间。一个箭头是一种组合,这种组合的数量就是个。其实每种组合就是特征空间中被划分出来的一个区间。如果两个特征落到同一个区间上(上图中的箭头),认为这两个特征是匹配的。

第二:计算匹配结果。先看一个公式:



这个公式是用来计算特征集合X和Y在第l层上的匹配结果,即

,而



分别表示X,Y中落入第i个区间(上图中的箭头)的特征数,展示一个例子(这个例子中用Z替换X):



最终的匹配结果为:



由于第

层是对第

层中的每个区间进行四分,所以第

层匹配结果一定包含第

层的匹配结果,也就是粗粒度的匹配结果一定包括细粒度的匹配结果,因此在计算最终的相似性时去掉重复的部分即

。因此就可以得计算每层匹配结果对最终匹配结果的权重,即第

层的权重为

,也就是说细粒度的匹配结果比粗粒度匹配结果更可靠。以上就是金字塔匹配核的主要内容。

Spatial Matching Scheme

上面一小节讲诉的是金字塔匹配核,这一小节才是SPM这篇文章自己的东西。SPM借鉴了金字塔匹配的思想,只是这里不再是对图像特征的每一维进行划分(实际上SPM对特征空间的划分还是采用的K-means,这是ScSPM和LLC改进的地方),而是对特征在图像中的坐标进行划分,划分方式跟上面一样。一个例子:



图底部的数字表示每一层的权重,从金字塔匹配中可以知道第0层和第1层的权重是相等的。这样就可以计算SPM产生的总特征数:



M表示聚类中心(直方图中bin),注意M是在分层之前就已经确定了的,所以对于每层中每一块的直方图结构都是一样的。L=0是就是BoW。将SPM用CNN的形式展示:



上面这个模型和CNN除了层数不一样外,还有一个地方也不一样,就是第一层coding+pooling中(也就是SIFT)的filter是设计的而,CNN中每个filter都是通过样本学出来的。上图中VQ coding就是字典学习,第二个pooling采用的是平均pooling,具体的形式放在后面跟ScSPM一起做比较。字典学习是学习直方图的柱子,pooling是计算每个柱子上的值(直方图的高度),将这些值合并成向量就是原图新的表示(特征)。

三、ScSPM

ScSPM[3]相比SPM有两个地方做改进:

一、用稀疏编码SC来替换K-means,这是字典学习的方式换了(跟K-means和K-SVD的关系类似),字典中的每个原子就是直方图中一个柱子bin

SPM的字典学习:



其实就是K-means,表示特征集合中的第i个特征,B表示字典,这里就是K-means的聚类中心,ci表示第i个特征的编码。如果xi属于第1类,ci=[1,0,0,0,...];

SPM的pooling:

SPM的输出结果是一幅图像的直方图。直方图就是做加法,将该幅图像的所有点的编码排成矩阵C,C的第i行就是ci,C的每一列就是字典中的原子,或者说是最终直方图中的每一个柱子,所以最后将C的每一列求和,然后归一化获得的向量就是该幅图的特征,最后用于分类,所以是Averaging pooling。

ScSPM的字典学习:



就是用稀释编码代替K-means,原因是多个(相比一个是多个,相比所有样本是少量)样本线性表示比单个表示要更加鲁棒,表示误差更小。

ScSPM的Pooling: 选取矩阵C每一列的最大值,也就是Maxpooling。现在学术界普遍认为max pooling 比averaging pooling更加鲁棒

另外ScSPM输出的是非线性特征,所以只需要线性分类器就可以获得很好的效果;而SPM输出的线性特征,需要采用非线性的分类器。线性分类器无论是训练还是测试速度都快于非线性分类器。

四、LLC

LLC[4]认为局部性比稀疏性更合理,有更小的重构误差(但我并不认为会比稀疏编码重构误差跟小);另外,局部性有解析解(这在搞科研时是可遇不可求的),更新字典时速度更快,一个样本只需要更新它周围的几个原子(稀疏编码不具备这功能)。我认为第二个优势是最具有吸引力的。

LLC的目标函数:





文章给出的结果:





这个结果似乎有问题,因此本人重新推导了一遍,推导过程如下。

一、将目标函数转化为非约束的目标函数:



二、去掉二范数:





三、上式对ci求导,结果如下:



四、合并上面两个式子:



五、调整成文中结果的形式:



[1]. K. Grauman and T. Darrell. Pyramidmatch kernels: Discriminative classification with sets of image features. InProc. ICCV, 2005.

[2]. S. Lazebnik, C. Schmid, and J. Ponce.Beyond bags of features: Spatial pyramid matching for recognizing natural scenecategories. InCVPR, 2006.

[3]. J. Yang, K. Yu, Y. Gong, and T. Huang.Linear spatial pyramid matching using sparse coding for image classification.Proc. of CVPR’09, 2009.

[4].
Wang, Jinjun, et al. "Locality-constrained linear coding for image classification." Computer Vision and Pattern Recognition (CVPR), 2010 IEEE
Conference on. IEEE, 2010.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: