基于内容的图像检索:前沿文献调查(2017年)

翻译 | 朱宪忠

审稿人 | 梁策孙淑娟

摘要:本文将提供有关图像恢复任务推荐方法的一些背景知识,旨在帮助读者针对特定目标(不包括开发完整的企业解决方案)创建类似的图像搜索引擎。

文本:

项目介绍

相似图像检索是任何与图像相关的搜索,即“基于内容的图像检索系统”,简称“CBIR”系统。

以上图片来自文章《基于内容的图像检索:前沿文献综述(2017)》()

如今,图片搜索的应用越来越广泛,尤其是在电子商务服务领域(如速卖通、Wildberries 等)。“关键词搜索”(包括图片内容理解)早已在谷歌、Yandex等搜索引擎站稳脚跟,但在市场和其他私人搜索引擎中的应用还比较有限。计算机视觉领域的对比语言图像预训练CLIP()一经问世就引起轰动,将加速其全球化进程。

我们的团队专门研究计算机视觉中的神经网络,因此在本文中,我将专注于搜索图像。

1、基本服务组件

第 1 步:训练模型。模型部分可以建立在经典的计算机视觉或神经网络的基础上。模型的输入部分是图像,输出部分是 D 维描述符/嵌入层。在经典的实现方案中,可以采用SIFT(Scale-invariant feature transform,scale-invariant feature transform)描述符和BoW(bag-of-visual-words,视觉词袋)算法相结合的策略。但是,在神经网络方案中,可以将标准算法模型(如 ResNet、EfficientNet 等)与复杂的池化层相结合,并进一步结合优秀的学习技术。如果有足够的数据或良好的训练,选择神经网络方案几乎总能得到令人满意的结果(附上动手示例),因此我们将在本文中重点介绍该方案。

第 2 步:索引图像。这一步是在所有图像上运行经过训练的模型,并将嵌入写入特殊索引以进行快速搜索。

第 3 步:搜索。使用用户上传的图片,运行模型,得到嵌入层,并将嵌入层与数据库中的其他嵌入层数据进行比较。最终搜索结果按相关性排序。

2、神经网络和度量学习

在寻找相似性的任务中,我们使用神经网络作为特征提取器(骨干网络)。当然,骨干网络的选择取决于数据的容量和复杂度——你可以根据自己的开发需要选择从 ReNET18 残差网络模型到 Visual Transformer 模型的所有选项。

图像检索模型的第一个特点是神经网络输出部分的实现技术。在图像检索排行榜()上,使用不同的图像检索算法来构造最理想的描述符——例如使用并行池化层的Combined Global Descriptors算法,输出功能上实现了批量删除块算法,以获得更均匀的激活分布。

第二个主要特征是损失函数。目前,人工智能领域的损失函数有很多。例如,在《深度图像检索研究》一文中提到了十几种推荐的损失函数算法(下)。同时,还有相当数量的分类功能。所有这些损失函数的主要目标是训练神经网络将图像转换为线性可分的空间向量,然后通过余弦或欧几里德距离进一步比较:相似的图像将具有相似的相似图像将具有非常不同的嵌入层。接下来,让我们仔细看看这些。

损失函数

1、对比损失

该算法存在双重损失情况,这往往发生在比较彼此距离的对象上。

如果图像 p 和 q 实际上非常相似,则神经网络会因图像 p 和 q 的嵌入层之间的距离而受到惩罚。同样,由于所应用的嵌入层的接近性,也存在神经网络惩罚,因为嵌入层的图像实际上彼此不同。在后一种情况下,我们可以设置一个边界值 m(例如 0.5)),以克服我们假设神经网络已经处理了“分离”不同图像的任务。主意。

2、三元组损失

在这里,我们的目标是最小化锚点到正的距离并最大化锚点到负的距离。三元组损失函数最早见于 Google FaceNet 模型文章中关于人脸识别的文章,长期以来一直是最先进的解决方案。

