图像搜索如何在Dropbox上工作

2021-05-12 16:42:53

照片是Dropbox中最常见的文件类型之一,但文件名搜索它们甚至比基于文本的文件更少的效率。当你'几年前寻找那张照片,你肯定不要记住你的相机设置的文件名是2017-07-04 12.37.54.jpg。

相反,您查看他们的单个照片或缩略图,并尝试识别与您搜索的物体或方面相匹配 - 无论是如何恢复您所存储的照片,或者也许发现新的广告系列的完美拍摄在您公司的档案中。如果Dropbox可以通过所有这些图像都能烧致,而且呼出那些最好匹配你决定的描述性词语的那些这几乎是我们的图像搜索。

在这篇文章中,我们将根据机器学习的技术描述我们的图像内容搜索方法背后的核心理念,然后讨论我们如何在Dropbox的现有搜索基础架构上构建表演实施。

这是一种说明图像搜索问题的简单方法:查找需要(文本)查询Q和图像j的相关性功能,并返回指示图像与查询匹配的相关性得分s。

鉴于此功能,当用户执行搜索时,我们将其运行在所有图像上,并返回那些产生阈值高于阈值的分数的那些。我们使用机器学习中的两个关键开发建立此功能:准确的图像分类和字向量。

图像分类图像分类器读取图像并输出描述其内容的分类类别列表。更高的分数表示图像属于该类别的更高概率。

在过去的十年中,使用卷积神经网络在图像分类中看到了巨大的进展,从Krizhevsky等人开始突破2012年的想象成挑战。从模型架构改进,更好的培训方法,大型数据集如打开的图像或想象力研究人员已经建立了易于识别数千类的图像分类器等易于使用的库。

图像分类让我们自动理解图像中的内容,但本身就是不够启用搜索。当然,如果用户搜索海滩,我们可以将具有最高分数的图像返回该类别的图像,但如果它们依赖于搜索岸?如果他们搜索水果或奶奶史密斯的苹果是怎么办?

我们可以在单词之间进行同义词和近同义词的大词典和分层关系,但这很快就会变得笨重,特别是如果我们支持多种语言。

Word Vectors让我们重新解决问题。我们可以将图像分类器的输出解释为每类别分数的矢量J C.此向量表示图像的内容作为C维类别空间中的点,其中C是类别的数量(数千)。如果我们可以在此空间中提取查询的有意义的表示,我们可以解释图像向量是多么接近查询向量,以衡量图像与查询匹配的程度。

幸运的是,提取文本的传染媒介表示是自然语言处理中大量研究的重点。在Mikolov等人的2013年Word2Vec纸上描述了该区域中最佳已知方法之一。 Word2VEC将传染媒介分配到字典中的每个单词,使得具有类似含义的单词将具有彼此靠近的向量。这些载体处于D维词矢量空间,其中D通常是几百个。

只需查找其Word2Vec向量,我们就可以获得搜索查询的向量表示。此向量不在图像分类器向量的类别空间中,但我们可以通过引用图像类别的名称如下转换为类别空间:

对于查询字Q,获取D维文字矢量Q W,归一化到单位向量。我们将在类空间中使用Word Space中的VICTORS和C类别空间中的VIBRIPT。

对于每个类别,获取类别名称C I W的标准化字向量。然后定义M i = Q W·C I W,查询向量和第i类矢量之间的余弦相似性。在-1和1之间的此分数表示查询字与类别名称的匹配程度如何。通过将负值剪切至零,因此m i = max(0,m i),我们在与图像分类器输出的范围内得到得分。

这让我们计算QC = [M 1 M 2 ... M C],C维类别空间中的向量表示查询与每个类别的查询匹配程度,正如每个图像的图像分类器向量代表的图像分类器图像匹配每个类别。

步骤3只是向量 - 矩阵乘法,q c = q wc,其中c是列是类别字向量c i w的矩阵。

一旦我们映射到类别空间向量Q C,我们就可以将其余弦相似与每个图像的类别空间矢量拍摄,以获得图像的最终相关性分数,s = q cj c。

这是我们的相关功能,我们通过此分数排列图像以显示查询的结果。将此功能应用于一组图像也可以表示为矢量矩阵乘法,S = Q CJ,其中J的每列是图像的分类器输出矢量JC,S是所有图像的相关分数的向量。

让我们通过少数尺寸进行一个例子,其中字向量只有三个维度,分类器只有四类:苹果,海滩,毯子和狗。

假设用户已搜索岸边。我们查找单词向量以获得[0.35-0.62 0.70],然后乘以类别字向量的矩阵,将查询投影为类别空间。

因为岸边的Word矢量接近海滩Word矢量,所以该投影在海滩类别中具有很大的价值。

建模详细信息我们的图像分类器是在OpenImages数据集上培训的有效网络。它产生约8500类的分数。我们发现,这种架构和数据集以合理的成本提供了良好的准确性,如果我们希望为Dropbox大小的客户群提供服务。

我们使用Tensorflow来训练并运行模型。我们使用预先接受训练的概念NumberBatch Word矢量。这些提供了良好的结果,重要的是他们支持多种语言,返回与类似含义不同语言的单词的类似载体。这使得支持图像内容以多种语言进行简单:法语中英语和Chien中的狗的Word向量是相似的,因此我们可以支持两种语言的搜索,而无需执行显式翻译。

