1. 磐创AI-开放猫官方网站首页
  2. 系列教程
  3. Keras

使用Keras构建深度图像搜索引擎

使用Keras构建深度图像搜索引擎 AI学习路线之Keras篇


使用Keras构建深度图像搜索引擎

作者 | Youness Mansar

编译 | VK

来源 | Towards DataScience


动机

想象一下,如果有数十万到数百万张图像的数据集,却没有描述每张图像内容的元数据。我们如何建立一个系统,能够找到这些图像的子集来更好地回答用户的搜索查询?
我们基本上需要的是一个搜索引擎,它能够根据图像与搜索查询的对应程度对图像结果进行排序,可以用一种自然语言表示,,也可以用其他查询图像表示。
我们将在本文中解决问题的方法是训练一个深度神经模型,该模型学习任何输入图像和文本的固定长度表示形式(或嵌入形式),使得如果文本-图像或图像-图像是“相似的”,则他们在欧氏空间中接近。

数据集:

我找不到足够大的搜索结果排名数据集,但我能够得到这个数据集:
http://jmcauley.ucsd.edu/data/amazon/
它将电子商务项目的图像链接到它们的标题和描述。我们将使用这些元数据作为监督源来学习有意义的联合文本-图像表示。为了管理计算和存储成本,这些实验仅限于时尚(服装、鞋子和珠宝)物品和50万张图像。

问题设置:

我们的数据集将每个图像与用自然语言编写的描述链接起来。因此,我们定义了一个任务,在该任务中,我们要学习图像和文本的固定长度的联合表示,以便每个图像表示都接近其描述的表示。
使用Keras构建深度图像搜索引擎

模型:

该模型有3个输入:图像(即锚点)、图像标题与描述(即正例)和第三个输入是一些随机采样的文本(即负例)。
然后定义两个子模型:
  • 图像编码器:Resnet50预训练的ImageNet+GlobalMaxpooling2D
  • 文本编码器:GRU+GlobalMaxpooling1D
图像子模型产生锚点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)将它们投影到二维空间中来实现可视化。
测试图像及其对应的文本描述用绿线连接:
使用Keras构建深度图像搜索引擎
从图中可以看出,通常在嵌入空间中,图像及其对应的描述是接近的。考虑到使用的训练损失,这是我们期望的。

文字图片搜索:

在这里,我们使用几个文本查询示例来在一组70,000张图像中搜索最佳匹配。我们计算查询的文本嵌入,然后计算集合中每个图像的嵌入。我们最终在嵌入空间中选择最接近查询的前9张图像。
使用Keras构建深度图像搜索引擎
使用Keras构建深度图像搜索引擎
这些例子表明,嵌入模型能够学习图像的有用表示形式和简单单词组成的嵌入。

图像搜索:

在这里,我们将使用图像作为查询,然后在包含70,000张图像的数据库中搜索与之最相似的示例。排序是由每对图像在嵌入空间内的欧氏距离决定的。
使用Keras构建深度图像搜索引擎
使用Keras构建深度图像搜索引擎
结果表明,生成的嵌入是图像的高级表示,它捕获了所表示对象的最重要特征,而不受方向、光照或局部细节的过度影响,也没有经过明确的训练。
结论:
在这个项目中,我们研究了机器学习模块,它允许我们构建一个基于关键字和图像的搜索引擎,应用于图像集合。其基本思想是学习一个有意义的文本和图像的联合嵌入函数,然后利用嵌入空间中项之间的距离对搜索结果进行排序。
参考文献
  • Large Scale Online Learning of Image Similarity Through Ranking
  • Ups and downs: Modeling the visual evolution of fashion trends with one-class collaborative filtering
  • https://github.com/KinWaiCheuk/Triplet-net-keras/blob/master/Triplet%20NN%20Test%20on%20MNIST.ipynb
代码
重现结果 => https://github.com/CVxTz/image_search_engine


往期精彩回顾
TensorFlow2.0代码实战专栏(五):神经网络示例
OpenCV系列之轮廓特征 | 二十二
[资源分享] OpenCV最新的官方文档翻译
使用Keras构建深度图像搜索引擎长按扫码,关注我们

你与世界只差一个

磐创AI


嗨,你还在看吗?
磐创AI:http://www.panchuangai.com/ 智能客服:http://www.panchuangai.com/ TensorFlow:http://panchuang.net 推荐关注公众号:磐创AI

原创文章,作者:磐石,如若转载,请注明出处:https://panchuang.net/2020/02/11/968b10375b/

发表评论

登录后才能评论

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息