面向大规模图像检索的层次语义索引

Hierarchical Semantic Indexing for Large Scale Image Retrieval

目录

摘要

1 介绍 Introduction

2 相关工作 Related Work

3 运用层次结构的检索 Exploiting Hierarchy for Retrieval

3.1 语义相似度的层次编码

 3.2 学习语义属性

 4 高效索引 Efficient Indexing

5 实验 Experiment 

 5.1 数据集和评估标准

5.2 层次检索 

5.3 平面检索

5.4 跨类别泛化

5.5 高效索引

6 结论 Conclusion


摘要

本文讨论的是相似图像检索的问题,特别是在百万到十亿级别的大规模数据集上。核心新贡献一个利用先进的语义层次知识的方法。 当语义标签和与它们相关的层次结构在训练中可用时,相似图像检索会获得显著的改进。一些优势来源于使用额外的信息的能力,我们的实验探索一种特殊的情况——在没有额外提供数据的情况下,新方法的表现也胜过了目前相似度学习领域的最先进方法OASIS。对于规模更大的问题,利用层次关系是最重要的,因为在这些问题中,可扩展性变得至关重要。我们提出的学习方法基本上是可并行的,因此比以前的工作更易于扩展。一个额外的贡献是一种新的散列方案(a hashing scheme),它可以减少检索计算上的开销(对于概率向量上的双线性相似性,可以选择考虑层次结构)。

1 介绍 Introduction

本文探讨的主要问题:给定一个查询图像,在大的图像集中找到与之相似的图像,如下图。

上图是使用层次结构的检索与不考虑层次结构的检索的对比。绿色的条块表示该图像再分类层次结构中的定义与查询用图像的基本相似度(见5.2节)。条块越长表示相似度越高。

结果显示:使用层次关系可以显著地改善检索精确度。包含层次关系随着数据集变大而变得越来越重要。当类别是密集采样的必须进行细粒度区分时,潜在的好处最大。为了处理大规模数据,计算上的性能和可扩展性是在检索中运用层次的关键。

我们的方法论证了如何高效地将定义在图像语义属性上的层次结构与先验的人类知识相结合。例如,给定语义属性像是包含马、狗,或者风车,一个预定义的层次结构可能会让我们知道,一张包含马的图像比起包含风车的图像,与包含一只狗的图像更为相似。根据语义属性来规定层次结构是可行的,但是用低级特征直接来做是很困难的。

当前最先进的相似图像检索技术水平来自大量的,学习用于检索的基本相似性函数的工作上。这些工作的目标是,学习出一个直接从图像的低级特征向量中计算相似度的函数,并且不允许可以编码层次结构的各种方法。改编其中一些策略,使其能够考虑使用层次结构是可能的,但是需要改变技术,并且改善方法的可扩展性和并行性并不是必需的。

我们的方法走了一条不同的路,学习去识别图像的语义属性,然后用一个预定义的比较函数——基于一个已知的层次结构,来生成检索的相似度分数。学习识别语义属性很容易并行,因此具有良好的可扩展性。我们指出,在现有的最先进水平上的显著进步在两种情况下是可能的:标签和层次结构已知,或者标签可以被推断出,但是层次结构是不可用的。然而,当标签不可用也不能被推出,我们提出的技术就不再适合。一旦确定了相似度函数,下一个挑战就是针对层次相似度,查询最相似的数据库图像的高效检索。

本文提出了一种新的哈希策略,该策略为检索提供了一个次线性时间解决方案,并形成了一个通用的组件。

2 相关工作 Related Work

主要回顾了层次结构、相似度学习、语义索引,以及哈希检索方面的相关工作。

本文我们论证了使用层次结构来开展一项不同但是又有关联的任务——相似图像检索——能够获得精确度上的显著进步。

