深度学习表征的不合理有效性——从头开始构建图像搜索服务(二)

简介: 还在为搜索引擎的工作原理感到困惑吗?看完本篇就可以自己动手构建搜图服务了。

接着上篇《深度学习表征的不合理有效性——从头开始构建图像搜索服务(一)》的内容,上次遇到的问题是搜索相似图的时候还是会出现瑕疵,因此本文介绍相关的处理办法

半监督搜索

       解决上文问题的常用方法是,首先使用目标检测模型,检测猫图像,然后对原始图像裁剪之后再进行图像搜索,这样做会很大程度地增加计算开销,如果可能的话,希望能够避免这种开销。
       有一种更简单的“hacky”方法,包括重新权衡激活值,这可以通过加载最初丢弃的最后一层权重来完成,并且仅使用与正在寻找的类索引相关联的权重来重新加权嵌入。例如,在下图中,使用Siamese cat类的权重来重新权衡数据集上的激活(用绿色突出显示)。

12加权嵌入


       根据Imagenet,Siamese cat中的 284类权衡激活,来研究它是如何工作的。
       正在搜索类似的图像 todataset / bottle / 2008_000112.jpg使用加权特征:
13
图像13

16


       可以看到,搜索一直偏向于寻找Siamese cat的照片,而不再展示任何的瓶子图像,此外,可能会注意到最后一张照片是一只羊!这就非常有趣了,此时的模型又导致了另外一种不同类型的错误,但模型更适合目前的任务需求。
       从上面的结果可以看出,通过宽泛方式搜索类似的图像,或者通过调整模型所训练的特定类别,使得模型向前迈出的了一大步,但由于使用的是在Imagenet上预训练的模型,因此仅限于1000个Imagenet类别。这些类别不能包罗万象,所以希望找到更加灵活的东西。另外,如果我们只是在不提供输入图像的情况下搜索猫呢?
       为了做到这一点,使用的不仅仅是简单的技巧,还需利用一个能够理解单词语义能力的模型。

文本-->文本

嵌入文本

       下面进入自然语言处理(NLP)世界,可以使用类似的方法来索引和搜索单词。
       从GloVe加载了一组预先训练的矢量,这些矢量是通过从维基百科上爬虫并学习该数据集中单词之间的语义关系而获得的。
       像之前一样创建一个索引,这次包含所有GloVe向量。之后就可以在嵌入中搜索类似的单词。
       例如,搜索said,返回[word,distance]列表:

  • ['said', 0.0]
  • ['told', 0.688713550567627]
  • ['spokesman', 0.7859575152397156]
  • ['asked', 0.872875452041626]
  • ['noting', 0.9151610732078552]
  • ['warned', 0.915908694267273]
  • ['referring', 0.9276227951049805]
  • ['reporters', 0.9325974583625793]
  • ['stressed', 0.9445104002952576]
  • ['tuesday', 0.9446316957473755]
           这似乎非常合理,大多数单词在含义上与我们的原始单词非常相似,或代表一个合适的概念。最后的结果(tuesday)也表明这个模型存在一些瑕疵,但它会让我们这种方法会让我们开始起步。现在,让我们尝试在模型中既包含单词,又包含图像。

一个大问题

       使用嵌入之间的距离作为搜索方法似乎看起来非常合理,大多数单词在含义上与原始单词非常相似,但对单词和图像的表示似乎并不兼容。图像的嵌入大小为4096,而单词的嵌入大小为300,如何使用一个来搜索另一个?此外,即使两个嵌入大小都相同,它们也会以完全不同的方式进行训练,因此图像和相关单词很可能不会发生有随机相同的嵌入。因此,需要训练一个联合模型。
图像<-->文本
       现在创建一个混合模型,可以从单词到图像,反之亦然。
       在本教程中,将第一次实践自己的模型,模型是从一篇名为DeViSE的优秀论文中汲取灵感。我们的想法是通过重新训练图像模型,并改变其标签的类型来结合这两种表示。
       通常,图像分类器被训练为从许多类中选择一个类别(Imagenet为1000类)。以Imagenet为例,转化最后一层为大小1000的一维向量来表示每个类的概率。这意味着模型没有语义理解哪些类与其他类相似,即将猫的图像分类为狗导致与将其分类为飞机的错误是一样的。
       对于混合模型,用我们的类别单词向量替换模型的最后一层,这允许模型学习到将图像语义映射到单词语义,这也意味着类似的类将彼此更接近(因为cat的单词向量比airplane更靠近dog)。我们将预测一个大小为300的语义丰富的单词向量,而不是大小为1000的单词向量,通过添加两个全连接层来实现此目的:

  • 一个大小为2000的中间层
  • 一个大小为300的输出层(GloVe单词向量的大小)
           以下是在Imagenet上训练模型时的样子:

