最近在看《Beyond Bags of Features: Spatial Pyramid Matching for Recognizing Natural Scene Categories》,做一点研究记录。一般如果之前没有这方面的基础,直接看英文原著非常难懂,因为作者写这篇文章有很多基础性知识。个人的一个经验是先国内搜一下这方面的中文资料,有了基本认识后再对照着原著看。
首先了解一下BOW方法
一 词袋模型(BoW)
在讲LLC之前先提一下BoW,因为后者是基础。BoW网上已经有很多的资料了,所以这里提及BoW的目的只在于与后面讲的内容以及LLC作对比。词袋模型总体上可以分成3步:前两步用于特征提取;第三步分类。
流程如下:
step 1: 计算图像的特征描述符,其实提取的是图像的浅层特征。
step 2: 然后对所有图像中计算的描述符进行聚类(后文中凡是字典学习的地方,都是用所有图像的所有特征在学习。),也叫向量矢量(VQ),机器学习领域通常叫做是字典学习。然后统计每个簇中的特征数量(计算直方图),每个聚类中心就是直方图中的一个bin,后面也叫字典中的一个原子。这一步也是提取图像的深层信息。
step 3: 使用分类器分类。
但是BoW有一个问题:因为全图的所有特征进行直方图计算,所以原图像新的表示(特征)失去了空间信息。保留图像的空间信息就是后面所讲内容的出发点。
二 Pyramid Match Kernels(原著3.1节)
原著中主要意思是,假设我们的特征维度d=2,在每一个维度上进行分段,段数为2^l,那么总的bin数量就是2^dl,可以这么理解,第一维总共有2^l段,第二维也有2^l段,排列组合数就是2^l * 2^l=2^2l,如下图,图上方格中的数字就是bin的标号。
原文中的描述是:
这句话的意思是,特征数据集X里,在level l上,分布在第i个bin中的元素数量。
匹配公式:
意思是将层level l中每个bin中,取和
最小值,比求和。
下面的金字塔匹配核摘自网友理解,可以看到应该也是一个意思。
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(原著3.2节)
这段的意思是,我们不在特征空间进行分段,而是在图像尺寸上进行分段,但是特征集X呢,里面使用k-means等聚类方法分为M个类,用Xm来进行表示属于类m的子集,接着
堆Xm,Ym分别计算匹配分,将所有M类求和,就得到总的匹配分了。
这一段是说,既然金字塔匹配核就是一系列直方图交集加权和,能不能把各层和各种特征类型全部统一串联起来做一个总的加权求和,就像下图一样,下方每一个格子都代表相应层和相应特征类型 下的bin,把所有bin全部加权求和,就可以得到(4)一样的结果了。
下面是网友的描述。
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是计算每个柱子上的值(直方图的高度),将这些值合并成向量就是原图新的表示(特征)。
相关参考:
http://blog.youkuaiyun.com/wertsdfg/article/details/50015929
http://blog.youkuaiyun.com/jwh_bupt/article/details/9837555