计算机视觉课程作业 基于词袋模型的图像分类算法

来源:互联网 发布:网络主播经纪公司 编辑:程序博客网 时间:2024/05/02 14:43

1.背景介绍

随着计算机与互联网技术以及数字图像获取技术的快速发展,海量的数字图像出现在互联网上及人们周边的生活中。依靠传统的人工方式对图像进行分类、组织和管理非常耗时耗力,所以希望能够通过计算机对图像中的目标内容进行自动地分析处理,从而将图像数据快速、规范、自动地进行组织、归类和管理。

早期的图像分类主要依赖于文本特征,采用人工方式为图像标注文本,使用的是基于文本的图像分类模式。由于图像标注需要人为地辨识并为其选定关键字,故其分类的效果不是非常理想,且耗时严重。随着计算机技术和数字化图像技术的发展,图像库的规模越来越大,人工标注的方式对图像进行分类已不可能,人们开始逐渐将研究的重点转移到基于图像内容分析的自动分类研究上。

基于内容的图像分类技术不需要进行人工标注的语义信息,而是直接对图像所包含的信息进行处理和分析,利用图像底层视觉特征来进行图像分类。图像分类技术研究是一个集中了机器学习、模式识别、计算机视觉和图像处理等多个研究领域的交叉研究方向。

2.相关基础理论介绍

图像分类是机器视觉中一个重要的问题,其基本概念是,使用计算机自动把图像划分到特定的概念类别中。图像分类问题可以描述为:给定若干个学习好的图像类别,对输入的新图像序列进行处理,并对其做出一个决策,判断一个已知的类别是否出现在数据中。图像分类算法分为训练和测试两个阶段,其基本流程如图1所示。


图1 图像分类算法整体流程图

2.1基于词袋模型的图像分类

词袋模型最初用于文本分类中,然后逐步引入到了图像分类任务中。在文本分类中,文本被视为一些不考虑先后顺序的单词集合。而在图像分类中,图像被视为是一些与位置无关的局部区域的集合,因此这些图像中的局部区域就等同于文本中的单词了。在不同的图像中,局部区域的分布是不同的。因此,可以利用提取的局部区域的分布对图像进行识别。图像分类和文本分类的不同点在于,在文本分类的词袋模型算法中,字典是已存在的,不需要通过学习获得;而在图像分类中,词袋模型算法需要通过监督或非监督的学习来获得视觉词典。

基于词袋模型的图像分类算法一般分为四步:第一步,对图像进行局部特征向量的提取。为了取得很好的分类效果,提取的特征向量需要具备不同程度的不变性,如旋转,缩放,平移等不变性;第二步,利用上一步得到的特征向量集,抽取其中有代表性的向量,作为单词,形成视觉词典;第三步,对图像进行视觉单词的统计,一般判断图像的局部区域和某一单词的相似性是否超过某一阈值。这样即可将图像表示成单词的分布,即完成了图像的表示。第四步,设计并训练分类器,利用图像中单词的分布进行图像分类。

2.2图像SIFT特征提取算法

SIFT算法的核心是将一幅图像用描述子表示,这些特征点具有尺度不变性,就相当于图像本身,但是相对于图像文件本身,在计算机中处理起来方便的多了。详细的SIFT实现过程分为如下四个步骤:

1、检测尺度空间的极值点;

2、抽取稳定的关键点;

3、为每个关键点指定一个或者多个方向;

4、生成特征点描述子。

2.2.1 图像的尺度空间表示

尺度空间理论来源于计算机视觉研究领域,其理论主要用于引入多尺度概念来表示图像,并模拟图像数据的多尺度特征。通常情况下,在图像空间的某一尺度下很难检测到另一尺度下的特征,引入多尺度图像技术可以高效的获取图像特征。

经过Koendetink等人的验证,高斯卷积核是实现尺度变化的唯一线性核,一副图像的尺度空间可以定义为:

               (1)

其中是尺度高斯可变高斯函数,,(x,y)是空间坐标,也是尺度坐标;的大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。表示图像本身。

为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。高斯差分尺度空间是利用不同尺度的高斯差分核与图像卷积生成。

   (2)

由此,两个不同尺度高斯核进行差分操作可以构造出DoG算子,该算子计算简单,是LoG(Laplacian-of-Gaussian)算子在归一化后的近似,能够保持较好的稳健性。

2.2.2 金字塔构建

