总结SPM,ScSPM,LLC

博客开了很久,一直没有写东西。刚好前两天在实验室做了一个关于图像分类的报告,所以拿过来试试水。但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.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值