阿里研究员华先胜:图像搜索的前世今生
摘要:让你买买买停不下来的淘宝是如何做到所拍即所得的?
以下内容为由4月27日由将门主办的“计算机视觉”主题技术专家微信群分享嘉宾实录。
自我介绍
我在2001年北大数学系十年寒窗博士毕业以后加入了微软亚洲研究院在之后9年半的时间在研究院一直从事图像和视频的分析工作。2010年底我突然变得有点迷盲虽然一直也在做产品但实际上还没有真正地上过“战场”所以当时就做了一个大家都不太看好的决定——我觉得应该真正地到“战场上打仗”看看我们实际当中的图像搜索的困难到底在哪里用户的需求和痛点到底在哪里因此之后我去了微软美国总部必应产品组做了两年的图像搜索也发现很多东西需要深入研究。当时微软的图像搜索在这两年之内也发生了很大的变化从比Google差到很多地方都胜过了Google。
两年后我转到微软雷德蒙研究院做图像识别方面的研究。又做了两年多后渐渐发觉需要更多的资源来实现自己的想法于是我又选择回到了国内并加入了阿里巴巴的搜索事业部开始做电商的图像搜索研究。
在我加入阿里的一年后电商图像搜索取得了很大的进展。当时在阿里云上有很多图像视频分析方面的需求但阿里云没有一个这样的组能够去处理这些大量地需求。所以我当时又做了一个很艰难的决定离开了搜索来到了阿里云——也就是说我现在是在云上做视频图像的分析、识别和搜索。
今天我主要会为大家介绍图像的搜索过去、现在和未来以电商为背景包括其中的一些困难和机会在哪里最后怎么样才能把电商的图像搜索做到比较好的效果。
一、热闹非凡的视觉识别和搜索
这些年计算机视觉识别和搜索这个领域非常热闹出现了很多的创业公司大公司在这方面也花了很多力气在做。大家可以从下面的这张图里看到的一些例子。
亚马逊出品的Firefly当时引起了很大的轰动虽然这个产品也很难说是不是成功但是当时确实是很大胆的一个举动。百度也有图像搜索和图像识别微软也有。Google很早也有了Google Goggles这个产品虽然技术跟现在有很大的差别。Pinterest在去年也有这样的功能问世就是在它自己的分享照片上可以去搜相似的照片或者是相似的产品。当然这个搜索是用网上的图片去搜网上的图片和我们今天要分享的还是有一点区别。阿里巴巴的一个图片搜索——拍立淘强调的是用自己手机去拍照片去搜索网上相同或者相似的商品。这两者听起来差不多但是实际上在难度上是有很大的差别。
计算机视觉涉及到的领域有安防、广告、娱乐方面等各行各业这些年尤其是在深度学习出现后在技术上也有了很大的发展。那么是不是计算机视觉这个问题已经解决了是不是几十年的图像搜索研究真的在我们的日常生活中可以用起来了下面我们会来探讨这些问题。
二、图像搜索的定义和分类
图像搜索的方法从Query角度可分为三类
以文本搜索作为搜索的入口。
以图像样例作为搜索的入口。
文本、图像的组合搜索。
文本搜索又可以细分为三种
第一种用人来对文本做标记
最早期上个世纪七八十年代时是很小的图片集 是通过人来添加图像的文本标签然后通过文本来搜索就够了。之后就发展到了2004年前后的社交媒体时代那个时候像Flicker上图片的Tag虽然也是人加的但是通过草根人群加的量就变得非常地大。通过这个也能做比较不错的图片搜索。再往后的标注就不是人给自己的图片加标签了而是通过设计一些标注的平台——比较有名的是Google收购的Image Labeler——以游戏的方式对图片进行标注。这些标注当然可以用来做图像的搜索这就是通过人工加文本标注的方式进行图像的搜索。
第二种通过网页的文本对图片进行索引
目前的互联网通用图片搜索引擎基本上都是基于这一套技术。通过网页的文本来对图片进行索引当然这里面也涉及到很多的细节包括怎样从网页上提取有效的文字以及2008年之后也有很多图像分析的内容引进到基于网页的图片搜索里来。也就是说虽然图像是网页中的图片但是也会对其进行内容分析——不管是打标签还是特征抽取等——来改进文本搜索存在的一些缺陷提升搜索的精准性。
第三种自动标注
大量的学术论文是这个方向上的一种叫concept detection或者叫tagging。规模上小到几十个、几百个大到上千个、上万个的标签。这一类严格来讲又可细分为几类
Predefined categories。比如预先定好只分一千类然后就去训练一个分类器把这个图片标好。
不限定标签的范围或者说标签的范围非常大然后去学习图片和标签的一个共同的描述方式从而可以实现近似于free text的文本标注。
Implicit tagging即隐式的自动标注。搜索引擎在运行的过程中用户在搜索时会点击搜索结果这个时候搜索的词和搜索的结果就通过被点击这个动作建立起了一个关联这种方式也可以认为是一种标注。虽然它有一些噪声但是实际上也是非常有效的并且也可以用一些方法降低其噪声甚至在相似图像之间传递标签从而扩大标签的覆盖率。这种标注对基于网页的图像搜索引擎对搜索质量的提升起到了非常关键的作用。
当然文本的搜索不是我们今天介绍的重点我们今天的重点讲的是基于图像的搜索。这个其实也可以分成两类一类是图像本身作为查询输入example-based这也是我们今天重点要去看的。另外一个是sketch的画图方法包括画形状、画线、画颜色分布等。
三、图像搜索——从火热到没落再到兴起
下面我们回到example-based的搜索主题这个方向在图像搜索历史上也经历了不同的阶段。
最早在二十世纪九十年代时那个时候叫做CBIR(Content-Based Image Retrieval)即基于内容的图像检索。但是那时基本上只能在几千、几万幅图上进行检索而且检索的效果很难保证。当时有一个一直流行到现在的词叫做“语义鸿沟”这也是当时我们经常用来质疑基于图像的搜索或CBIR到底靠不靠谱。因为当时的特征难以区分下图所示的两种Case。
所以这个方向到了2000年之后我们有时候开玩笑把它叫做Sunset Project也就是像落日一样没有太大的希望了。这种基于样例的检索其实在之前也经常被人质疑
样例从哪里来如果我有了这个样例为什么还要搜索呢当然这个问题从今天来看已经不是问题了因为在上个世纪九十年代的时候获取一个图像的样本还不是那么容易。在手机相机那么普及的今天获取一个图像是易如反掌的所以今天一般没有人会问这个问题。
只有像落日这样的颜色分布非常鲜艳且明确的图搜索结果才会非常好因此在很多时候我们的搜索结果不是很好。
图像搜索的没落直到2008年左右才有所起色当时出现了一家叫TinEye的公司提供这样一种网络服务你提交一个图片后它可以帮你找互联网上跟此图非常相似的图片。这在当时引起了非常多的讨论也就是说它解决了当时那些技术无法解决的scalability的问题。
那么这个scalability是个什么意思呢做图像的检索当图片的量非常大时是没有办法把Query图像的特征与数据库里面的图像进行一一对比的。以现在的计算能力如果图像只有几千个甚至上万个问题都不是很大的。但是当你的图像再往大到千万、亿级甚至到十亿、千亿级别的时候就没有办法了。
所以此时就要把图片进行索引。索引在文本搜索里面是通过倒排的方法来做这个是非常容易实现的。但是图像不一样图像的描述是它的特征而这个特征是一个向量。这个向量怎样能够有效地组织起来实现快速地检索这是当时TinEye系统往前走了一步的问题。
上面这张图是尽我所知把当时和后来的Large Scale Image Indexing的方法分了四类也就是用高维的特征怎样去建索引的方法。这些方法都是在解决怎样把高维空间的数据组织起来而方便查找的问题。
Partition tree是用各种各样tree的方法把数据进行分割、分块使得查找起来比较方便。
Hashing关于图像搜索的Paper基本上都是在做Hashing。
Neighborhood Graph用邻接图的方法来建索引的方法。
Invert Index把所有的图像特征转化成视觉词然后用倒排的方法来做。
这几个方法之间基本上都是可以互相转化的当然转化时有时是有信息损失的。如果做大规模的、数据量非常大的图像搜索我个人认为用倒排的方法来做比较合适。
以上是关于索引这一部分。但是索引这件事情解决了之后是不是就解决了基于内容的图像搜索问题很遗憾实际上是没有的。因为索引只是解决了scalability的问题而且这些方法在做有效性的评估的时候都是与brute-force的方法来比也就是和一个一个比距离的方法来比来判断索引的方法和brute-force有多接近。但是图像的表征问题也就是怎么样有效描述这个图像的问题还没有很好地解决。只有描述得好才能够比较两幅图像——基于内容的图像搜索问题实际上就是两个图像比较的问题。当然一个真正的搜索系统其实比这个要复杂得多但它最核心的问题是两幅图像怎么比较。
四、深度学习的威力
如上所说还有一个问题是当时没有解决的就是什么样的特征才是有效的即可以让我们“认为的”相似的图像在特征上也是相似的特征上相似的也是我们认为相似的这样一个问题。
这个问题真正取得进展确实是在深度学习出来之后它可以让我们去按照自己所想要达到的目标去学习一个神经网络通过这个神经网络去抽取图像的特征。
实际上搜索跟识别是密不可分的尤其是在做大规模图像搜索时识别、检测必不可少。识别有时也是要通过搜索来完成的例如如果你类别非常多的时候往往要通过搜索的方法来实现而不是通过模型的方法来做识别。所以搜索和识别在大数据时代的界限变得越来越模糊了它们之间互相需要互相利用。
五、图像搜索系统的四个基本要求
上图是一个通用的视觉搜索或者图像搜索的大致流程。一个视觉搜索引擎分成两块
在索引建立的过程首先我们要到互联网上去找到这些图发现它以后还要选择它。看起来简单的两个词——发现和选择里面包含的文章却很多。因为互联网上的图很多不可能把所有的图都放在索引里面去这时候就涉及到应该把什么图放进去才能满足用户的搜索需求。这个要求是说选择出来的图片应该能满足当前时间点上大部分人搜索的需求就可以了这实际上会转换成为一个机器学习的问题来解决。
选择好后就要进行理解和索引要知道这个图片里有什么内容。如果基于网页就要从网页上抽信息如果是完全基于图像就要抽取图像的特征进行理解并建索引。建立索引以后再把这些索引推到搜索服务的机器上去比如一个互联网图片搜索引擎这个时候可能要几千台机器才能hold住这个图片库的索引。
那么这样的图像或者视觉搜索系统在宏观上来看应该有一些什么样的要求呢我总结为以下四个方面
首先是相关性这是一个最基本的要求。也就是说当给了一幅图像进去出来的东西要跟给出的图像要是相关的。如何定义“相关”一般对于图片搜索而言基本上是认为“跟它一样”或者是“相像”。例如产品同款产品不管颜色是否一样但它是相同的东西这就叫做相关性。相关性一般来说是做搜索的人最关心的一个问题在关于图像搜索的学术论文里面基本上我们大多只关心这个问题。
第二个是覆盖率这就跟产品非常相关。这里面有好几个因素最直接的一个就是我希望搜什么都能给我结果。不是我只能搜衣服不能搜其他的商品或者我只能搜商品又不能搜别的东西。否则用户的体验就很不好。甚至是在电商的搜索引擎里面如果用户输入了一个非商品我们该怎么反馈给用户这都是涉及到覆盖率的问题。
伸缩性主要是两方面的问题1是否能够高效快速地处理大量的商品和商品的变化即是否能够非常快速地将大量商品放到索引里面去而且索引能够很方便地更新。也就是对于商品建造索引过程而言的一个伸缩性。2能否响应大量用户的搜索请求。即当有大量的用户同时访问搜索服务时要能够快速地响应所有的请求。
用户体验比较偏交互式用户界面设计方面因此在此处不做详述。
六、图像搜索的主要应用领域
图片搜索经常被质疑的是到底什么情况下会用到图像搜索为什么要用图像搜索这个问题从上个世纪到现在一直不断的被提及。我总结一下图像搜索主要可以在以下领域应用
1信息的获取。例如这个图片的对象是什么、在哪里这个人是谁或者这个花是什么。2) 拍照购物。当看到一个商品我不知道怎么用文字描述它能不能通过照片来搜索这个会在后面具体讲述。3娱乐。例如一些视频、电影、新闻、体育等也可能涉及一些搜索的问题。4) 监控监控里面可能涉及到的搜索。5其他。我个人认为目前端到端的应用电商拍照购物搜索是最solid的一个应用场景。
电商的图片搜索跟一般的图片搜索相比其实有更多的挑战
用户对相关性的期望更高。因为它的目的性非常明显用户搜索完了是要买东西的所以对相关性的期望也非常地高。
对覆盖率的期望也非常高。比如用户在尝试“衣服”可以搜到之后他可能就会继续搜“鞋子”鞋子搜完以后可能又会搜花、插座等。
用户所查询的图像质量变化非常大。比如搜索一个玻璃杯它可能是透明的可能有反光、曝光不足、模糊甚至拍的东西是倒的等各种情况。
对系统性能要求很高。用户会希望马上就获得结果你如果在后台算两三分钟才给到结果肯定大家都跑掉了。
有非常具体的衡量标准。如果做算法的话经常会有一些衡量标准但是这些标准是不是真的对之后的业务是合适的一个标准呢
实际上在做真正的产品应用时我经常讲一个叫做“照妖镜”的东西就是衡量这个东西到底做得有没有道理。比如UV独立的访客量是多少、GMV成交的金额是多少、转化率有多高这些都是照妖镜。但照妖镜也不是只跟算法有关也会跟其他的产品设计有关——但最关键的还是系统的相关性和覆盖性以及伸缩性。
当然我们的机会也是很多的因为在电商这个领域除了基础的技术分布式计算的技术、深度学习的技术外首先商品的量非常多商品的图片非常多第二个是用户的量非常大这也让这个事情有了更多的机会。
七、商品图像搜索的关键技术
现在以电商的图片搜索作为背景具体阐述其关键技术的实现。
1、相关性
首先要知道一个图片的大致类型。例如如果是一个商品需要知道它到底是上衣——是男士的上衣还是女士的上衣还是鞋子等。这样来避免搜索出的结果完全不靠谱这个我们一般把它叫做分类或识别。通过这个其实也可以看到识别在搜索里面也是非常的关键第一步也是必不可少的。
第二个问题是图片中我感兴趣的商品在哪里如果我们不做商品检测或者主体检测通常商品不是很大且背景也比较复杂而电商图片数据库里很多都是这种图。其实复杂的背景对于电商的商品销售量也是有影响的我们做过研究如果照片拍的背景比较好如街拍等其实是会促进商品的销售的。
所以我们要做主体的检测。主体的检测方法在计算机视觉领域也有很多快速的方法基本上是先要找Proposal Window然后对其进行分类。这个场景通常要求速度非常快一个搜索请求进来后所有的操作——包括上述分类、主体检测以及后面的一些步骤到最终的返回结果——都是要在几百毫秒之内返回给用户的。因此我们的Proposal Window就不能那么多否则计算量就相当的大所以这就会涉及到后续Proposal Window的refinement这样一个步骤。
当已经知道这个商品在图片中的位置后更关键的一条是到底用什么特征来描述商品呢如何能让这个特征反映出商品的特性呢这也就是前面讲过的怎样让这个特征可以去比较两幅图像——也就是两个商品。
基本方法还是是利用深度学习这个工具force神经网络收敛到一个地方使得特征输出能够反映出这个商品的特性例如些种类、风格、图案、颜色等。
综上可以从三个角度在很大程度上解决相关性的问题也就是从分类、主体的检测以及图像特征的角度让相关性得到很大的改善。
2、覆盖率
覆盖率对用户的体验有相当大的影响——如果只能搜到这个而搜不到那个或者本来应该搜到的商品但是没有找到这样用户体验都会非常不好。
我把覆盖率分为三个角度来讲——
索引的覆盖率。这是我们一般提到覆盖率时所指的含义。简单说就是索引里多少货商品当然是越多越好种类越全越好这个比较容易理解。
特征的覆盖率。特征的覆盖率是指商品的描述能够覆盖各个种类不是只能做鞋子或只能做服装而不能做别的东西甚至非商品是不是能做。为了描述的精准、描述能力的优化实际上不同的类型一般用不同的特征来描述。
搜索的覆盖率。这个覆盖率是电商场景下所独有的因为电商只有商品图像的索引没有别的索引那么用户如果输入的不是电商产品的图片该怎么办比如用户在街上看到一条很可爱的狗并拍照后在平台上搜索该怎么处理呢——淘宝上可能没有卖狗的吧这个时候我们可以把狗识别出来然后返回给用户一些狗相关的产品这是一种解决方案。如果是风景、食品的话也可以对风景进行识别对食品里面的热量进行识别然后把这些信息返回给用户。
如果一定要返回电商商品的话比如用户拍了一朵花也可以force搜索引擎还是到fashion这个领域去搜那么搜出来的衣服、饰品就会跟用户输入的图像有一点关系看上去在某个方面很类似如下图。
下图的例子很有意思照片上是一个晚上的桥通过它搜出来的东西很有意思是格子样式很像这个桥的线条的上衣。
3、伸缩性
伸缩性的实现方式主要有两种
通过系统的方法也就是通过大量的机器来实现。索引技术有了系统的方法来实现因此对索引的要求其实没有那么高有很多方法都可以完全满足搜索系统的构建需求。正如讲搜索引擎架构时所述索引会分到很多机器上去那么只要做到每一台机器上的数据搜索效率足够高的话那么这个系统就可以完成大规模的搜索任务。
对于算法而言就集中在一台机器上怎么样做到高效。那么一台机器上怎么做到高效前面讲到的图像各种方法都可以用。
以上是关于电商图片搜索的内容最后再给大家分享一些电商搜索产品的例子。下面这个产品叫做“拍立淘”在手机淘宝搜索框的右边有一个小的摄象头图标点这个图标就能进入“拍立淘”的界面。
以下是“拍立淘”图片搜索的一些例子。
总结而言对于一个真正的应用产品来讲视觉搜索和图像识别确实仍有很多的挑战但同时也有很多的机会。尤其是现在这个时代技术方面有深度学习的技术、大数据分析处理的技术包括分布式计算这样一些平台。数据的获取也非常容易人人都有手机每个手机又都有相机就有了大量的图形数据和大量活跃的用户使得有机会让图像搜索的问题得到本质上的改善。虽然目前这个问题还没有完全解决但是实际上在拍立淘里你也可以看到很多实际的例子真的迈出了很大一步。
八、图像搜索的明天
展望图像搜索和识别技术的未来我个人认为这可能不是某一个算法能解决的也不是仅凭深度学习就可以解决的也不是说一个搜索系统、识别系统就可以解决的。我认为是四个方面结合起来数据、用户、模型和系统。这四个方面放在一起可能不断地缩小语义鸿沟使得我们的搜索“所想”就能够得到“所得”。
如果大家有兴趣的话我现在阿里云带领视觉计算组云上也涉及到一些视频搜索的任务更多的还是识别、还有很多视频处理、视频分析、视频识别等这些方面的一些需求包括教育、医疗方面、娱乐方面、体育方面可能都会有。
如果有想加入到我的项目组的朋友欢迎发送简历到vcidst@list.alibaba-inc.com。
来源:云栖社区
链接:https://yq.aliyun.com/articles/47859#