14_jpeg


       这是修改后模型的样子:

15_jpeg

训练模型

       在数据集的训练集上重新训练我们的模型,以学习预测与图像标签相关联的单词向量。例如,对于具有类别cat的图像,尝试预测与cat相关联的300长度向量。训练需要一些时间,但这仍然要比Imagenet训练快得多。
       与通常的数据集相比,本文使用的训练数据(数据集的80%作为训练集,即800个图像)是微不足道的(Imagenet有一百万张图像)。如果使用传统的类别训练技术,我们不会指望模型在测试集上表现得非常好,并且也不会期望它在全新的例子上有不错的效果。
       一旦模型被训练好,就可以从上面获得GloVe单词索引,并通过运行数据集中的所有图像,将其保存到磁盘,构建图像特征的新快速索引。

标注

       现在可以轻松地从任何图像中提取标签,只需将我们的图像提供给训练有素的网络,保存出来的大小为300的矢量,并从GloVe中找到英语单词索引中最接近的单词。让我们试试下面这张图片——它的类别标签是瓶子,虽然它包含各种各样的物品。
图像16
       以下是生成的标签:

  • [6676, 'bottle', 0.3879561722278595]
  • [7494, 'bottles', 0.7513495683670044]
  • [12780, 'cans', 0.9817070364952087]
  • [16883, 'vodka', 0.9828150272369385]
  • [16720, 'jar', 1.0084964036941528]
  • [12714, 'soda', 1.0182772874832153]
  • [23279, 'jars', 1.0454961061477661]
  • [3754, 'plastic', 1.0530102252960205]
  • [19045, 'whiskey', 1.061428427696228]
  • [4769, 'bag', 1.0815287828445435]
           这是一个非常好的结果,因为大多数标签非常相关。这种方法仍然有提升空间,但它可以很好地掌握图像中的大多数元素。该模型学习提取许多相关标签,甚至从未经过训练的类别中提取到的!

使用文本搜索图像

       最重要的是,可以使用联合嵌入,输入任何单词都可以搜索图像数据库。只需要从GloVe获取预先训练好的单词嵌入,并找到具有最相似嵌入的图像即可。

使用最少数据进行广义图像搜索。

       首先从搜索dog这个词开始:

17


搜索 dog术语的结果
       结果相当不错,但是我们可以从标签上训练的任何分类器中都得到这个!
搜索 ocean术语的结果。
       模型了解 oceanwater类似,并从 boat类中返回许多物品。
       搜索街道又会发生什么呢?

18搜索“street”的结果


       从图中可以看到,返回的图像来自各种类别( cardogbicycle, bus, person),但大多数图像都包含或靠近街道,尽管我们在训练模型时从未使用过这个概念。因为通过预先训练的单词向量,利用外部知识来学习比简单类别在语义上更丰富的图像向量映射,所以模型可以很好地概括为外部概念。

无以言表

       英语虽然已经发展了很久,但还不足以为一切都有对应的词。例如,没有英文单词表示“躺在沙发上的猫”,但这是一个对输入搜索引擎完全有效的查询。如果想要同时搜索多个单词,就可以使用一种非常简单的方法,即利用单词向量的算术属性。事实证明,总结两个单词向量通常是非常有效的。因此,如果只是通过使用猫和沙发的平均单词矢量来搜索我们的图像,就可以希望获得非常像猫、像沙发一样的图像、或者在沙发上有猫的图像。

20多个单词的组合嵌入


       下面使用混合嵌入搜索

21搜索sofa+cat的结果


       从图中可以看到,结果不错。因为大多数图像都包含一些毛茸茸的动物和一个沙发。我们的模型只训练单个单词,也可以处理两个单词的组合,但还没有构建Google Image Search,但对于相对简单的架构来说,本文绝对是有用的。
       这种方法实际上可以很自然地扩展到各种域,感兴趣的读者可以应用于各自的领域之中。

