【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

如何做好大规模视觉搜索?eBay 基于实践总结出了 7 条建议

  • 2018-12-31
  • 本文字数:3788 字

    阅读完需:约 12 分钟

如何做好大规模视觉搜索?eBay基于实践总结出了7条建议

我们很荣幸于 2018 年 11 月 2 日参加ODSC West 2018的视觉搜索分会讨论,这篇文章是我们对发表在KDD2017上的论文“eBay 视觉搜索(Visual Search at eBay)”的总结。


假设你在一个看起来像一个大仓库的商店中,有许多用正整数标记的通道。eBay 在任何特定时间都有超过 1B 的活跃商品列表。所以,如果 eBay 是这样一家商店,它看起来就像 1999 年的电影《黑客帝国》中的无限储藏室。假设你有一张打印出来的管道零件目录,而你不知道你所寻找的零件的型号。你找到店员,指着纸上的零件图片。店员给你说了几个通道,比如说 183, 5276, 14098 号通道。如果没有这个信息,你必须经过每个通道,然后将管道的图片与通道上的每个项目进行比较才能找到你所要的零件。


如果这些零件看起来非常相似,这个比较任务就会变得非常复杂。在这种情况下,你需要注意每个细节,如颜色、形状、大小、品牌、包装等。如果通道是按商品的类型组织的,那么你可以从每个通道中大致查看一些商品,然后在相关的通道上花更多的时间去寻找。这是一项非常复杂的任务,如果你错过了感兴趣的项目,你可能需要把所有通道查找很多遍才能找到它。对于大规模搜索情况,算法搜索从本质上简化了这个过程。


正如我们的 KDD 论文中提到的,我们训练一个神经网络,从给定的图像中预测叶子类别(如图 1 所示)。这些叶子类别很像我们的“仓库”中不同的通道。这个基于神经网络的分类器就像我们的店员识别商品可能处在的通道位置。我们使用神经网络中Softmax层预测的概率,选择前几个预测概率最高的叶子类别。


图1 列表由层级分类结构组织,其中终端条目称为“叶子类别”。这些标签可以用来训练一个深度神经网络来预测给定图像的叶子类别。


图 1 列表由层级分类结构组织,其中终端条目称为“叶子类别”。这些标签可以用来训练一个深度神经网络来预测给定图像的叶子类别。


一旦我们找到了通道,我们需要知道如何比较两个图像(查询项目和货架上的项目)。我们用一个紧凑的签名来表示每幅图像,这个签名由一组数字组成的矢量表示。这个签名由相同的弱监督神经网络来提取。我们通过训练带有Sigmoid层的网络来预测叶子类别,提取二进制失量(由 1 和 0 组成)。我们发现最好在所有的步骤中尽可能多地使用监督信息。由于对于每一个叶子类别,我们有许多多样的数据,所以我们训练网络来预测叶子类别。


你可以看下 ECCV2018 的“探索弱监督预训练的极限(Exploring the Limits of Weakly Supervised Pretraining)”论文,以了解预训练大型网络并迁移到其他任务的强大能力。这种弱监督以及训练期间的数据扩充(如裁剪、翻转、旋转)能够帮助网络忽略图像背景,并更多地关注图像的关键部分,从而产生紧凑的语义签名。这些签名容易进行对比。在二进制表示的情况下,例如本文的情况,我们可以基于汉明距离来计算匹配的比特位数。汉明距离相似性可以用来排序叶子类别中匹配的项目。匹配的比特位越多,匹配程度越高。


在大规模的商业视觉搜索中我们面临的主要挑战包括:


  • 图像质量和构成不统一

  • 商品存货清单比较大

  • 商品存货清单严重细粒度

  • 需要简单的架构和模型,便于维护

建立大规模视觉搜索系统的建议

下面,我们总结了一些构建大规模的视觉搜索系统的建议。这些建议也适用于非视觉或多模态系统。

1. 理解数据,并使用分层抽样