目前的许多改进都源于以语义层次结构的形式利用高级知识。这和目前对高级语义属性的识别显式估计的研究相关。尤其是允许检索查询使用语言来描述人脸的语义属性。目前的工作考虑到一种和我们使用的语义表征在内核上相似的表征法,但是它关注的是用这种表征来分类——使用多次训练的样例来作为分类的具体查询,而不是将单个示例作为查询。在多媒体和信息检索领域也有相关工作。

在我们的工作中,使用概率向量的双线性相似度检索核心的程序,我们也提出了一种新的哈希模式来完成这一工作。请注意,与目前基于学习视觉哈希函数的方法相反的是,它是一种数据独立的哈希方法。

3 运用层次结构的检索 Exploiting Hierarchy for Retrieval

为了在检索中使用层次结构,我们考虑将估计两张图像的相似度Sim作为核心程序。检索包括从一个大数据集中找到和查询图像相似度最高的那些图像。

左侧是从前的工作,与之对比的是右侧我们的工作。我们将学习相似度函数划分为两个部分,一个是对语义标签的概率估计,还有一个是层次比较函数。层次比较函数是从先验知识上确定地建立的,只学习语义模型。

像上图描述的那样,我们计算相似度的方法

  • 首先基于低级图像特征,估计一张图像s(f(a))语义属性的概率
  • 接下来我们使用语义层次关系的先验知识,确定地计算一个层次相似度矩阵,S,相似度函数是Sim(a,b)=s(f(a))^{T}Ss(f(b))(见3.1和3.2节)。

这种方法不仅允许使用层次知识,而且学习过程只需要建立语义属性的模型——比之前的学习相似度方法更容易并行。

3.1 语义相似度的层次编码

 我们方法的核心是使用语义属性间的层次先验知识来计算检索的相似度。

 首先,我们讨论一个相似度的非概率版本,并通过一组二元语义属性\left \{ 1...K \right \}来描述图像。属性可以是对象分类(“是狗”),部分相关(“有腿”),视觉描述(“是黑色的”),或任何对图像的表述。我们会主要关注对象的分类,因为它的应用和研究都是最广泛的。

给定属性,两张图像ab之间的相似度可以被它们的属性匹配程度来衡量。特别地,令\delta _{i}(a)\in \left \{ 0,1 \right \}作为有i个属性的图像a的标志函数。定义相似度为:

                                           Sim^{\ast }(a,b)=\sum_{i,j}^{}\delta _{i}(a)S_{ij}\delta _{j}(b), S\in R^{K\times K}

S_{ij}是属性ij之间的匹配分数。这是一种非常普遍的形式,包含一大类语义相似性。对于对象类别属性,占支配地位的关系是“is a”关系,它能够自然地将它们组织成语义层次结构。在这种情况下,S可以通过测算“类别”相对于“层次结构”的邻近程度来导出。例如, 令S(i,j)=\xi (\pi (i,j))\pi (i,j)是分类ij的最小公共祖先,\xi (\cdot ):\left \{ 1...K \right \}是某个实函数,它在层次结构中是非递减的,也即:最小公共祖先的层级越低,类别ij就越相似。

 例如:“是驴”比起“是键盘”来,与“是马”更加相似。因为“是驴”和“是马”的最小公共祖先是“马科动物”,和“是键盘”的最小公共祖先是“物品”。更具体的\xi (\cdot )基于节点的高度。请注意,当仅靠手动建立的层次结构不可用时,这里还有一些获得属性相似度的其他可能方法,例如文本自动挖掘。

一个特殊的情况是,当属性是相互排斥的类别且S是单位矩阵时,Sim^{\ast }(a,b)只能简单地指示ab是否属于同一类别。我们将其称为“平面”环境,因为属性之间不存在层级关系。属性可以被看作相同的或不同的,针对这种相似性进行优化的检索系统将无法在给定查询“驴”的情况下将“马”的排名高于“键盘”。这是发展和评估现有的技术的环境。

遇到的两个问题

  • 自然语言本身是不明确的,且类别也存在交叠。永远会存在物体不属于某一个确切的分类的情况
  • 完美的语义属性分类是不现实的