此基础上,我们通过构建图像金字塔来对图像进行多尺度表达。如下图所示:图像金字塔共O组,每组有S层,通过上一组的图像进行降采样可以得到下一组的图像。对于一幅图像I,建立其在不同尺度(scale)的图像,也称作子八度(octave),这是为了尺度不变性(scale-invariant),也就是在任何尺度都能够有对应的特征点,第一个子八度的尺度为原图大小,后面每个octave为上一个octave降采样的结果,即原图的1/4(长宽分别减半),构成下一个子八度(高一层金字塔),如图2示例。


图2 构建高斯金字塔示意图

2.2.3 检测DOG尺度空间极值点

为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图3所示,中间的检测点和它在同一尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。


图3 DoG极值点示意图

2.2.4关键点方向分配

确定了每幅图中的特征点,为每个特征点计算一个方向,依照这个方向做进一步的计算, 利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。

     (4)

   (5)

公式(4)和公式(5)分别为(x,y)处梯度的模值和方向公式。其中L所用的尺度为每个关键点各自所在的尺度。至此,图像的关键点已经检测完毕,每个关键点有三个信息:位置、所处尺度和方向,由此可以确定一个SIFT特征区域。

梯度直方图的范围是0~360度,其中每10度一个柱,总共36个柱。在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。我们采用每45度一个柱,总共8个柱。Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。在直方图中,值最大的则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向,若存在值大于主方向值的80%,则将其作为辅助方向。

图 4 关键点主方向示意图

2.2.5关键点描述子的生成

首先将坐标轴旋转为关键点的方向,以确保旋转不变性。以关键点为中心取8×8的窗口,如图2-5所示。

图左部分的中央为当前关键点的位置,每个小格代表关键点邻域所在尺度空间的一个像素,利用公式(4)和公式(5)求得每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,箭头长度代表梯度模值,然后用高斯窗口对其进行加权运算。

图中蓝色的圈代表高斯加权的范围(越靠近关键点的像素梯度方向信息贡献越大)。然后在每4×4的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点,如图右部分示。此图中一个关键点由2×2共4个种子点组成,每个种子点有8个方向向量信息,可以用2*2*8=36维向量描述。这种邻域方向性信息联合的思想增强了算法抗噪声的能力,同时对于含有定位误差的特征匹配也提供了较好的容错性。

图5 关键的描述子示意图

实际计算过程中,为了增强匹配的稳健性,Lowe建议对每个关键点使用4×4共16个种子点来描述,这样对于一个关键点就可以产生128维的数据,即最终形成128维的SIFT特征向量。此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。


图6 关键的描述子示意图

 

2.3 KMeans聚类算法

K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。

k个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,J的值没有发生变化,说明算法已经收敛。

(1)从 n个数据对象任意选择 k 个对象作为初始聚类中心;

(2)根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;

(3) 重新计算每个(有变化)聚类的均值(中心对象);

(4)循环(2)到(3)直到每个聚类不再发生变化为止。

K-means算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。

首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数。

2.4 SVM支持向量机分类器算法

SVM的主要思想可以概括为两点:
(1) 它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算

法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;

(2) 它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得

到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。

支持向量机的目标就是要根据结构风险最小化原理,构造一个目标函数将两类模式尽可能地区分开来,通常分为两类情况来讨论,线性可分和线性不可分。

3.实验方法与内容

   为更好的理解与分析图像分类的相关算法,在参考了相关论文的实验方法下进行了一系列的实验。实验利用OpenCV,LibSVM等开源库在Windows平台下完成。具体实验步骤如下:

(1)对图像训练集进行Sift特征的提取,提取的特征集合作为图像训练集的图像特征集。

(2)利用KMeans算法对图像特征集进行聚类分析,所得到聚类中心点即构成了整个图像集的视觉词典。

(3)对图像进行特征词频的统计。通过判断特征与视觉词典中单词的欧式距离的大小,将特征与视觉单词相似的归为一类并统计视觉单词出现的频率。统计后的词频进行统一的归一化处理,转换为[0,1]之间的归一化数据。

(4)利用SVM分类器,结合图像类别标签与词频归一化数据,进行分类器的训练。

(5)对任意给定的图片进行图像类别的分类测试。

在整个实验过程中,有一些重要的参数直接影响到了最后分类的效果。故对这方面进行了大量的实验分析。