数据是确定整个过程策略的核心。图像质量可能会引入复杂性,需要谨慎处理。了解目录中的图像以及用户在视觉搜索期间上传的图像非常重要。图 2 给出了 eBay 手提包存货的一个子集的可视化结果。背景的复杂性以及手提包属性的复杂性混合在一起。图 3 表明了另一种情况:当引入相机姿态时,相同的对象可以有许多不同的视角。当我们训练神经网络时,使用多样性的、有代表性的图像集是非常关键的,以使神经网络能够处理数据集中出现的各种情况。


图2 使用t-SNE对eBay的手袋图像的可视化。注意,大约40%的图像具有复杂的背景,略微超过10%的图像具有白色背景。用户上传的图像有更多的变化,比如旋转。


图 2 使用 t-SNE 对 eBay 的手袋图像的可视化。注意,大约 40%的图像具有复杂的背景,略微超过 10%的图像具有白色背景。用户上传的图像有更多的变化,比如旋转。


图3 一个名为“法拉利PUMA~红皮运动鞋~男式8,5号(女式10号)”的eBay商品。同样的商品,非常不同的图片!


图 3 一个名为“法拉利 PUMA~红皮运动鞋~男式 8,5 号(女式 10 号)”的 eBay 商品。同样的商品,非常不同的图片!


训练集的大小由诸如我们想要预测的标签数量、每个标签内数据的多样性、训练结构带来的内存和计算约束,以及训练这种系统的时间预算等因素共同决定。当我们为神经网络创建训练集时,我们对叶子类别、销售商、商品状态、品牌等使用分层抽样,最后去除重复样本,以确保数据丰富的多样性。

2. 数据增强是关键,特别是图像旋转。

当训练数据不能包含真实场景中可能发生的所有变化时,数据扩充是训练神经网络的关键步骤。当用户使用手机拍摄对象时,很可能图像出现被裁剪、旋转、变得模糊或者没有被缩放到合适的尺寸等情况。数据增强(图 4)生成数据中的各种变化,尤其是当这些变化容易出现在真实场景中,但是往往不会出现在 eBay 商品列表训练集中时。举个例子,eBay 商品列表中的图像不太可能旋转。然而,这种情况在用户上传的图像中经常出现。因此,我们发现图像旋转是数据增强中的一个重要操作。图像旋转在数据增强中经常被忽略,但是对于视觉搜索来说是十分重要的。


图4 数据增强使我们能够从单个样本中产生更多的变化。这里展示几个选定的数据增广操作。图像旋转往往被忽略,但实际上它非常重要。


图 4 数据增强使我们能够从单个样本中产生更多的变化。这里展示几个选定的数据增广操作。图像旋转往往被忽略,但实际上它非常重要。

3. 提取语义签名时尽可能多地使用监督信息

正如上文中提到的,尽可能多地使用监督信息是非常重要的。这有助于训练分类器关注信息性内容而忽略其他非信息性区域。当实际任务(测量图像对之间的相似性)没有可用标签时,最好利用低采集成本、数量庞大且多样的数据进行强监督(例如叶子类别的预测结果)。

4. 签名的熵分析

这一步通常会被大型信息检索系统的系统设计所忽略。评估给定的签名容量内是否包括了足够的有效信息是至关重要的。例如,如果我们使用 8 位数字来表示二进制签名,我们可以表示多达 28 个独特的概念。在最佳情况下,每个数位值为 1 的频率为 50%。我们可以通过计算系统的熵,得到系统的有效比特长度,并与实际比特长度进行比较。有些情况下允许系统松弛来包容系统中的冗余不失为一个好办法(图 5),防止某些数位受到噪声和扰动的影响。


图5 最优比特位占用对于最优信息表示是至关重要的。这张图片来自我们的论文,与<a href=


ImageNet 对应。84.1%的数位在 45%到 55%的数据上是激活的(=1)。在系统中有一些冗余是很好的,因此对于所有比特来说频率不完全是 50%。" />


