首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pinterest视觉搜索工程师孙彦:视觉搜索不是“鸡肋”

作者 | Debra

编辑 | Emily

AI 前线导读:作为一家以视觉为主的图片社交网站,Pinterest 丰富多彩的图片内容深得用户喜爱。但图片不同于文字,在数量巨大的图片资源中准确找到自己想要的目标素材,成为用户最大的需求。于是,视觉搜索技术应用而生。一方面,从技术层面上,Pinterest 的视觉搜索功能中应用了哪些深度学习和 AI 技术?另一方面,在移动搜索时代,有人说视觉搜索是搜索领域的未来,如今很多企业也已经开始将其应用于产品和服务中,包括电商和社交网站等。然而,也有人质疑视觉搜索根本就是“鸡肋”,满足不了用户多种多样的需求。那事实究竟是怎样的呢?我们来一探究竟。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

视觉搜索

视觉搜索是最近计算机视觉的热门研究领域,又称基于内容的图像检索。这个研究热点主要由井喷式增长的在线图片和搜索引擎的流行所驱动,目前,Pinterest Lens(Pinterest 的搜索类似图片应用)、Google Goggles(Google 的照相搜索 App)、Google Similar Images(Google 的相似图片搜索)和 Amazon Flow(Amazon 的增强现实购物应用)是几个商业化视觉搜索系统中较为成功的案例。今天我们以 Pinterest 为例,详解视觉搜索技术应用的 AI 相关技术和架构,以及探讨一下视觉搜索是不是一些人口中所谓的“鸡肋”。

基于 AlexNet 和 VGG 结构提取 fc6 和 fc8 层特征表现

Pinterest 目前拥有超过 2 亿的月活用户以及超过 100 亿张图片,产品的独特之处在于能为每位用户创建一个特有的“品味图谱”,并且以此为基础,推荐他可能感兴趣的事物。图片是每个 Pin 的焦点,所以视觉特征在为用户发现兴趣,灵感和相关内容上起到了非常重要的作用。

举个例子, 用户 Pin 一张关于 coach 包的图片到一个名为”coach totes”的 Borad 中,这一过程对 coach 包这个主题就创建了集合。这个“用户Borads图片“图谱关系包含丰富的关于图片和它们语义关系的信息。当这张 coach 包的图片被 Pin 到一个 Borad 中,表明在这个新 borad 和其他所有包含这个图片的 board 有一个“策展联系”。通过这些描述图片、图片的 borad 和其用户的联系,相关的大数据(比如,图片的注释)能够不断增长。

得益于近几年计算机视觉的发展,尤其是卷积网络的使用和 GPU 的发展,使图片分类和物体检测技术突飞猛进, Pinterest 视觉搜索中采用了以下技术:

图片特征提取过程中,从深度卷积神经网络(CNNs)的活性中间层中提取深度特征,基于AlexNet 和 VGG 的结构,来提取fc6 和 fc8 层的特征表现。这些特征为了有效地表现被二值化,并且用汉明距离(Hamming Distance)进行比较。Pinterest 使用开源的 Caffe 架构,在多 GPU 机器上来训练和推算 CNNs。

(From Pinterest Visual Search talk@Berkeley 2016)

分布式可视化搜索系统

端对端搭建执行一个视觉搜索系统,来检索 Pinterest 中的数十亿图片时, 根据平衡经费时间限制和快速实现的需要, 着重致力于以下几个方面:

图片中特征向量的提取以及物体检测

搭建指纹增量服务为 Pinterest 所有的图像计算特征

根据 Pinterest 各种产品应用的不同性能以及成本需求,搭建灵活可重构的分布式可视化搜索系统

本文着重介绍了(2) 和(3)两个方面:

搭建指纹增量服务为 Pinterest 所有图像计算特征

孙彦向 AI 前线介绍道,Pinterest 多数的视觉应用依靠于拥有一个完整的视觉特征集合,这个集合以适合于批量处理的格式存储。因集合包含超过十亿独特的图像, 保持这个数据的更新是具有挑战性的,Pinterest 需要增量地更新特性集,并且尽可能避免不必要的重新计算。

指纹增量服务 (Fingerprint Service),就是根据上述需求 Pinterest 所有的图像计算特征,通过使用在 Amazon EC2 上的工作群。它主要在两个场景下逐步更新特征集合:有新图片上传到 Pinterest,和需要特征迭代时。

