想象一下,拥有数十万到数百万张图像的数据集合,而没有任何描述每个图像内容的元数据。我们如何构建一个能够找到最能回答用户搜索查询的图像子集的系统?
我们基本上需要的是一个搜索引擎,能够根据图像结果与搜索查询的对应程度对图像结果进行排名,搜索查询可以用自然语言或其他查询图像来表达。
我们在这篇文章中解决问题的方法是训练一个深度神经模型,该模型学习任何输入图像和文本的固定长度表示(或嵌入),并使其在欧几里德空间中接近,如果文本对 -图像或图像-图像是“相似的”。
我找不到足够大的搜索结果排名数据集,但我能够获得此数据集:http://jmcauley.ucsd.edu/data/amazon/ 它将电子商务项目图像链接到其标题和描述。我们将使用此元数据作为监督源来学习有意义的连接文本图像表示。为了管理计算和存储成本,实验仅限于时尚(服装、鞋子和珠宝)商品和 500,000 张图像。
我们拥有的数据集将每个图像与用自然语言编写的描述链接起来。因此,我们定义了一个任务,在该任务中我们想要学习图像和文本的连接、固定长度表示,以便每个图像表示接近其描述的表示。
该模型需要 3 个输入:图像(作为锚点)、图像标题+描述(正例),第三个输入是一些随机采样的文本(负例)。
然后我们定义两个子模型:
图像子模型生成 Anchor **E_a ** 的嵌入,文本子模型输出正标题+描述E_p的嵌入和负文本E_n的嵌入。
然后,我们通过优化以下三元组损失来进行训练:
L = max( d(E_a, E_p)-d(E_a, E_n)+alpha, 0)
其中d是欧几里德距离,alpha是超参数,在本实验中等于0.4。
基本上,这种损失允许做的就是使 **d(E_a, E_p)变小,使d(E_a, E_n) **变大,以便每个图像嵌入接近其描述的嵌入,远离其描述的嵌入随机文本。
一旦我们学习了图像嵌入模型和文本嵌入模型,我们就可以通过使用 tsne 将它们投影到二维来可视化它们(https://scikit-learn.org/stable/modules/ generated/sklearn.manifold.TSNE.html)。
测试图像及其相应的文本描述由绿线链接
从图中我们可以看出,一般来说,在嵌入空间中,图像及其相应的描述是接近的。考虑到所使用的训练损失,这是我们所期望的。
在这里,我们使用几个文本查询示例来搜索 70,000 张图像中的最佳匹配项。我们计算查询的文本嵌入,然后计算集合中每个图像的嵌入。我们最终选择嵌入空间中最接近查询的前 9 张图像。
这些例子表明,嵌入模型能够学习有用的图像表示和简单单词组合的嵌入。
在这里,我们将使用图像作为查询,然后在包含 70,000 张图像的数据库中搜索与其最相似的示例。排名是根据每对图像在嵌入空间中使用欧几里得距离的接近程度来确定的。
结果表明,生成的嵌入是图像的高级表示,可以捕获所表示对象的最重要特征,而不会受到方向、光照或次要局部细节的过度影响,也无需经过明确的训练。
在这个项目中,我们研究了机器学习模块,使我们能够构建应用于图像集合的基于关键字和图像的搜索引擎。基本思想是学习文本和图像的有意义的联合嵌入函数,然后使用嵌入空间中项目之间的距离对搜索结果进行排名。
参考 :