图 5 最优比特位占用对于最优信息表示是至关重要的。这张图片来自我们的论文,与ImageNet对应。84.1%的数位在 45%到 55%的数据上是激活的(=1)。在系统中有一些冗余是很好的,因此对于所有比特来说频率不完全是 50%。

5. 当标签为粗粒度标签时,类内方差是很重要的。

我们使用粗粒度叶子类别标签代替产品 ID 来训练神经网络。部分原因是由于叶子类别虽然是粗粒度的,但是更容易获得。并且在服装和家具等类别中,有些商品没有产品 ID。典型分类系统的目标是最小化类内方差。理想情况是类内方差为 0。此时,一个类的所有样本都会坍塌成一个点(见图 6)。


例如,运动鞋的所有样本都会坍塌到一个点。但是,有很多独特的产品也属于“运动鞋”叶子类别,我们希望能够通过签名相似性找到它们。因此,我们认为,当标签为粗粒度但是需要进行细粒度搜索时,类间方差应该很高,但是类内方差也应该很高。这可以通过计算签名的熵来衡量,正如前面一条建议中所讨论的。


图6 分类器的推荐一般是类内方差小而类间方差大。然而,我们要做到的是更好的细粒度搜索,因此类间方差大、类内方差大是很重要的。当每个聚类簇中的点都坍塌到单个点时,不可能进行细粒度匹配。该图显示了使用二进制签名绘制的ImageNet中的五个类,其中来自相同类的样本属于相同类型(与产品类别相同)。类内方差对于商业的大规模视觉搜索变得更加重要,其中我们使用粗粒度类别标签(叶子类别),目的是细粒度搜索(产品)。


图 6 分类器的推荐一般是类内方差小而类间方差大。然而,我们要做到的是更好的细粒度搜索,因此类间方差大、类内方差大是很重要的。当每个聚类簇中的点都坍塌到单个点时,不可能进行细粒度匹配。该图显示了使用二进制签名绘制的 ImageNet 中的五个类,其中来自相同类的样本属于相同类型(与产品类别相同)。类内方差对于商业的大规模视觉搜索变得更加重要,其中我们使用粗粒度类别标签(叶子类别),目的是细粒度搜索(产品)。

6. 用排除法提高搜索速度和精度

专为高速度和高精度而设计的排除法具有强大的能力。例如,如果输入图像包含运动鞋,那么没有必要搜索裙子、桌子、计算机的库存清单。我们在 KDD 论文中提出,通过使用强分类器来预测前几个可能的叶子类别(通道)来减少搜索空间和提高精度(裙子的签名与鞋的签名不会混淆)是非常有效的。

7. 绝对 vs.累积 top-k 划分

我们使用强分类器,一个使用强叶子类别标签训练的深度神经网络,来预测首选叶子类别(通道)。当首选预测的置信度较高时,则不需要搜索其他分区。然而,当首选预测不确定时,最好包括其他竞争分区。因此,我们建议使用累计 top-k 类别来获得更好的搜索精度,并且只在要求精确匹配的情况下使用绝对 top-k,即使这样做的成本较高。详情请参阅图 7。



图 7 假设我们使用前 5 个预测叶子类别,通过排除法来缩小搜索空间。我们建议使用基于累积分数而不是绝对分数的前 5 位类别。只有当精度没有召回率那么重要时,才使用绝对分数,例如在场景中不计代价查找精确匹配的情况。可以在KDD论文中找到具体细节。我们在这个表格中给出了三个场景,得分阈值为 0.9。当置信度较低时,累积分数使用更多的类别(如 a、c 中的灰色单元格所示),当置信度较高时,累积分数使用较少的类别(如 b 中的灰色单元格所示)。

结论

在这篇文章中,我们介绍了七条构建大规模视觉搜索的建议。此外,我们也建议最小化人工的作用(包括用于评估),周期性地重新训练模型以应对数据分布的变化,并且为了便于维护,将模型的数量保持在最小值。