结论

       希望读者能够发现这篇文章内容的丰富,它揭开了一些基于内容的推荐和语义搜索世界的神秘面纱,感兴趣的读者快上手试试吧。

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

作者信息

Emmanuel Ameisen,AI研究者
个人主页:https://twitter.com/EmmanuelAmeisen
本文由阿里云云栖社区组织翻译。
文章原标题《The unreasonable effectiveness of Deep Learning Representations》,译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文

相关文章
|
24天前
|
机器学习/深度学习 数据采集 算法
构建高效图像分类模型:深度学习在处理大规模视觉数据中的应用
随着数字化时代的到来,海量的图像数据被不断产生。深度学习技术因其在处理高维度、非线性和大规模数据集上的卓越性能,已成为图像分类任务的核心方法。本文将详细探讨如何构建一个高效的深度学习模型用于图像分类,包括数据预处理、选择合适的网络架构、训练技巧以及模型优化策略。我们将重点分析卷积神经网络(CNN)在图像识别中的运用,并提出一种改进的训练流程,旨在提升模型的泛化能力和计算效率。通过实验验证,我们的模型能够在保持较低计算成本的同时,达到较高的准确率,为大规模图像数据的自动分类和识别提供了一种有效的解决方案。
|
1月前
|
机器学习/深度学习 数据采集 PyTorch
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
|
26天前
|
机器学习/深度学习 Cloud Native Devops
深度学习在图像识别中的应用与挑战构建未来:云原生技术在企业数字化转型中的关键作用
【2月更文挑战第30天】随着人工智能技术的飞速发展,深度学习已成为图像识别领域的核心技术。本文将深入探讨深度学习在图像识别中的应用及其面临的挑战,包括数据预处理、模型选择、训练策略等方面的问题。通过对现有技术的分析和未来发展趋势的展望,为读者提供一个全面了解深度学习在图像识别领域的现状和未来的机会。 【2月更文挑战第30天】 随着企业加速其数字化转型的步伐,云原生技术已成为推动创新与灵活性的重要驱动力。本文深入探讨了云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,以及它们如何共同塑造现代应用开发和运维模式。通过分析具体案例,本文揭示了云原生技术如
|
4月前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
69 1
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
《深度学习初探:使用TensorFlow和Keras构建你的第一个神经网络》
《深度学习初探:使用TensorFlow和Keras构建你的第一个神经网络》
93 0
|
8月前
|
机器学习/深度学习 存储 PyTorch
深度学习实践篇 第一章:数据集读取和构建
简要介绍cifar数据集的使用和pytorch数据集的构建。
372 0
|
8月前
|
机器学习/深度学习 分布式计算 并行计算
探索UCI心脏病数据:利用R语言和h2o深度学习构建预测模型
本文的研究目的是基于UCI心脏病数据集[1],利用R语言和h2o深度学习框架构建一个预测模型,旨在准确预测个体患心脏病的风险。通过使用该模型,医疗专业人员可以更好地进行早期干预和预防措施,从而提高患者的生活质量和健康状况。
498 0
|
9月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow 初步:深度学习模型构建入门
TensorFlow 是由 Google Brain 团队开发的深度学习框架,它提供了一种高效且灵活的方式来实现和训练各种深度学习模型。本文将引导你通过 TensorFlow 的基础功能,帮助你构建你的第一个深度学习模型。
|
10月前
|
机器学习/深度学习 搜索推荐 算法
构建智能推荐引擎:协同过滤和深度学习的结合
推荐引擎是现代应用程序的重要组成部分,它们可以根据用户的兴趣和行为,提供个性化的推荐内容。在本文中,我们将探讨如何构建一个智能推荐引擎,结合协同过滤和深度学习技术,以提供更准确和个性化的推荐结果。
121 0
|
11月前
|
机器学习/深度学习 数据可视化 Java
深度学习--Pytorch构建栈式自编码器实现以图搜图任务(以cifar10数据集为例)
本文旨在使用CIFAR-10数据集,构建与训练栈式自编码器,提取数据集中图像的特征;基于所提取的特征完成CIFAR-10中任意图像的检索任务并展示效果。
146 0