总结SPM,ScSPM,LLC
2015-11-24 17:22
453 查看
博客开了很久,一直没有写东西。刚好前两天在实验室做了一个关于图像分类的报告,所以拿过来试试水。但CSDN的编辑器用起来不是很顺手,所以为了方便,博客中用了很多图片。
![](http://img.blog.csdn.net/20151125145934831?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
正如于凯所说,特征定义了整个分类问题性能的上限,选分类器只是逼近这个上限的一种途径。
因此接下来讲的内容主要针对特征提取。
流程如下:
![](http://img.blog.csdn.net/20151125152157957?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
step 1: 计算图像的特征描述符,其实提取的是图像的浅层特征。
step 2: 然后对所有图像中计算的描述符进行聚类(后文中凡是字典学习的地方,都是用所有图像的所有特征在学习。),也叫向量矢量(VQ),机器学习领域通常叫做是字典学习。然后统计每个簇中的特征数量(计算直方图),每个聚类中心就是直方图中的一个bin,后面也叫字典中的一个原子。这一步也是提取图像的深层信息。
step 3: 使用分类器分类。
但是BoW有一个问题:因为全图的所有特征进行直方图计算,所以原图像新的表示(特征)失去了空间信息。保留图像的空间信息就是后面所讲内容的出发点。
![](http://img.blog.csdn.net/20151125152218043?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那么问题来了,图像怎么分块,也就是每块的大小是怎么定的。如果块太小,处理旋转问题效果不好。如果太大,跟BoW一样失去大部分的空间信息。要解决这个问题最直观的做法就是使用多种分块方式,然后在合并。的确SPM就是这么做的。
第一:分层。层数从0层开始,最顶层L。每一层代表一种粒度,如果体现在一个线段上,就是将这个线段分为多少段,如2段,3段等。从0到L,粒度越来越细。第
![](http://img.blog.csdn.net/20151125181138380?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层上,每个特征的每一维被分为个
![](http://img.blog.csdn.net/20151125181048778?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
区间。这样特征空间被分为个
![](http://img.blog.csdn.net/20151125181122314?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
区间。这里可以借助下面这个图来理解:
![](http://img.blog.csdn.net/20151125180821804?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上图处于金字塔的第二层,因为特征的每个维度被分为4个区间。一个箭头是一种组合,这种组合的数量就是个。其实每种组合就是特征空间中被划分出来的一个区间。如果两个特征落到同一个区间上(上图中的箭头),认为这两个特征是匹配的。
第二:计算匹配结果。先看一个公式:
![](http://img.blog.csdn.net/20151125152229967?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个公式是用来计算特征集合X和Y在第l层上的匹配结果,即
![](http://img.blog.csdn.net/20151125152236142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,而
![](http://img.blog.csdn.net/20151125152241458?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
和
![](http://img.blog.csdn.net/20151125152449384?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
分别表示X,Y中落入第i个区间(上图中的箭头)的特征数,展示一个例子(这个例子中用Z替换X):
![](http://img.blog.csdn.net/20151125152457020?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最终的匹配结果为:
![](http://img.blog.csdn.net/20151125152502266?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
由于第
![](http://img.blog.csdn.net/20151125152507451?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层是对第
![](http://img.blog.csdn.net/20151125152513201?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层中的每个区间进行四分,所以第
![](http://img.blog.csdn.net/20151125152513201?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层匹配结果一定包含第
![](http://img.blog.csdn.net/20151125152507451?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层的匹配结果,也就是粗粒度的匹配结果一定包括细粒度的匹配结果,因此在计算最终的相似性时去掉重复的部分即
![](http://img.blog.csdn.net/20151125182316865?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
。因此就可以得计算每层匹配结果对最终匹配结果的权重,即第
![](http://img.blog.csdn.net/20151125152513201?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
层的权重为
![](http://img.blog.csdn.net/20151125152722555?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,也就是说细粒度的匹配结果比粗粒度匹配结果更可靠。以上就是金字塔匹配核的主要内容。
![](http://img.blog.csdn.net/20151125152753770?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图底部的数字表示每一层的权重,从金字塔匹配中可以知道第0层和第1层的权重是相等的。这样就可以计算SPM产生的总特征数:
![](http://img.blog.csdn.net/20151125152801647?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
M表示聚类中心(直方图中bin),注意M是在分层之前就已经确定了的,所以对于每层中每一块的直方图结构都是一样的。L=0是就是BoW。将SPM用CNN的形式展示:
![](http://img.blog.csdn.net/20151125152812644?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上面这个模型和CNN除了层数不一样外,还有一个地方也不一样,就是第一层coding+pooling中(也就是SIFT)的filter是设计的而,CNN中每个filter都是通过样本学出来的。上图中VQ coding就是字典学习,第二个pooling采用的是平均pooling,具体的形式放在后面跟ScSPM一起做比较。字典学习是学习直方图的柱子,pooling是计算每个柱子上的值(直方图的高度),将这些值合并成向量就是原图新的表示(特征)。
一、用稀疏编码SC来替换K-means,这是字典学习的方式换了(跟K-means和K-SVD的关系类似),字典中的每个原子就是直方图中一个柱子bin。
SPM的字典学习:
![](http://img.blog.csdn.net/20151125152934190?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其实就是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的字典学习:
![](http://img.blog.csdn.net/20151125152941457?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
就是用稀释编码代替K-means,原因是多个(相比一个是多个,相比所有样本是少量)样本线性表示比单个表示要更加鲁棒,表示误差更小。
ScSPM的Pooling: 选取矩阵C每一列的最大值,也就是Maxpooling。现在学术界普遍认为max pooling 比averaging pooling更加鲁棒。
另外ScSPM输出的是非线性特征,所以只需要线性分类器就可以获得很好的效果;而SPM输出的线性特征,需要采用非线性的分类器。线性分类器无论是训练还是测试速度都快于非线性分类器。
LLC的目标函数:
![](http://img.blog.csdn.net/20151125152950123?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151125152958069?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
文章给出的结果:
![](http://img.blog.csdn.net/20151125153005716?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151125153013033?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个结果似乎有问题,因此本人重新推导了一遍,推导过程如下。
一、将目标函数转化为非约束的目标函数:
![](http://img.blog.csdn.net/20151125153020425?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二、去掉二范数:
![](http://img.blog.csdn.net/20151125153027240?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151125153034511?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、上式对ci求导,结果如下:
![](http://img.blog.csdn.net/20151125153040530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、合并上面两个式子:
![](http://img.blog.csdn.net/20151125153104661?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
五、调整成文中结果的形式:
![](http://img.blog.csdn.net/20151125153111508?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
[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.
引言
关于图像的工作门槛一直比较高,因为图像中的信息太丰富,展现形式也很多,噪声也丰富,所以很难提取有效的特征,这就导致后面的分类任务变得非常麻烦。正如下图所示:正如于凯所说,特征定义了整个分类问题性能的上限,选分类器只是逼近这个上限的一种途径。
因此接下来讲的内容主要针对特征提取。
一、词袋模型(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.
相关文章推荐
- 下载安装开发者版本LeapMotion驱动及SDK
- PMAC上位机编程基础1---编程环境配置
- PMAC上位机编程基础1---编程环境配置
- PMAC上位机编程基础1---编程环境配置
- 推进存储池化!浪潮推出业界首款基于SAS协议的交换式存储池(基于PMC技术)
- CCBPM 常用API接口说明
- CCBPM 常用API接口说明
- 产品经理为什么要认真对待测试工作
- 目标检测之LatentSVM和可变形部件模型(DPM:Deformable Part Model)
- 软件包管理 rpm yum apt-get dpkg
- DPM(Defomable Parts Model) 源码分析-训练(三)
- DPM(Defomable Parts Model) 源码分析-检测(二)
- DPM(Deformable Parts Model)--原理(一)
- spmi_bus
- RPM深入-系统安全方面的应用
- FtpManager类
- 【解决方案】MySQL-5.7.9 服务无法启动-“NET HELPMSG 3534”
- CCBPM对业务型SaaS客服领域的支持
- 如何使用yum来下载RPM包而不进行安装
- Ubuntu 下安装 apt-get install npm 失败的解决方案