3、N-tuple 损失函数(N-tupled)

N元组损失函数是在三元组损失函数的进一步研究成果的基础上,同样采用了anchors和正例的概念,但使用了多个而不是单个负例。

4、Additive Angular Margin Loss Function(Angular Additive Margin,也称为ArcFace)

配对损失函数的问题在于选择正数、负数和锚点的组合——如果你只是从数据集中随机均匀地选择它们,你就会遇到“光配对”的问题。当这种简单的图像配对发生时,损失为 0。事实证明,在这种情况下,网络迅速收敛到批处理中的大多数元素都非常易于处理并且其损失为零的状态——此时神经网络停止学习。为了避免这个问题,这个算法的开发者开始想出复杂的配对挖掘技术——硬负挖掘和硬正挖掘。有关问题,请参见(),其中比较了各种损失函数。此外 PML library() 还实现了许多挖掘方法。尤其,

上述问题的另一种解决方案是使用分类损失函数。我们不妨回想一下三年前推出的人脸识别算法 ArcFace,它在当时是最先进的,导致了当时众所周知的“缺陷”特征的存在。

该算法的主要思想是在通常的交叉熵中添加一个缩进 m,它将一类图像的嵌入层分布在该类图像的质心区域上,使它们都与嵌入层聚类至少相隔一个角度 m 的其他类别。

这似乎是一个完美的损失函数解决方案,尤其是在针对 MegaFace benchmark() 规模开发 AI 系统时。但请记住,此算法仅在有分类标记时才有效;否则,您将不得不处理成对损失函数。

上图直观地展示了在使用单类和多类标签时哪些损失函数效果最好(通过计算多标签向量样本之间的交集百分比,可以从多类标签中推导出成对标签)。

汇集

现在,让我们回顾一下神经网络架构,并考虑在执行图像检索任务时使用一对池化层的情况。

1、R-MAC 池化

R-MAC(Regional Maximum Convolution Activation)是一个池化层,它取神经网络的输出图(在全局池化或分类层之前),并为输出图中的每个窗口返回一个描述符向量中的激活总和。这里,一个窗口的激活被认为是每个通道单独获得的窗口的最大值。

该结果描述符的计算考虑了图像在不同尺度上的局部特征,从而创建了丰富的特征描述。这个描述符本身可以是一个嵌入层,因此可以直接发送到损失函数。

2、GeM 池化

GeM(Generalized Average Pooling)是一种简单的池化算法,可以提高输出描述符的质量。最重要的是,经典的平均池可以推广到 lambda 范数。通过添加 lambda 层,我们使神经网络专注于图像的重要部分,这在某些任务中可能很重要。

测距

1、索引

高质量搜索相似图像的关键是排名,即显示与给定查询最相关的样本。这个过程的基本特征包括:索引描述符的速度、搜索的速度、使用的内存。

最简单的方法是保持嵌入层“面向前方”并对其进行强力搜索,例如使用余弦距离。但是,当嵌入层数很多时,这种方法会出现问题——数量可能在数百万、数千万甚至更多。而且,搜索速度明显降低,占用的堆空间会进一步增加。但是,有一个积极的方面 – 使用现有的嵌入层可以实现完美的搜索质量。

其中一些问题可以以牺牲质量为代价来解决——以压缩(量化)而不是原始形式存储嵌入层。并且还要改变搜索策略——不要使用蛮力搜索,而是尝试最少的比较次数来找到与给定查询最接近的所需比较次数。已经有大量高效的搜索框架可以逼近最接近的内容。为此,我们创建了一个特殊的基准 – 根据它您可以观察每个库在不同数据集上的性能。

其中,最受欢迎的库有:NMSLIB(非度量空间库)、Spotify 的 Have 库、Facebook 的 Faiss 库和 Google 的 Scann 库。此外,如果您想使用 REST API 进行索引,请考虑使用 JinaApp()。

2、重新排序