对于多字搜索,我们将查询解析为单个单词。我们还维持像Beach Ball这样的多字词列表,可以被视为单词。当查询包含其中一个术语时,我们做了另一种解析并运行两个解析查询 - 查询海滩球变成(海滩和球)或(海滩球)。这将匹配沙子中的大型,丰富多彩,充气球和网球。

每当用户进行搜索时,都不是获取完整的,最新的J矩阵并不实用。用户可以访问数十万个或甚至数百万的图像,并且我们的分类器输出是数千个维度,因此该矩阵可以具有数十亿个条目,并且只要用户添加,删除或修改图像时需要更新。这根本不会衡量大量的数亿用户(尚未)。

因此,而不是对每个查询来实例化J,我们使用上述方法的近似值,该方法可以有效地在Dropbox的Nautilus搜索引擎上实现。

概念上,Nautilus由前向索引组成,将每个文件映射到某些元数据(例如文件名)和文件的全文,以及将每个单词映射到包含单词的所有文件的发布列表的反转索引。对于基于文本的搜索,少数食谱文件的索引内容可能看起来像这样:

如果用户搜索白葡萄酒,我们将在反转索引中查找两个单词,并发现doc_1和doc_2有两个单词,因此我们应该在搜索结果中包含它们。 doc_3只有其中一个单词,所以我们应该留出它或将它放在结果列表中。

一旦我们找到了我们可能想要返回的所有文件,我们将在前向索引中查找并使用该信息进行排名并过滤它们。在这种情况下,我们可能会比Doc_2更高的doc_1,因为两个单词彼此相邻。

修复图像搜索的文本搜索方法我们可以使用同一系统来实现我们的图像搜索算法。在前向索引中,我们可以存储每个图像的类别空间矢量J C.在倒置索引中,对于每个类别,我们将带有该类别的正分数的图像发布列表。

查找字样Q W进行野餐,并通过类别空间投影矩阵C乘以如上所述的Q C。 C是一个固定的矩阵,对所有用户都是相同的,所以我们可以将其留在内存中。

对于在Q C中具有非零条目的每个类别,从反相索引获取发布列表。这些列表的联合是匹配图像的搜索结果集,但这些结果仍然需要排名。

对于每个搜索结果,从前向索引获取类别空间向量J C并将Q C乘以以获得相关性得分。返回结果,得分高于阈值,按得分排名。

优化可伸缩性此方法在存储空间和查询时间处理方面仍然是昂贵的。如果我们有10,000个类别,那么对于每个图像,我们必须在前向索引中存储10,000分类器分数,如果我们使用四字节浮点值,则以40千字节为代价。并且因为分类器分数很少为零,所以将向大多数张贴列表中添加典型图像。如果我们使用四字节整数的图像ID,那是另外40千字节,每张图像的索引成本为80千字节。对于许多图像,索引存储将大于图像文件!

至于查询时间处理 - 这看起来像执行搜索的用户延迟 - 我们可以指望大约一半的查询类别匹配分数M i为正,因此我们将从反相索引中读取大约5,000个发布列表。这与文本查询非常糟糕,通常读取大约十个发布列表。

幸运的是,有很多接近零值,我们可以放弃以获得更有效的近似值。上面给出了每个图像的相关性得分作为s = q cj c,其中q c保持查询和大约10,000类中的每一个之间的匹配分数,并且j c从分类器中保存大约10,000类的分数。两个矢量都包括大多数接近零值,对S产生了很少的贡献。

在我们的近似下,我们将设置所有但是最大的Q C和J C的条目为零。通过实验,我们发现,保持Q C的前10个条目和J C的前50个条目足以防止质量下降。存储和处理节省很大:

在前向索引而不是10,000维密度向量中,我们将稀疏向量存储有50个非零条目 - 每个图像的前50类分数。在稀疏表示中,我们存储每个非零条目的位置和值; 50双字节整数位置和50个四字节浮点值需要大约300字节。

在反转索引中,每个图像被添加到50个发布列表而不是10,000,以大约200个字节。因此,每张图像的总索引存储器为500字节而不是80千字节。

在查询时间,Q C有10个非零条目,因此我们只需要扫描10个发布列表 - 对于文本查询,大致相同的工作量。这给了我们一个较小的结果集,我们可以更快得分。

通过这些优化,索引和存储成本是合理的,并且查询延迟与文本搜索有关的查询延迟。因此,当用户启动搜索时,我们可以并行运行文本和图像搜索,并将完整的结果显示在一起,而不使用户等待超过仅用于仅文本搜索的时间。

图像内容搜索目前为所有专业和商业级别用户启用。我们组合图像内容搜索对常规图像,基于OCR的搜索文档的图像,以及文本文档的全文搜索,使大多数这些用户'通过基于内容的搜索可用的文件。

视频搜索? 当然,我们正在努力让您搜索所有Dropbox内容。 图像搜索是迈向的一步。 最终,我们希望能够搜索视频内容。 在视频中找到一个帧的技术,或索引整个剪辑以进行搜索,也许通过调整静态图像技术,仍处于研究阶段,但这只是几年前“找到我野餐的所有照片 我的狗在他们身上“只在好莱坞电影中工作。 我们的目标是:如果它在你的Dropbox中,我们会为你找到它!