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

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

半监督搜索

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

加权嵌入

根据Imagenet,Siamese cat中的284类权衡激活,来研究它是如何工作的。

正在搜索类似的图像todataset / bottle / 2008_000112.jpg使用加权特征:

图像13

可以看到,搜索一直偏向于寻找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上训练模型时的样子:

这是修改后模型的样子:

训练模型

在数据集的训练集上重新训练我们的模型,以学习预测与图像标签相关联的单词向量。例如,对于具有类别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这个词开始:

搜索dog术语的结果

结果相当不错,但是我们可以从标签上训练的任何分类器中都得到这个!

搜索ocean术语的结果。

模型了解oceanwater类似,并从boat类中返回许多物品。

搜索街道又会发生什么呢?

搜索“street”的结果

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

无以言表

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

多个单词的组合嵌入

下面使用混合嵌入搜索

搜索sofa+cat的结果

从图中可以看到,结果不错。因为大多数图像都包含一些毛茸茸的动物和一个沙发。我们的模型只训练单个单词,也可以处理两个单词的组合,但还没有构建Google Image Search,但对于相对简单的架构来说,本文绝对是有用的。

这种方法实际上可以很自然地扩展到各种域,感兴趣的读者可以应用于各自的领域之中。

结论

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

以上为译文,由阿里云云栖社区组织翻译。

译文链接
文章原标题《The unreasonable effectiveness of Deep Learning Representations》

译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文。

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

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

    摘要:还在为搜索引擎的工作原理感到困惑吗?看完本篇就可以自己动手构建搜图服务了. 教会计算机以人的方式看图 为什么是相似搜索? 一张图片胜过千言万语,甚至N行代码.网友们经常使用的一句留言是,no p ...

  2. 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要 ...

  3. 【深度学习】:《PyTorch入门到项目实战》(十二)卷积神经网络:填充(padding)和步幅(stride)

    [深度学习]:<PyTorch入门到项目实战>(十二)填充(padding)和步幅(stride) ✨本文收录于[深度学习]:<PyTorch入门到项目实战>专栏,此专栏主要记 ...

  4. 【深度学习模型】智云视图中文车牌识别源码解析(二)

    [深度学习模型]智云视图中文车牌识别源码解析(二) 感受 HyperLPR可以识别多种中文车牌包括白牌,新能源车牌,使馆车牌,教练车牌,武警车牌等. 代码不可谓不混乱(别忘了这是职业公司的准产品级代码 ...

  5. 深度学习预测酶活性参数提升酶约束模型构建从头环境搭建

    前言 这项工作开发了一种用深度学习来预测酶活性参数的方法(DLKcat),主要采用了针对底物的图神经网络和针对蛋白质的卷积神经网络.通过从公开的数据库中获取和数据预处理,最终获得了超过一万六千条高质量 ...

  6. 深度学习常用的数据集,包括各种数据跟图像数据。

    1.   免费数据集下载(持续更新中...) 2.[导读] "大数据时代",数据为王!无论是数据挖掘还是目前大热的深度学习领域都离不开"大数据".大公司们一般会 ...

  7. 深度学习(五十六)tensorflow项目构建流程

    tensorflow项目构建流程 博客:http://blog.csdn.net/hjimce 微博:黄锦池-hjimce   qq:1393852684 一.构建路线 个人感觉对于任何一个深度学习库 ...

  8. 【深度学习】保姆级教程,用PyTorch构建第一个神经网络

    PyTorch是一个基于python的科学计算包,主要针对两类人群: 作为NumPy的替代品,可以利用GPU的性能进行计算 作为一个高灵活性.速度快的深度学习平台 在PyTorch中搭建神经网络并使用 ...

  9. 【深度学习】揭秘2021抖音和快手APP图像修复背后的核心技术,毫无ps痕迹

    作者 | 对白 出品 | 对白的算法屋 编者寄语: 本文看完,相信你会对抖音和快手APP中使用的图像修复技术有一番了解和掌握. 大家好,我是对白. 由于CNN.GAN.Transformer等模型在C ...

最新文章

  1. jsp 使用base标签 没有作用_终于弄明白衣服上,使用前请移除的标签到底是什么,起什么作用...
  2. 清华大学计算机网络研究中心,清华大学信息网络工程研究中心简介
  3. 012_logback中的DBAppender
  4. 【转】Linux开机启动管理---systemd使用
  5. 一个程序员的爱情故事
  6. YOLOv5 的妙用:学习手语,帮助听力障碍群体
  7. 北鼎机器人_北鼎T752已入手,我的感受
  8. Python风格总结:日期操作
  9. 二叉树的遍历(先序/中序/后序,递归/迭代)与搜索
  10. 网管学习日记-浮动静态路由和负载均衡
  11. 逆clarke变换_克拉克(CLARKE)及帕克(PARK)变换.pdf
  12. TI公司CC系列的各种芯片的区别 CC2430 CC1100
  13. 深度分析:OA产品的技术发展过程及未来趋势
  14. selenium使用谷歌浏览器
  15. 网络营销推广怎么做 一封神奇的文案策划背后的真相
  16. 事件分发(EventDispatcher)模式
  17. 华为运维客户端SeoClient接收返回码错误
  18. 运用Xmap将xml数据转换成javabean
  19. Android APK 32位和64位 的区别
  20. 关于Red Hat Enterprise Linux Server 5 使用国内163 yum 源

热门文章

  1. BGP小实验——选路不困难,只要有方法
  2. python笔记之序列(tuple的基本使用和常用操作)
  3. Windows Server 笔记之活动目录,域的联系和区别
  4. 5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装
  5. websocket中发生数据丢失_什么是WebSocket,它与HTTP有何不同?
  6. linux性能并发 带机量,性能测试笔记(一):吞吐量与并发数
  7. c语言 游戏程序,C语言做的推箱子游戏源程序
  8. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  9. 树莓派4开机黑屏_树莓派4降价啦,2Gb内存的树莓派4降至35美元
  10. php 获取对象中的元素个数组长度,获取php类中的数组长度