因此,代替二元标志的使用,我们将图像a看作是一个向量s(f(a))=x\in R^{K},其中x_{i}=Pr(\delta _{i}(a)=1\mid a),即含有属性i的图像x的概率。给定图像a,b和它们的概率向量x,y,我们将相似度重新定义为非概率版本的期望,即

                        ​​​​​​​        ​​​​​​​        Sim(a,b)=E Sim^{*}(a,b)=\sum_{i,j}^{}x_{i}S_{ij}y_{j}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Sim(a,b)=x^{T}Sy

 这是假定图像a,b彼此独立,且对于绝大多数的检索有效。我们将这种形式的相似度x^{T}Sy称作双线性相似度。

 3.2 学习语义属性

给定先验矩阵S,计算双线性相似度x^{T}Sy,一个最关键的步骤学习语义属性的模型获取概率

为了获得属性表征概率,我们首先为每个语义属性独立地学习二元分类器。例如,在类别属性的情况下,我们为每个类别训练一个1对多的线性SVM。接下来,我们将分类器的输出标定为概率。在我们的实验中,我们为每个SVM分类器拟合一个sigmoid函数,用来将输出转换为概率。对那些非重叠的类别,我们进一步规范化概率为和为1的向量。

和现有的相似度学习算法对比,我们的模式可以通过简单的在检索时间内重置先验矩阵,适应新的相似度测量方法,而不需要对属性模型进行重学习。

 4 高效索引 Efficient Indexing

我们提出了一种新的基于局部敏感哈希的新技术,来达到双线性相似度的次线性检索时间。关键是要在一系列hash函数H上构建Pr_{h\in H}(h(x)=h(y))=Sim(x,y)Pr(h_{1}(x)=h_{2}(y))=Sim(x,y)h_{1}h_{2}相互独立。对于一个查询y,在数据库的bin h(y)中检索并重排序,输出最终的结果。在实践中,可以连接多个哈希函数以减少错误冲突,并使用多个哈希表来增加召回率。

对于我们的双线性相似度Sim(a,b)=x^{T}Sy,其中x,y是概率向量。我们非正式地提供了S的充分条件和相应的构造技术的理论结果:

  1. 如果S是元素非负的、对称的、对角占优的,则存在一个结构
  2. 如果S是从一个公共祖先的级别越低,相似度越高的层次结构中导出的,则存在一个结构

 和我们最近的一个相关技术是求近似cosine相似度的随机超平面LSH,Sim(x,y)=\frac{x^{T}y}{\left \| x \right \|\left \| y \right \|}。能够算出xy的夹角,这与我们计算L2范式距离不同。我们会在5.5节中对比实验表现。

5 实验 Experiment 

 5.1 数据集和评估标准

  • Caltech256:我们使用Caltech256来和现有的相似度学习算法比较
  • ILSVRC :我们使用ILSVRC来实现大规模实验

两个数据集都为每张图像指派了一个标签,其中ILSVRC已经按层次结构组织好了。对于每个数据集,我们都进行划分,分为训练集和测试集。我们使用训练集来学习语义模型,用测试集来评估检索表现。我们通过暴力扫描来获得最k个近邻。

我们使用一个基于排序的评估标准。给定一个图像a_{i}a_{j}之间的相似度函数Sim(a_{i},a_{j})\in [0,\infty ) ,这个函数可用于分配排序r,对于一个查询图像qr_{i}^{q}\in\left \{1,...,n \right \}对应n个图像。当Sim(q,a_{i})\geq Sim(q,a_{j})时,r_{i}^{q}\leqslant r_{j}^{q}。令Sim_{g}(x,y)为基本事实或期望值时的相似度函数,我们可以根据精确度来评估一个查询q下的k个数据的样本:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        p(Sim,q,Sim_{g},k)=\frac{\sum_{r_{i}^{q=1}}^{k}Sim_{g}(q,a_{i})}{max_{o}{}\sum_{i=1}^{k}Sim_{g}(q,a_{oi})}

