一种动态自适应二元层次词汇树图像检索方法
技术领域
本发明涉及图像检索领域,特别是基于内容的图像检索。具体为一种动态自适应二元层次词汇树的数据结构。
背景技术
近年来,卷积神经网络(CNN)在模式识别和计算机视觉方面取得了巨大的成功,在诸如图像分类,物体检测,实例分割等。尽管CNN取得了成功,但它仍然存在一些严重的问题。一个例子是对抗性样本的存在,当我们添加小噪声或者对初始样本做一些小的改变时,CNN将以高置信度对这些样本进行不同的预测,尽管从视觉上我们很难发现任何有意义的改变图片。另一个例子是CNN的拒绝能力,当将一个样本从一个未知的类别提供给CNN时,它仍然会以高置信度将样本分配给一个已知的类别(应该创建并分配到一个新的类别中)。这两种现象表明CNN并不健壮,虽然它可以在某些特定数据集上达到人类级别甚至更高的准确性,但在现实的复杂场景下,其性能会显著退化。这极大地限制了CNN在现实世界中的应用。这些问题的主要原因包括两个方面:第一,CNN是一个纯粹的区分模型,它本质上是学习“整个”特征空间的一个划分,因此,未知类中的样本仍然可以预测分区下的某些特定区域,CNN仍然将这些样本视为一些高度信任的已知类别。这就解释了为什么CNN的拒绝能力很差;其次,从表示学习的角度来看,CNN的学习表示是线性可分的,如图1所示,在这种表示下,类与类之间的距离有时甚至小于类内距离,这大大降低了CNN在真实复杂环境中的鲁棒性。
目前的图像检索中基于SIFT描述子的相关算法也出现了同样的问题,Bag-of-words model(BoW model)最早出现在NLP和IR领域。该模型忽略掉文本的语法和语序,用一组无序的单词(words)来表达一段文字或一个文档。近年来,BoW模型被广泛应用于计算机视觉中。与应用于文本的BoW类比。图像的特征(feature)被当作单词(Word)。
Fei-fei Li在中提出了用BoW模型表达图像的方法。他们认为,图像可以类比为文档(document),图像中的单词(words)可以定义为一个图像块(image patch)的特征向量。那么图像的BoW模型即是“图像中所有图像块的特征向量得到的直方图”。建立BoW模型主要分为如下几个步骤:
1.特征提取
假设有N张图像,第i张图像图像可由ni个image patch组成,也即可以由ni个特征向量表达。则总共能得到sum(ni)个特征向量(即单词)。
特征向量可以根据特征问题自行设计,常用特征有Colorhistogram、SIFT、LBP等。
2.生成字典/码本(codebook)
对上一步得到的特征向量进行聚类(可以使用K-means等聚类方法),得到K个聚类中心,用聚类中心构建码本。
3.根据码本生成直方图
对每张图片,通过最近邻算法计算该图片的每个“单词”应该属于codebook中的“哪一类”单词,从而得到该图片对应于该码本的BoW表示。
使用上述的方法,都需要生成codebook,当出现一个新的样本时,只有重新构建新的codebook才能够使用新的样本,这与CNN的问题的性质是一样的。
因此自适应的可增量学习的图像检索算法应运而生。
发明内容
本发明的目的是为了克服现有技术中的不足,针对需要动态增量学习的应用场景,每次只需训练未学习过的内容,而不必重新对整个训练样本进行训练。提供一种动态自适应二元层次词汇树图像检索方法,本发明主要结构为高维空间平衡二叉树,其中借鉴层次化聚类,词汇树,随机投影森林以及近似最近邻查找法来构建以及维护二叉树平衡。结合倒排索引系统,改进TF-IDF算法,用视觉词汇的相似性距离算法求得的数值取代TF的简单累加,以提高检索时的效率和准确率。
本发明的目的是通过以下技术方案实现的:
一种动态自适应二元层次词汇树图像检索方法,包括以下步骤:
(1)特征提取,对用户新增加的图像进行特征提取,提取后得到描述子集合,描述子集合为N×M维矩阵,N为描述子个数,M为描述子的维度,看作是N个M维的特征向量;
(2)构建二元层次平衡词汇树,提取出的N×M维矩阵,看作是N个M维空间的点集;
(3)每次选择空间中的两个质心作为分割点,以垂直于过两点的直线的超平面来分割整个空间,分割后的子空间也执行同样的操作,直到全部的点分割完毕;
(4)每一个子空间通过子空间的质心描述;将提取的N个描述子分散在一个深度为log2N+1的二叉树的节点上;
(5)对待检索的图片进行特征提取,得到描述子集合P×M,表示有P个特征向量;
(6)将P个特征向量依次遍历二元层次平衡词汇树并检索;从根结点的左右子节点开始,如果待检索特征向量离左子节点距离更近,在左子树检索,否则,在右子树检索;
(7)根据倒排索引,每个结点会有与之对应的图片ID,图片ID是非空且唯一的,将P个特征向量通过检索遍历得到的叶子节点对应的图片ID集合取交集,就得到最终要检索的图片ID。
与现有技术相比,本发明的技术方案所带来的有益效果是:
1.对于深度学习以及目前主流的词袋模型检索算法,只要对数据库中的图片进行增加删除操作就需要重新训练或者构建一次模型,这在遇到用户不断上传图片的应用场景中显然是无法落地的。本发明通过使用平衡二叉树的数据结构动态调整词汇树结构以解决此问题,对数据库中的图片增加或删除时,只需要删除词汇树对应节点,然后再根据Size-Balance-Tree规则执行旋转节点操作直至二叉树达到平衡即可,避免了传统方法和深度学习方法重新训练模型的弊端,提高了检索系统的鲁棒性,同时极大地减轻了后台数据库的负担。
2.本发明将提取的特征向量分散在一个深度为log2N+1的二叉树的节点上。检索图片时,可以通过对数时间的复杂度(log2N+1次)找到对应的质心,而不是使用以往O(N)时间复杂度的暴力检索,提高了图片检索速度。
3.以该图像中提取的特征向量与所有质心相似度的最大值代替原来的词频统计。克服稀疏词向量造成的信息丢失,从而提升准确度与效率。
附图说明
图1是MNIST上的传统CNN模型学习的特征表示。不同的灰度程度代表不同的类。结果表明,类间变化甚至比类内变化小。
图2为二元层次聚类分割超平面算法结果图。
图3为二元层次平衡词汇树构建流程示意图。
图4为动态自适应结构调整示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的目的是针对以图像搜索图片的检索模型,为应对不断上传图片的应用场景,克服词袋模型方法以及深度学习方法无法动态增量学习的弊端。主要流程如图3、图4所示。
为了方便理解,首先介绍一些相关技术及相应概念。
表1二元层次聚类分割超平面算法流程
由上述伪代码以及图2可以看出,第一步,随机选择两个点;第二步,以这两个节点为初始中心节点,执行聚类数为2的K-means过程,第三步产生收敛后两个聚类中心点。这两个聚类中心点之间连一条线段(灰色短线),建立一条垂直于这条灰线,并且通过灰线中心点的线(黑色粗线)。这条黑色粗线把数据空间分成两部分。在多维空间的话,这条黑色粗线可以看成等距垂直超平面。以此类推,最终高维空间中的点分散在一个深度为log2n+1(n为节点个数)的二叉树的节点上。
Size Balanced Tree(简称SBT)是一种平衡二叉搜索树,它通过子树的大小来维持平衡性质。它支持很多动态操作,并且都能够在对数的时间复杂度内完成。相比较红黑树和自平衡二叉搜索树实现简单,高效易用。
TF-IDF(term frequency-inverse document frequency)是一种统计方法,用以评估某一字词对于一个文件集或一个语料库的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
这里我们将其类比到图像领域,如果说文档对应一幅图片的话,那么文档内的词就是图像块的特征向量,也就是上述的M维的描述子。一篇文档有若干个词构成,同样的,一幅图像由若干个图像块构成,图像块对应的特征向量即上述的N个M维空间的点集,称之为词空间。通过上述的二元层次聚类将词空间中的点分散在一个完全二叉树中,其中质心就类比为词汇。此时面对一幅待检索图像时,检索其包含哪些词汇,并对包含的词汇的频数加1。
TF定义如下:
式中是
视觉词汇ci在图像j中出现的次数。另一方面,IDF通过全局统计来表明给定视觉词汇(对文档)的贡献。视觉词汇经典的IDF计算公式如下:
式中N是图形数目,ni表示视觉词汇ci出现的图像编号。视觉词汇ci出现在图像j中的TF-IDF值为:
具体实施步骤:
(1)特征提取:对用户新增加的图像进行特征提取,使用方法包括但不限于SIFT特征提取、SURF特征提取、ORB特征提取、BRIEF特征提取、FAST特征提取、AKAZE特征提取、CNN以及深度神经网络提取的图像描述子,提取后得到描述子集合,描述子集合为N×M维矩阵,N为描述子个数,M为描述子的维度,可以看作是N个M维的特征向量。
(2)构建二元层次平衡词汇树:提取出的N×M维矩阵,也可以看作是N个M维空间的点集。每次选择空间中的两个质心作为分割点,以垂直于过两点的直线的超平面来分割整个空间,分割后的子空间也执行同样的操作,直到全部的点分割完毕。每一个子空间通过其质心来描述。对于传统的词袋模型算法,只是单一的对上述得到的点集进行K-means聚类归入K个簇,K-means的优点是容易实现,缺点是在大规模数据集上收敛较慢,并且可能收敛到局部最小,造成该簇没有代表性,而且K值必须提前指定。对于描述子这种高维空间的大规模聚类,粗暴使用K-means会有问题。
而本发明使用二元层次聚类将提取的N个描述子分散在一个深度为log2N+1的二叉树的节点上。同时要求该二叉树遵循Size-Balance-Tree规则使得该二叉树尽可能为一个平衡二叉树。这样构建词汇树时不需要提前指定K值,同时面对大规模数据集收敛较快。当要检索图片时,可以通过对数时间的复杂度(log2N+1次)找到对应的质心,而不是使用0(N)时间复杂度的暴力检索。
(3)检索过程
上面已完成节点索引建立过程。如何进行对一个数据点进行查找相似节点集合呢?检索的过程就是不断看要检索的特征向量(即M维空间中的点)在分割超平面的哪一边。从二叉树索引结构来看,就是从根节点不停的往叶子节点遍历的过程。通过对二叉树每个中间节点上添加的倒排索引和查询数据节点进行相关算法(改进的TF-IDF)来确定二叉树遍历过程是往这个中间节点左孩子节点走还是右孩子节点走。通过以上方式完成查询过程。
(4)二元层次词汇树的动态平衡调整
另外,当要对数据库中的图片增加或删除时,只需要删除相应节点,然后再根据Size-Balance-Tree规则执行旋转节点操作直至二叉树达到平衡即可,避免传统方法和深度学习方法必须重新训练模型的弊端。
(5)为了提高检索时的效率和准确率,还采用了以下算法:
倒排索引(Inverse Index),该算法源于实际应用中需要根据属性值来查找记录。
改进的TF-IDF(Term Frequency-Inverse Document Frequency),由于上述的TF-IDF算法,由于大部分图像都只会用整个词空间中很少一部分的词,因此词向量中有大量的0,也就是说词向量是稀疏的,这样会损失大量信息。因此提出改进,公式如下:
D表示图像i中的描述子,A表示
对应的第i个聚类中心,d代表描述子特征向量,a表示聚类中心对应向量,以该图像中提取的特征向量与所有质心相似度的最大值代替原来的词频统计。也就是说图像中提取出来的特征向量越接近词空间中的质心,其权重越大。使得TF的值更合理,从而提升准确度与召回率,虽然增大了计算量但是对于准确率的提升这些损失是微不足道的。
倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。类比图像,在词汇树中的节点中添加词汇对应的图片id,就可以快速找到包含该特征向量的图片了。
本发明并不限于上文描述的实施方式。以上对具体实施方式的描述旨在描述和说明本发明的技术方案,上述的具体实施方式仅仅是示意性的,并不是限制性的。在不脱离本发明宗旨和权利要求所保护的范围情况下,本领域的普通技术人员在本发明的启示下还可做出很多形式的具体变换,这些均属于本发明的保护范围之内。