乐趣区

关于人工智能:构建可以查找相似图像的图像搜索引擎的深度学习技术详解

在本文中将介绍如何查找类似图像的实践根底并且应用一个用于查找商标的零碎为例介绍相干的技术实现,本文提供无关在图像检索工作中应用的举荐办法的背景信息。浏览本文后你将有可能从头开始创立相似图像的搜索引擎的能力。

图像检索(又名基于内容的图像检索 Content-Based Image Retrieval 或 CBIR)是任何波及图像的搜寻的根底。

上图来自文章 Recent Advance in Content-based Image Retrieval: A Literature Survey (2017) arxiv:1706.06064

“依照片进行搜寻”形式曾经呈现在各个领域,特地是在电子商务网站中(例如淘宝),并且“通过关键词搜寻图片”(对图片内容的了解)早已被谷歌、百度,bing 等搜索引擎应用(图片搜寻)。我认为自从计算机视觉界轰动一时的 CLIP: Connecting Text and Images 呈现后,这种办法的全球化将会减速。

在本文中,将只探讨钻研计算机视觉中的神经网络的图片搜寻办法。

根底服务组件

步骤 1. 训练模型。该模型能够在经典的 CV 或基于神经网络的根底上制作。模型输出——图像,输入——D 维的特色嵌入。在传统的状况下,它能够是 SIFT-descriptor + Bag of Visual Words 的组合。在神经网络的状况下,能够是像 ResNet、EfficientNet 等这样的规范骨干 + 简单的池化层。如果有足够的数据,神经网络简直总是体现得很好,所以咱们将专一于它们。

步骤 2. 索引图像。索引是在所有图像上运行经过训练的模型,并将取得的嵌入写入非凡索引以进行疾速搜寻的过程。

步骤 3. 搜寻。应用用户上传的图像,通过模型取得嵌入,并将该嵌入与数据库(索引)中的其余图像的嵌入进行比拟,并且搜寻后果能够依照相关性排序。

神经网络和度量学习

在寻找相似性工作中,神经网络的作用是特征提取器(骨干网络)。主干网的抉择取决于数据的数量和复杂性——能够思考从 ResNet18 到 Visual Transformer 的所有模型。