5.2 层次检索 

h(\pi (i,j))是类别i和类别j的最小公共祖先\pi (i,j)的高度,一个结点的高度是它到它的一个叶子节点的最长路径的长度(叶子节点的高度为0)。类别i和类别j之间的相似度被定义为1-h(\pi (i,j))/h^{*}h^{*}是根节点的高度(ILSVRC中根节点的高度是19)。所有类别和自身的相似度都是1。我们可以定义有着基本正确类c_{a}的图像a和c_{b}的图像b之间的基本正确相似度Sim_{g}(a,b)=1-h(\pi (c_{a},c_{b}))/h^{*}。精确度计算公式同上,用于“查询”和前k个返回图像之间的平均类相似度除以数据集的最大可能相似性(完美值为1)。

我们将这个标准称为层次精度

将我们利用层次编码先验矩阵的双线性相似度(B-Hie)与不同的基线进行比较:

  • SPM:根据SPM直方图的交叉核来排序图像,不使用学习,基于低级特征的方法。
  • Hard-Assign:将查询图像分类到最相似的类别,然后根据属于这个最相似的类别的概率来排列其他的类别,等价于通过注释进行检索。
  • Cosine-NoCal:使用语义分类器原始输出的余弦相似度,无需进行概率校准
  • Cosine-Flat:利用概率的余弦相似性,和Cosine-NoCal一样不需要进行概率校准。
  • Cosine-Hie:与层次编码S的双线性相似性相同,但不使用L2归一化概率向量
  • B-Flat:使用双线性相似性,但不在先验矩阵中编码层次结构,即S设置为恒等式

 左图:我们的方法——使用层次编码先验矩阵的双线性相似度的层次精确度(B-Hie)与其他的比较。中图:我们的方法的平面精确度(B-Flat)与其他进行比较。右图:100个分类的子集上的平地精确度。使用100个分类中的训练数据表现最佳,但是与在900个类上训练(不包括任何一个100个测试集分类)对比之下,直接使用SPM而不进行任何训练更为有利。

根据上图,我们可以得出:

  1. 学习语义属性很重要,SPM(直接用低级特征而不学习)在很少的近邻条件下表现很好,但是随着曲线,近邻数变多时明显比其他使用语义分类器的方法表现上差很多。
  2. 概率表示显著优于硬分配(B-Flat与Hard-Assign)
  3. 概率校准很重要,因为使用原始分类器输出(Cosine-NoCal)明显比校准的对应输出(Cosine-Flat和B-Flat)差
  4. 余弦相似度比双线性相似度表现要差的多,因为概率向量的L2范式
  5. 最重要的是,将层次结构编码到先验矩阵中显著地提高了精度,如B-Hie与B-Plat的定量对比和图1地定性对比所示,其中来自附近类别的图像也排名较高

5.3 平面检索

  我们的方法是基于层次检索的。然而,大多数现有工作都针对一种特殊情况进行了优化,即如果两幅图像来自同一类别,则它们之间的平面相似度为1,否则为0。顶k处的检索精度,如上面的等式所定义的那样,前k个检索精确度也就是——与用于查询的图像来自同一类的图像的百分比。我们将这个标准称为平面精度。 

  为了有效地与现有的工作进行比较,我们将检索中的先验矩阵设置为单位矩阵,使双线性相似度能够适应这种特殊情况。

我们使用线性SVM作为语义分类器,与参考文献中使用同样的特征来训练,参数C通过5折交叉验证来决定。训练集和测试集按比例进行5次随机的划分(每个类40张训练图像和25张测试图像)。下图显示,我们的方法和OASIS几乎同等水平,而显著好于其他所有算法。此外,我们的模式更加高效。对于50个类(单个CPU),OASIS需要用96秒的时间完成一次,而我们的方法完成50个线性SVM和sigmoid函数的概率估计(包括确定参数C的5次随机划分实验,每次实验都有5折交叉验证)只需要12秒。

 接下来,我们要在更大的数据集ILSVRC上,比较我们的方法和OASIS方法。

