导读:作为一家以视觉为主的图片社交网站,Pinterest 丰富多彩的图片内容深得用户喜爱。但图片不同于文字,在数量巨大的图片资源中准确找到自己想要的目标素材,成为用户最大的需求。于是,视觉搜索技术应用而生。一方面,从技术层面上,Pinterest 的视觉搜索功能中应用了哪些深度学习和 AI 技术?另一方面,在移动搜索时代,有人说视觉搜索是搜索领域的未来,如今很多企业也已经开始将其应用于产品和服务中,包括电商和社交网站等。然而,也有人质疑视觉搜索根本就是“鸡肋”,满足不了用户多种多样的需求。那事实究竟是怎样的呢?我们来一探究竟。
视觉搜索
视觉搜索是最近计算机视觉的热门研究领域,又称基于内容的图像检索。这个研究热点主要由井喷式增长的在线图片和搜索引擎的流行所驱动,目前,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
用户可以对感兴趣的物品拍照并得到更多关于物品信息以及类似的图片。
(来自 https://arxiv.org/pdf/1702.04680.pdf )
- Shop the look
用户可以点击图片中的商品从而在 Pinterest 上浏览并购买。
视觉搜索与电商的结合
Pinterest 的视觉搜索可以实现为电商和各种客户导流的服务功能,是该公司变现的途径之一,在孙彦眼里,视觉搜索技术与电商的结合前景如何呢?
孙彦告诉 AI 前线,“这是一个充满机会并且非常有希望的方向,也是我司在 2018 年着重发展的一个目标。调查显示,Pinterest 93% 的用户在购买之前都使用Pinterest 浏览计划,利用视觉搜索技术为有购买意向的用户提供精准的结果会帮助公司在电商这个方向更好的发展。”
事实上,由于视觉搜索技术与电商平台图片搜索的高度契合,这项技术已经被很多电商平台采用,例如国内的阿里巴巴、京东等。
相比之下,各平台使用的视觉搜索技术大同小异,那Pinterest 的视觉搜索技术有何独到之处?又是如何在竞争中取得优势的呢?
孙彦说道,“我们的初衷是帮助用户发现并推荐他感兴趣的事物, 在电商方向的应用是其中之一, 但更多时候, Pinterest 希望帮助用户从海量信息中发现用户有兴趣的事物和创意, 并在现实生活中探索实现。与竞争者不太一样的是, 我们的大量用户在使用过程中往往是抱着explore 或是模糊查询的想法, 比如用户刚买了房子, 想寻求某种风格的客厅装修, 或者用户在筹备婚礼时想寻求设计请帖的灵感, 甚至于在超市看到特价的龙虾于是想寻求海鲜晚餐的菜谱等等。 我个人认为, 用户极其多样化的需求是Pinterest 不同于其他竞争对手的主要特点, 这一点也是我们产品开发, 视觉搜索技术发展的灵感源泉,让Pinterest 努力做得更好。”
到底是不是“鸡肋”?
视觉搜索听起来高端大气而且非常有趣,但这种技术的价值何在?它的应用场景和商业化潜力有多大?各个电商平台的视觉搜索功能用起来体验怎么样呢?带着这些问题,AI 前线对当前国内比较流行的淘宝、京东、蘑菇街、美团、美团外卖、华为商城app 进行了视觉搜索功能实际效果亲测比对。
图1
(图左 ,图右)
以上为AI 前线亲测几家电商平台视觉搜索结果截图,其中图左和图右均为使用同一张图片(图1,颈枕)进行拍照搜索的结果,图左为淘宝,图右为京东,而蘑菇街、美团、美团外卖、华为商城app 目前还未上线视觉搜索功能,只能通过扫描二维码获得商品信息。从图中可以明显看出,淘宝的搜索结果优于京东,而京东的搜索结果种类、颜色、形状均与测试图像相差甚远。
对这几家平台的比对目的不在于“黑”任何一家平台或是视觉搜索技术,只是出于测试视觉搜索功能的便利性究竟如何,请轻拍砖。
这次简单的测试结果似乎有点尴尬,由于技术上的限制,视觉搜索技术的功效在一定程度上确实挺“鸡肋”的,甚至满足不了用户基本的需求。同时,这也反映出视觉搜索技术的难度所在,以及在商业化道路还有很大空间。
但这门技术真的就如此而已吗?还得靠数据说话。据Pinterest 实验室给出的数据,在视觉搜索功能的帮助下,Pinterest 的公司业务和用户体验都有所提高。 线上实验表明, 用户在related Pins 的参与度在视觉搜索技术的帮助下有了5 -10% 的提高。( https://labs.Pinterest.com/user/themes/Pinlabs/assets/paper/visual_search_at_Pinterest.pdf )
另一方面,Pinterest 的广告投放也在利用了视觉深度特征后精准度点击率提高,目前三星和 LG Electronics 都在移动设备上植入了 Pinterest 的视觉搜索 API, 给用户带来更好的视觉搜索体验。
“我个人认为, 视觉搜索代表移动搜索未来的一个主要方向。视觉搜索是可以改变人类生活的, 一个例子就是在零售业,“以图搜图”帮助用户解决无法用语言精准描述某个产品的难题,提升购物体验,改变用户的行为。 同时无人零售, 安防识别, 无人车技术等都代表了 Pinterest 日常生活中有可能被视觉搜索深深影响和改变的方向。”孙彦对视觉搜索在移动搜索方向的前景做出了如此的预测和评价。
采访嘉宾介绍
孙彦,毕业于美国耶鲁大学计算机系(硕士)。曾任职 Workday、Groupon 等公司从事算法推荐、机器学习相关的工作。目前就职于 Pinterest 旧金山总部的视觉搜索团队,担任高级工程师。自 2014 年入职 Pinterest 以来,先后作为 Topics、Ads-Targeting 等团队的初创人员,为 Pinterest 国际用户活跃度和 Revenue 增长作出直接贡献。目前专注于推荐系统实现,机器学习模型的构架和特征工程的研发。工作之余喜欢钻研厨艺。
评论