图像检索中模型的第一个特点是是神经网络头的设计。在 Image Retrieval 排行榜(https://kobiso.github.io/Comp…)上,它们通过 parallel pools、Batch Drop Block 等技术,能够取得使输入特色图的激活散布更平均的最佳图像特征描述。

第二个次要的特色是损失函数的抉择。仅在 Deep Image Retrieval: A Survey(arxiv 2101.11282)中,就有十几个举荐的可用于配对训练的损失函数。所有这些损失的次要目标都是训练神经网络将图像转换为线性可分空间的向量,以便进一步通过余弦或欧几里德间隔比拟这些向量:类似的图像将具备严密的嵌入,不类似的图像将间隔则比拟边远。上面咱们看看几个次要的损失函数。

损失函数

1、Contrastive Loss

这是双重损失,即对象通过彼此之间的间隔进行比拟。

如果这些图像实际上类似,则神经网络会因图像 p 和 q 的嵌入彼此之间的间隔过远而受到惩办。如果图像实际上是彼此不同,但嵌入间隔较近也会受到惩办,然而在这种状况下设置了边界 m(例如,0.5),这个设置是认为神经网络曾经应答了“拆散”不同图像的工作,不须要进行过多的惩办。

2、Triplet Loss

这个损失的指标是最小化 anchor 到 positive 的间隔,最大化 anchor 到 negative 的间隔。Triplet Loss 最早是在 Google 的 FaceNet 对于人脸识别的论文中引入的,长期以来始终是最先进的解决方案。

3、N-tupled Loss

N-tupled Loss 是 Triplet Loss 的一种倒退,它也采纳 anchor 和 positive,但应用多个 negative 样本而不是一个 negative 样本。

3、Angular Additive Margin (ArcFace)

双重损失的问题在于抉择 anchor、positive 和 negative 的组合——如果它们只是从数据集中平均随机抽取,那么就会呈现“light pairs”的问题,某些图像对的损失将为 0 这样会网络十分快的收敛到一个状态,因为咱们的输出中的大多数样本对它来说很“容易”,当损失为 0 时网络就进行学习了。为了防止这个问题,ArcFace 为样本的配对提出简单的开掘技术—— hard negative 和 hard positive 开掘。对这方面感兴趣的能够看看一个叫 PML 库,它实现了许多开掘办法,该库蕴含很多对于 PyTorch 上的 Metric Learning 工作的有用信息,有趣味的能够多关注下。

light pairs 问题的另一个解决方案是分类损失。ArcFace 次要思维是在通常的穿插熵中增加一个缩进 m,它能够使同类图像的嵌入散布在该类的质心区域核心四周,以便它们都与其余类的嵌入集群离开最小的角度 m。

这是一个完满的损失性能,尤其是在应用 MegaFace 进行基准测试时。然而 ArcFace 须要在有分类标记的状况下才会起作用。毕竟如果没有分类的标记是无奈计算穿插熵的,对吧。

上图展现了具备单类和多类标记时抉择损失函数的举荐(如果没有标记也能够通过计算样本的多标签向量之间的交加百分比从后者派生成匹配对的标记)。

池化

在神经网络架构中池化也会常常被用到,上面介绍图像检索工作中应用的几个池化层。

1、R-MAC

Regional Maximum Activation of Convolutions (R-MAC)能够看作一个池化层,它接管神经网络的输入特色图(在全局池化或分类层之前)并返回依据不同窗口计算输入激活总和的向量形容,其中每个窗口的激活是每个通道独立的取这个窗口的最大值。

这种操作是通过图像在不同尺度上的部分特色创立了更丰盛的特征描述。这个描述符自身就是是一个嵌入的向量,所以它能够间接输送到 loss 函数。

2、Generalized Mean

Generalized Mean(GeM)是一个能够进步输入描述符的品质简略的池化操作,它将 lambda 范式利用到均匀池化操作中。通过减少 lambda,使网络聚焦于图像的重要局部,这在某些工作中是很无效的。

间隔的测量

1、索引

高质量搜寻类似图像的另一个关键点是排名,即显示给定查问的最相干后果。它的次要度量是建设索引的速度、搜寻的速度和耗费的内存。

最简略的办法是间接应用嵌入向量进行暴力的搜寻,例如应用余弦间隔。然而当有数据量很大时就会呈现问题——数百万、数千万甚至更多。搜寻速度明显降低。

这些问题能够以就义品质为代价来解决——通过压缩 (量化) 而不是以原始模式存储嵌入。同时也扭转了搜寻策略——不是使用暴力搜寻,而是尝试用最小的比拟次数来找到最靠近给定查问的嵌入向量。有大量的高效的框架来近似搜寻最靠近的对象。例如 NMSLIB, Spotify Annoy, Facebook Faiss, Google Scann。除了机器学习的库以外,传统 Elasticsearch 在 7.3 当前也反对向量的查问。

2、重排

信息检索畛域的钻研人员很早早就发现了:在收到原始搜寻后果后,能够通过某种形式对汇合进行从新排序来改良搜寻后果的品质。

应用最靠近搜寻输出的 top-k 来生成新的嵌入,在最简略的状况下能够取均匀向量。如上图所示,还能够对嵌入进行加权,例如通过问题中的间隔或与申请的余弦间隔进行加权排序。

3、k-reciprocal

k-reciprocal 是一组来自 top-k 的元素包含最靠近申请自身的 k 个元素,在这个汇合的根底上构建了对后果进行从新排序的过程,其中之一是在 Re-ranking Person Re-identification with k-reciprocal Encoding 一文中进行的形容。k-reciprocal 比 k 最近邻更靠近查问。因而能够粗略地将 k-reciprocal 集中的元素视为已知正样本,并更改加权规定。原始论文中蕴含大量计算,这超出了本文的范畴,倡议有趣味的读者浏览。

验证指标

最初就是查看相似搜寻品质的局部。初学者在第一次开始从事图像检索我的项目时可能不会留神到此工作中的许多轻微之处。

让咱们看一下图像检索工作中这些风行的指标:precision@k、recall@k、R-precision、mAP 和 nDCG。

1、precision@R

长处:显示相干的 top-k 的百分比。

毛病:

  • 对给定查问的相干样本的数量十分敏感,可能产生对搜寻品质的非主观评估,因为不同的查问有不同数量的相干后果
  • 仅当所有查问的相干数 >= k 时,才有可能达到 1

2、R-precision

与 precision@k 雷同,其中 k 设置为等于相干查问的数量。

长处:对 precision@k 中数字 k 的敏感性隐没,度量变得稳固

毛病:必须晓得与查问申请相干的样本总数(如果不是所有相干的都被标记,会产生问题)

3、Recall@k

在 top-k 中找到的相干我的项目的比例

长处

  • 这个指标答复了在 top- k 中是否找到了相干的后果
  • 可能稳固且均匀地解决申请

4、mAP(mean Average Precision)

用相干后果填充搜寻后果顶部的密集水平。能够将其视为搜索引擎用户收到雷同的信息量时须要浏览的页面数(越少越好)。

长处:主观稳固的检索品质评估

毛病:必须晓得与申请相干的样本的总数

5、nDCG (Normalized Discounted Gain)

该度量显示了 top-k 中的元素在它们之间的排序是否正确。这里不会介绍这个指标的优缺点,因为这是度量指标列表中惟一思考元素程序的一个指标。并且有钻研表明当须要思考程序时,这个指标相当稳固并且实用于大多数状况。

6、验证计划举荐

6a、对一组查问和选定的相干查问进行验证

输出:申请图像和与其相干的图像。须要有与此查问相干的列表模式的标记。

要计算指标:计算每个的相关矩阵,并依据无关元素相关性信息,计算指标。

6b、全库验证

输出:申请的图像,以及与它们相干的图像。现实状况下应该有一个验证图像的数据库,所有相干查问都在其中被标记。须要留神的是相干图像中不应蕴含查问的图像免得它会排在 top-1,咱们的工作是相干图像而不是找到他本人自身。

要计算指标:遍历所有申请,计算到所有元素(包含相干元素)的间隔,并将它们发送到指标计算函数。

残缺的样例介绍

这里以搜寻类似商标 logo 为例介绍图像搜索引擎是如何工作的。

图像索引数据库的大小:数百万个商标。这里第一张图片是一个查问,下一行是返回的相干列表,其余行是搜索引擎依照相关性递加的程序给出的内容。

总结

就是这样,心愿本篇文章能够那些正在构建或行将构建相似图像搜索引擎的人提供一个残缺的思路,如果你有什么好的倡议也欢送留言。

https://www.overfit.cn/post/18b0ea4b8df04f2c82e8cf633e13660a

作者:Vlad Vinogradov

退出移动版