想了解更多细节,请阅读我们发表在 KDD2017 的论文:“eBay视觉搜索(Visual Search at eBay)”。


查看英文原文:Seven Tips for Visual Search at Scale.


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2018-12-31 08:006072
用户头像

发布了 52 篇内容, 共 28.1 次阅读, 收获喜欢 72 次。

关注

评论 2 条评论

发布
用户头像
沙发
2018-12-31 13:08
回复
用户头像
都没人看吗
2018-12-31 13:07
回复
没有更多了
发现更多内容

软件测试--selenium安装使用

测试人生路

软件测试

研发管理101军规#003 实战规模化敏捷:从8人到百人的敏捷之路

PingCode

程序人生 Scrum 敏捷开发

林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 中间件

Java 程序经验小结:用私有构造器或者枚举类型强化Singleton属性

后台技术汇

28天写作

mysql字符串字段索引优化

瞌睡的李先生

MySQL 索引

安卓开发在线!字节跳动Android研发岗这些知识点内部泄露出来了,已拿到offer

欢喜学安卓

android 程序员 面试 移动开发

普通人必须掌握的五个必学理财知识

v16629866266

架构师训练营第二周作业 - 命题作业

阿德儿

细节决定成败!致Android高级工程师的一封信,实战解析

欢喜学安卓

android 程序员 面试 移动开发

WebRTC ICE 状态与提名处理

阿里云视频云

阿里云 WebRTC 通信 流媒体开发 流媒体传输

阿里P8内部架构核心学习知识笔记在各大互联网上流传,限时开放下载

Java架构之路

Java 程序员 架构 面试 编程语言

新鲜出炉!阿里内部开源SpringCloud Alibaba全解(全彩版)全网首发

Java架构追梦

Java 学习 架构 面试 SpringCloud Alibaba

工业传感器:工业互联网的第一道门

浪潮云

工业互联网

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

Java 程序员 架构 面试 编程语言

electron实战练习-三个文件实现一个命令行终端

OBKoro1

node.js Electron electron实战 命令行终端 electron学习

又出神作!阿里技术官再出山,操作性超强的Spring事务+AOP实践手册

比伯

Java 编程 程序员 架构 面试

备战2O2I新年资料

ios 面试

顶级!13位专家力荐Spring5为企业级开发提供一站式方案

996小迁

Java spring 编程 架构 面试

快速入门案例实战:电商网站商品管理(一)

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

盘点2020 | 人生是一场马拉松-OBKoro1的2020年年终总结

OBKoro1

2020 大前端 年终总结 OBKoro1

GrowingIO Design 组件库搭建之开发工具

GrowingIO技术专栏

设计 大前端

废弃fastjson!大型项目迁移Gson保姆级攻略

Zhendong

Java json Gson Fastjson

架构师训练营第二周作业 - 学习总结

阿德儿

我以为自己够牛逼了,直到看到了Alibaba专家的面试笔记,我学习了三个月,却入职京东,税前36K

Java架构之路

Java 程序员 架构 面试 编程语言

新思科技静态应用安全测试解决方案获得Forrester Wave认可

InfoQ_434670063458

新思科技 Forrester Wave 静态应用安全测试

低代码开发平台的技术路线

Sam678678

最近线上发生的两个坑爹锅

艾小仙

后端

数字货币量化对冲搬砖套利交易软件APP系统开发

系统开发

Redis 用的很溜,了解过它用的什么协议吗?

古时的风筝

redis RESP Redis 协议

2020DevOps状态报告——变更管理

禅道项目管理

DevOps 运维 开发 趋势 自动化测试

如何对AD和Exchange进行安全加固满足护网需要?

嘉为蓝鲸

安全 asm AD 邮件系统 权限

如何做好大规模视觉搜索?eBay基于实践总结出了7条建议_文化 & 方法_Fan Yang_InfoQ精选文章