Pinterest 采用的一个办法是是将图片集划分到由上传时间确定的时代(epochs)组中,并且为每个特性类型(全面的,本地的,深度特征)的每个版本维护一个单独的特性存储区。这些特征类型被大量存贮在 Amazon S3,以特征种类、版本、时间来组织管理。当数据完全更新时,每一个特征存储都会包含所有的时代组。在每一次运算中,系统发现每个特征的缺失时代组,随之安排分布式队列工作来为缺失组计算结果。每一天,一个带有当天唯一上传时间的新特征组被加入到 Pinterest 的图片集合中,触发队列工作为那个日期生成缺失的特征。另外如果生成某个特征的算法或者参数被修改了,或者有新的特征加入,那么新的特征存储计算工作将被触发,同时所有的年代组会为修改/新增特征重新计算。这个方法保证久的图片 / 不改变的特征不受影响从而节省了计算量。

这些特性会被复制到以便其他工作访问的形式, 每张图片所有这些特征会合并,组成它所有特征的指纹(fingerprint),然后指纹会被复制分享,形成为根据图片特征(应用了 MD5 hash)随机访问的排序文件。这些加入的指纹文件会定期地被 rematerialzed,但是那些昂贵的特征计算只需要每张图片计算一次。

具体流程如下图所示 :

(来自 https://labs.Pinterest.com/user/themes/Pinlabs/assets/paper/visual_search_at_Pinterest.pdf)

根据 Pinterest 各种产品应用的不同性能以及成本需求,搭建灵活可重构的分布式可视化搜索系统

在 Pinterest,分布式可视化搜索系统有不同的应用。其中一个应用是发掘相似外表的产品(Pinterest Similar Looks)以及其他包括近似重复检测和内容推荐等。在所有这些应用中,视觉相似结果是通过 Visualjoins 的分布式索引来计算的。由于每个用例有不同的性能和成本需求,Pinterest 的搜索基础被设计成灵活并且可重构的。下图展示了搜索基础的流程图。

https://labs.Pinterest.com/user/themes/Pinlabs/assets/paper/visual_search_at_Pinterest.pdf)

首先 Pinterest 用 Hadoop 从 Visualjoins 创造了分布式图像索引。每台机器包含索引(和特征),这些索引和整个图片集合的随机分散的子集相关。这里使用了两类索引:

第一种是基于磁盘(和部分内存缓存)的 token index,将每个矢量量化特性(比如,视觉词汇 token)与图像文档 ID 的展示列表关联起来。这与基于文本的图像检索系统类似,只是文本被视觉标记所替代。第二个索引是一个视觉特性和 metadata 的内存存储,比如,图像注释,以及从“用户board图像”图计算得出的主题向量。第一类适合于快速(但模糊)查表,第二类适合于更精确(但较慢)排序优化。

每一台机器运行一个 leaf 排序器,从使用视觉特征的索引中计算 k 最近邻(k-nearest neighbors),然后使用其他非视觉特征重新排序顶部的候选数据。在某些情况下,leaf 排序器跳过 token 索引,直接用类似 KNN 方法从特征树索引中检索 k 最近邻。另一台机器上的一个根排序器将会从每个 leaf 排序器取回最高分数的结果,并且将这些结果整合,然后返还给用户(为了处理 Pinterest 的实时特征提取器生成的新指纹,Pinterest 有一个可视化搜索渠道的线上版本,来运行和上述非常相似的过程)。(本部分采访嘉宾借鉴了 https://zhuanlan.zhihu.com/p/27381765 的翻译,感谢知乎用户“李粒PM/Brony/Geology”的翻译)

下面举个例子来看下 Pinterest 的视觉搜索流程。

当一个视觉搜索 query 被提交后, Pinterest 从上文提到的 FingerprintService 提取它的深度视觉特征以及其他特征

接下来根据这个 query 的类型(来自不同的产品应用),根据上文的索引不同的 shards 会收到 query 并在每一个 shard 内部根据 query 图片的深度特征做 KNN search,并找到 N 个(N >top K) 候选图片

同一个 shard 内部会进行重新排序 (rerank) 并把 top K 结果返回根排序器。

根排序器根据 shards 返回的结果做整合并把结果返还用户。

(From Pinterest Visual Search talk @ Berkeley 2016)

据了解,Pinterest 已经在多款应用和产品中采用视觉搜索技术,包括相关 Pins、Flashlight 等。

Related Pins

当用户点击一个 Pin,这个 Pin 下方会显示一系列相关的 Pins。

Flashlight

用户可以利用搜索框锁定图片中的物体,得到类似的物体 / 商品。

Lens

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180406G0JLRD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券