这里应该是看这张图:

 可以看到在更大的数据集和更高的特征维度上,OASIS的表现比SPM还要差。请注意,OASIS是顺序执行的,而我们的方法可以轻松实现并行性,独立地训练每个语义分类器。

5.4 跨类别泛化

使用语义属性的一个潜在好处是对新类别的泛化能力。我们想要评估我们的方法在没见过的类别上的泛化能力,在1000个ILSVRC语义属性中,只有900个用于构建语义表示,而检索仅针对在训练期间没见过的图像的类别进行评估。

这里的结果要看这张图:

虽然性能低于在训练中看到这些类别的示例图像时的性能,但对于大部分检索列表,性能仍优于原始特征比较基线。

5.5 高效索引

暴力线性扫描将获得1.0的扫描开销和最大的精确度。可以通过调整哈希表的数目和散列函数的数目来用精确度换取开销。将我们的散列技术与最广泛应用的随机超平面LSH进行检索上的比较。通过重复选择超平面,根据向量x在哪一侧从而进行投影,随机超平面LSH近似于余弦相似度\frac{x^{T}y}{\left \| x \right \|_{2}\left \| y \right \|_{2}}。为了公平比较,设置我们的先验矩阵S为单位矩阵,同时使用平面精确度作为评估。同时使用相同的哈希值。

 上图是扫描开销和精确度的曲线。我们的双线性LSH达到了0.15的精确度,非常接近线性扫描的精确度0.17,同时只在0.1%的数据库点上执行。表现显著好于随机超平面LSH。

6 结论 Conclusion

我们提出了一种使用语义层次结构先验知识的相似图像检索方法,它在面对大规模的检索任务时也有很好的可扩展性。 实验显示,增加层次知识可以显著地提高检索的表现。我们也展示了一个不完全的版本系统——不含先验的层次信息——与现有的最先进的相似度函数学习OASIS在使用的训练信息上一致,我们的方法可以用更少的计算来达到更高的精确度,同时也有更好的并行性。最后,我们的贡献是一个概率分布上的双线性相似度散列方案,在我们的实验环境中,能够提供高效的(次线性)检索,可能会对许多应用有广泛应用价值。

这就完成了一个用于大规模分层检索的端到端系统,该系统具有固有的并行性、线性时间的训练、次线性时间的检索,并且比现有技术具有更好的准确性和可扩展性

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大规模图像检索的代码,matlab与c++混合编程。总结了目前图像检索领域目前主要存在的方法。通过阅该代码,可以对于经典的“词袋”模型(bow模型)有个具体的了解,但是该代码没有提供前序的特征提取,是直接从对提取好的特征向量聚类开始的,包括了k-means,分层k-means(HKM)聚类,倒排文件的建立和索引等,该代码还提供了局部敏感哈希(LSH)方法。最后,这份代码是下面这篇论文的作者提供的, Indexing in Large Scale Image Collections: Scaling Properties and Benchmark-This C++/Matlab package implements several algorithms used for large scale image search. The algorithms are implemented in C++, with an eye on large scale databases. It can handle millions of images and hundreds of millions of local features. It has MEX interfaces for Matlab, but can also be used (with possible future modifications) from Python and directly from C++. It can also be used for approximate nearest neighbor search, especially using the Kd-Trees or LSH implementations. The algorithms can be divided into two broad categories, depending on the approach taken for image search: 1. Bag of Words: ---------------- The images are represented by histograms of visual words. It includes algorithms for computing dictionaries: * K-Means. * Approximate K-Means (AKM). * Hierarchical K-Means (HKM). It also includes algorithms for fast search: * Inverted File Index. * Inverted File Index with Extra Information (for example for implementing Hamming Embedding).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值