(1)KMeans聚类个数K的确定。聚类个数K的值决定了图像词频向量的维数,从而对后期的分类效果造成了直接的影响。词频向量维数过小,无法十分清晰明确的表示各个不同类别图像之间的区别。但是若维数过大,必然会导致数据的大量的冗余,这样会严重的影响分类的效率,造成“维数灾难”。一般情况下,K的取值采用经验分析得到,在不同的情况取值也不同。

(2)SVM支持向量机分类器参数的选取。实验中采用LibSVM开源分类器,其中重要的参数包括核函数的类别,损失函数C值的设定,核函数中gamma函数的设定。常见的核函数包括线性核、多项式核等,不同的核函数得到的效果不同。损失函数C值表示为分类错误的代价,C值过小会导致分类效果差,但是过大的C会导致分类器的泛化严重。

实验过程中,对上述两部分的参数进行的大量实验,从而选取能够最好达到分类效果的参数,适当的参数会决定分类器的效果。最后,实验也通过给定任意类别的图片检验算法的分类效果。

4.实验结果与分析

整个实验的相关算法利用C++在Windows平台下完成,使用OpenCV、LibSVM以及开源的Sift特征提取程序完成。具体的代码详见附件。

实验采用了Caltech 101公用的图像类别数据集。为了方便实验,选取6中不同的类别,包括airplanes、ant、barrel、binocular、bonsai和brain。每类图片选取25张,共150张训练图片。部分训练图像如图7所示:


图7 部分训练图像示例

实验算法的第一步,也是非常重要的一步便是对图像进行Sift特征的提取。Sift特征的提取采用开源的程序,提取后特征并绘制Sift特征图。150张的训练图共提取62056个Sift特征,提取后的特征保存到特征文件中供后续使用。所绘制的Sift特征图如图8所示:


图8 部分Sift特征图示例

从图8可以看出, Sift特征的提取能够很好的提取图像的局部特征,且Sift特征具有尺度不变性、旋转不变性等性质,可以很好的满足分类的需要。

提取图像特征集后,需要利用特征集构建图像的视觉词典。实验中使用KMeans聚类的方法进行词典构建,聚类中心点即为视觉词典。由于K值对于后期分类效果的影响,进行了大量的实验讨论K值对于分类效果的影响。从实验得到的K值与最优分类准确率关系见图9。从图中可以看出,最优的分类准确率达到71%,基本上达到预期的效果。但这里仅仅利用Sift单个特征,后期可以考虑加入其他特征,譬如颜色、纹理等。针对于实验结果,为了达到最好的分类结果,选取K=330进行分类。


图9 KMeans聚类个数与最优分类准确率关系图


图10 SVM分类器参数与图像分类准确率关系图

最后在对分类器训练时,分类器的参数也影响分类效果。在LibSVM开源分类器中,损失函数c与核函数参数g对分类效果有重要的影响。实验中选取K=330的情况下,使用grid_search的方法对c与g的取值进行穷举实验,从而选取最优的参数。从图10SVM分类器参数与分类准确率关系图中可以看出,在log2(c)=4,log2(g)=2.0时,分类达到最大准确率为71%。

如何判断图像分类算法的好坏,重点还是看其对未知类别的图像分类效果。在经过以上的参数调试实验得到了最优的参数后,利用Caltech 101图像数据集在以上实验的六个类别中随机共选取27张图片进行分类效果测试。具体测试实验结果见表1。

表1 图像分类测试实验结果表



5.总结从表1中可以看出,整个分类准确率为78%,分类效果基本属于较为正常的范围。但是本身使用的图像数与图像类别比较少,后期可以进行大量图像的实验测试。

图像分类是指使用计算机自动把图像划分到特定的概念类别中。图像分类可以描述为给定若干个学习好的图像类别,对输入的新图像序列进行处理,并对其做出一个决策,判断一个已知的类别是否出现在数据中。

本组首先对图像训练集进行Sift特征的提取,然后利用KMeans算法对图像特征集进行聚类分析,接着对图像进行特征词频的统计,最后利用SVM分类器,结合图像类别标签与词频归一化数据,进行分类器的训练。实验过程中,对上述两部分的参数进行的大量实验,从而选取能够最好达到分类效果的参数,适当的参数会决定分类器的效果。最后,实验也通过测试图片集检验算法的分类效果。总体来看,利用Sift特征与词袋模型能够用于图像分类,其效果也还有待改进。毕竟Sift特征也有一定的局限性,可以结合图像颜色直方图等其他图像特征进行更加有效的分类。

1 0
原创粉丝点击