信息检索领域的研究人员早就知道,在接收到原始搜索结果后,可以通过某种方式对项目进行重新排序,从而改进有序的搜索结果。

一个著名的算法是查询扩展。该算法的核心思想是使用最近的一组元素中的前K个元素生成一个新的嵌入层。在最简单的情况下,可以采用如上所示的平均向量。实际上,您还可以根据所讨论的距离或与请求的余弦距离对嵌入层进行加权。在《基于注意力的查询扩展学习》一文中详细提到了一个框架(),也可以递归地使用扩展查询算法。

3、k 最近邻算法

上图是一个用于人最近物体识别的应用程序的屏幕截图。其中,上图给出了查询及其10个最近邻数据,其中P1-P4为正例,NI-N6为负例。图底部的每两列显示样本人的 10 个最近邻居。蓝色和绿色框分别对应于样本人和正例。我们可以观察到样本人和正例有 10 个最近的邻居。

k-最近邻算法主要围绕前k个元素展开,其中包括最接近请求本身的k个元素。

在这个集合的基础上,建立了一个对结果进行重新排序的过程,其中一个过程在《基于K-Nearest Neighbor Algorithm的人物重识别信息重排序研究》一文中有描述()。根据定义,k-reciprocal 比 k-最近邻更接近查询结果。因此,可以粗略地将K-近邻算法集合中的元素视为正例,并可以进一步改变扩展查询等算法的加权规则。

在本文中,已经开发了一种机制来使用 top-k 中元素本身的 k-最近邻的集合来重新计算距离。本文包含大量计算信息,暂时不在本文讨论范围之内。建议有兴趣的读者可以找到并自行阅读。

相似图搜索算法效果分析

接下来,我们分析本文提出的相似图像搜索算法的质量。值得注意的是,在实现这个搜索任务的过程中有很多细节,初学者在第一次开发图像检索项目时很可能不会注意到。

1、指标

本文将探讨图像检索领域常用的一些流行的度量算法,如precision@k、recall@k、R-precision、mAP和nDCG等。

图片[1]-基于内容的图像检索:前沿文献调查(2017年)-老王博客

【译者补充】一般来说,以下算法中的precision表示检索到的item有多少是准确的神经网络 损失函数种类,recall表示检索到了所有准确item中有多少。

(1)precision@R 算法

在上述公式中,

参数RELk表示:top-k结果中相关样本的个数;

参数k表示:要考虑的top位置的固定样本数。

优点:可以显示top-k中相关样本的百分比值。

缺点:

对给定查询的相关样本数量非常敏感,这使得无法客观地评估搜索质量,因为不同查询的相关样本数量不同。

只有当所有查询中相关样本的数量大于或等于 k ​​时,才能达到值 1。

(2)R-精度算法

在上述公式中,

参数RELR表示:top-R结果中相关样本的个数;

参数 R 表示:给定查询中所有相关样本项的数量。

与算法precision@k一样,参数k也设置为相关查询样本的数量。

优点:不像precision@k中的数字k那么敏感,度量变得稳定。

缺点:必须事先知道与请求相关的样本总数(如果没有先标记所有相关数字可能会导致问题)

(3)Recall@k(召回率)算法

在上述公式中,

参数RELk表示:top-k结果中相关样本的个数;

参数k表示:要考虑的top位置的固定样本数;

参数 REL 表示:给定查询中所有相关样本项的数量。

该算法能够显示在top-k中找到的相关样本项的比例。

优势:

回答在top-k中原则上是否相关的问题

稳定和平均超过请求

(4)mAP(平均精度)算法

该算法能够在搜索结果的顶部显示相关样本的密度。您可以将其视为搜索引擎用户收到的信息量,此时搜索引擎读取的页面数量最少。因此,信息量与读取页数的比值越大,指标越高。

优势:

客观、稳定地评估搜索质量

精确召回曲线的一位数表示,它本身携带丰富的分析信息

缺点:

必须知道与请求关联的样本总数(如果没有首先标记所有相关样本,则可能会出现问题)

[提示] 有关 mAP 算法输出的更多信息可以在这篇文章中找到。

(4)nDCG(归一化累积增益)算法

在上述公式中,

参数RELk表示:位置k之前的相关样本项列表(按相关性排序);

参数ri表示:检索结果中第i个项目的四舍五入真值相关性得分。

这个度量算法显示了 top-k 中的元素在它们之间排序的正确程度。由于这是上述方法中唯一考虑元素顺序的测量算法,我们将不再详细说明其优缺点。然而,研究表明,当需要考虑排序时,度量算法相当稳定,并且在大多数情况下运行良好。

2、算法整体估计

(1)宏观方面:为每个请求计算一个指标,并计算所有请求的平均值。

优点:与此查询相关的不同数量的数据没有明显波动。

缺点:所有查询都被认为是等效的,尽管有些查询比其他查询更相关。

(2)微观方面:在所有查询中,将标记的相关性和单独成功找到的相关性的数量相加,然后都参与相应度量的计算。

优点:在评估查询时,会考虑与每个查询关联的令牌数量。

缺点:如果一个请求中有很多被标记的相关指标,而系统没有成功或成功将它们拉到顶部,则该指标可以被计算为非常低或非常高。

3、系统验证

建议读者对本文算法采用以下两种验证方案:

(1)根据一组查询和选定的相关查询进行验证

输入:一个图像请求和与之相关的图像,并且有与该查询相关的列表形式的标签。

为了计算度量,可以基于关于元素相关性的二进制信息来计算每个元素的相关矩阵。

2、完整的基础验证

该算法的输入部分由图像请求和与之关联的图像组成,并且应该有一个图像验证数据库 – 理想情况下,所有相关查询都将被标记。此外,数据库不应包含查询图像;否则,必须在搜索阶段清理这些图像,以免它们在 top-1 层上阻塞。此外,还提供了一组负面示例作为验证基础——我们的任务是找出如何处理它。

要计算指标,您可以遍历所有请求,计算到所有元素(包括相关元素)的距离,并将它们发送到指标计算函数。

已完成项目的示例

关于一家公司是否应该使用另一品牌的图形元素,公司之间经常发生争执。在这种情况下,实力较弱的制造商试图通过用相似的符号展示他们的产品和服务来寄生一个成功的大品牌。然而,消费者也因此受到影响——您可能想从您信任的制造商那里购买奶酪神经网络 损失函数种类,但没有仔细阅读标签,您会错误地从假冒制造商那里购买假冒产品。最近的一个案例是 Apple 试图阻止使用 Prepear 的徽标 ( )。

因此,有一些专业的政府机构或私人公司来打击非法移植。他们持有注册商标注册簿,通过该注册簿可以比较传入的商标,并最终决定是否批准或拒绝商标注册申请。以上是使用 WIPO() 系统接口的典型示例。在这样的系统中,搜索相似图像的功能将为其提供极大的便利,帮助相关专家更快地搜索相似图像。

1、系统应用示例

在我们开发的系统中,索引图像数据库中有数百万个商标。下面给出的第一张图片是查询结果显示,下一行(第二张图片)给出了相关图片的预期列表,其余行中的图片由搜索引擎按照相关性搜索结果递减的顺序给出。

译者介绍

朱宪忠,51CTO社区编辑,51CTO专家博主,讲师,潍坊某大学计算机教师,免费编程老手。早期专注于微软各项技术(撰写了三本与 ASP.NET AJX 和 Cocos 2d-X 相关的技术书籍),投身开源世界十余年(熟悉流行的全栈 Web 开发)技术),了解了/ESP32/Raspberry Pi等OneNet/AliOS+Arduino物联网开发技术和Scala+Hadoop+Spark+Flink等大数据开发技术。

社区编辑招聘

51CTO诚邀您加入社区编辑

享受四大福利

扫码加入

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论