浅谈图像搜索

前言

现在大火的人工智能更多时候是以别的名字进入公众视野的,主要是:语音识别,自然语言处理,计算机视觉,推荐系统等等。其中比较成熟的,我知道的应用有:

  • 语音识别+自然语言处理:amazon echo,google assistant/home,siri,国内一大票智能音箱
  • 计算机视觉:微博面孔专辑(商汤提供的cv能力),海康威视/格林深瞳的安防,拍立淘(手机淘宝里面的相机入口),百度识图(百度app里面的相机入口),Google Photo
  • 推荐系统:手机淘宝主页往下翻有个栏目叫猜你喜欢,qq/网易音乐的每日推荐歌曲等

今天谈一谈图像搜索(Content based image retrieval)这个技术的落地产品。平时我们用的百度搜索或者google,通常都是以文字作为关键字来进行搜索的,但是如果我们手上有一张照片,但是我们无法很好的描述照片中的内容,不能提取出对应的关键字,也就无法拿到我们想要的搜索结果,认知需求没有得到很好的满足。在卷积神经网络应用和计算机算力跟上之前,图像搜索一直处于“不可用”的状态,随着技术的发展,现在图像搜索已经比较好用了。

产品形态

图像搜索显产品入口是搜索框旁边的小相机。


浅谈图像搜索_第1张图片
搜索框右边的小相机即图搜入口

拍立淘

找到入口之后,先看一下使用场景。

场景和问题:我手上有一个杯子(或者是印着我读不懂的外文的化妆品),我不知道这个杯子(化妆品)到底读做什么名字,功能是什么,也不能详细的描述他的颜色和外形然后去百度一下,但是我有认知需求,我想知道这个是什么东西,值多少钱,在哪里买。

在我知道拍立淘之前,或者时间退回到2013年及以前,我很有可能去百度知道,贴吧,天涯猫扑这种地方发个帖子,把图贴上去,请求场外观众的援助。

淘宝拍立得就能很好的解决这个问题。


拍立淘

使用过程还是比较简单的,即进入相机,拍照然后获得结果,值得注意的有几点:

  • 结果页中每一个结果都是一个“宝贝”,列出了宝贝的标题和价格,点击进去是宝贝详情页
  • 提供了简单筛选方式,包括按销量/综合排序,选择不同的类目,在当前结果中搜索结果,来使得用户更接近他们想要的结果
  • 只能搜索到淘宝内部的商品结果,不能搜索到其他的淘宝生态内/外的内容,比如对于这个宝贝的买家秀或者评价/评测
  • 淘宝内部的相同的图片或者相似的图片是非常多的,所以这里需要对重复或者高度相似的图片、宝贝进行去重
  • 在编辑页中,使用了移动端卷积神经网络技术,自动框选出主体,以主体发起搜索,可以显著提高搜索结果的质量[1]

目前来看,拍立淘的主要业务为“以图片搜索淘宝内的宝贝”,不涉及到非淘宝内部的搜索,包括网络上的相关评论,评测,更多的相关图片等等。

百度识图

百度识图

使用的场景和拍立淘类似,百度识图也是传入一张图片(拍照或者相册选取)然后获得相关的搜索结果,百度识图有以下特点:

  • 搜索结果为全网,除开抓不到的数据,因为淘宝屏蔽了外部的爬虫,所以百度上是没有淘宝“宝贝”的数据,但是有京东的商品数据
  • 某些图可以出现猜词,即上图中我搜索了一个象印的杯子,搜索结果页中出现了品牌“象印”,和“保温杯”等关键字
  • 可以搜索到相似的图片,点击图片可以跳转到包含相似图的网页,用户可以从网页中获得信息
  • 百度识图同样拥有端上卷积神经网络技术,可以主动框选主体以获得更好的搜索结果

Google

Google和Bing也都有图像搜索的业务,Google叫做以图搜图,搜索的结果的质量也很高,但是入口有点隐蔽,在谷歌主页的右上角有一个images,点进去以后搜索框有了一个相机的icon,同样可以根据你上传的图片猜出这个东西是什么并给出一个关键字。


浅谈图像搜索_第2张图片
Google - Similar Image Search

Google为以图搜图做了一个单独的app,在17年IO大会发布,18年最新的Android系统上面有一个叫Google Lens的独立app,应该算是以图搜图的独立app。另外Google Photo的背后也使用了图像搜索的技术,现在只需要上传你的照片,个人无需做任何的事情,等着Google的模型跑一下结果,你就可以直接以文字为关键字,搜索自己的照片了。这个用起来很6,可以用的关键词包括不限于毕业,身份证,游戏,耳机,这些关键词Google都能搜索出来不错的结果。虽然是以词搜图,但背后的机器学习的技术是相似的。

Google Photo 关键词“book” 搜索结果

苹果在今年的WWDC也宣布在iOS 12里的相册也将拥有类似功能,不需要把照片上传的服务器,可以本地脱敏处理。

Bing的图像搜索业务目前来看只能拿到相似图,搜索出来的结果比较弱,这里就不展开说了。

图像搜索的基本原理

这里会简单的介绍一个图像搜索的基本原理,受限于个人水平,介绍的技术拍立淘或者百度识图的技术会有差异或者写出来的内容有错误,欢迎在评论区指出。

浅谈图像搜索_第3张图片
Content Based Image Retrieval

图片来自于网络[2],我添加了一点注解,用来说明深度学习或者说卷积神经网络(以下简称CNN)在图像搜索引擎里面是如何被用到的,也正是因为卷积神经网络在图像应用上的突破,今天的图像搜索才会变得可用。

  1. 从上图的左边开始看起,首先我们要做图像搜索的话,得有一个很大的图片数据库,我们希望数据库里面包括了网络上所有的图片,这样可以保证有结果
  2. 接着我们把这些图片的特征取出,这些特征是用来比较图片是不是相似的关键数据
  3. 把这些特征数据保存起来
  4. 从右边看起,输入一个我们想要搜索的图片
  5. 提取query图的特征
  6. 把query图的特征和数据库里面的特征对比,排序,然后拿到结果
    这些是图像搜索的主要步骤。

值得注意的是:

  1. 图片特征的提取
    1.1在CNN应用之前,这一类的特征有SIFT算子,色彩直方图,方向梯度直方图等,因为这些特征都是从图片本身的信息获取的特征,并且这些特征是人为定义的,所以这一类的特征叫做“hand crafted features”。
    1.2 在CNN应用之后,我们可以使用CNN来提取特征。提取过程是把图片用一个训练好的神经网络模型的计算一遍的过程,比如把图片放入训练好的AlexNet的卷积+池化的lower convolutional的部分运算一遍,然后拿到的特征[5]。这种特征也叫做“learned features”,因为这些特征不是人为直接定义的,是用训练之后的模型提取的。
    1.3 learned feature 相对比 hand crafted feature 的一个非常大的优势是:learned feature 可以更好的预测未知的或者异常的结果[3]。
    1.4 举个例子:假设我们的任务是识别鸟类,训练数据是1000张鸟的图片,但是这些鸟在日常生活中比较常见,比如这些鸟都是燕子,鸽子,鹦鹉等等。如果我们的要识别的图里是一种没有在数据集中出现过的,看起来和数据集中的鸟区别很大的鸟,比如雏鸟(没有羽毛),或者孔雀(羽毛多,翅膀大,不会飞),那么learned feature的预测结果会比hand crafted要好很多。
    1.5 实际上除了提取特征之外,我们还需要对入库的图片和query图进行分类(classification),即这个图里的东西是猫还是狗,然后对分类好的物体做定位(localization),即把这个物体框选出来。

  2. 搜索相似度和排序
    2.1中已经说明使用CNN提取的特征会有更好的预测结果,虽然说可以直接比较两张图片的分类和特征来判断他们是否相似,但我们还有一些问题需要解决。
    2.2那么如何定义图片相似?仅仅只做分类是不够的,比如有三张照片,照片里面都是家用汽车,这些汽车除了分类是“汽车”之外,他们还有其他方面的差别,比如颜色不同(黑白灰),类型也不同(SUV vs. 紧凑型两厢)。当用户传入一张黑色的SUV,那么这个时候灰色的SUV应该比白色的小型两厢更“相似”[4]。
    2.3 在决定相似度和排序的时候,我们还可以用CNN的方法来训练一个“图片相似度”模型,过程可以参考这篇Image Similarity using Deep Ranking,这个模型可以使得相似在图像上和内容的逻辑上更相似
    2.4 最后,从技术上来说,我们query图的特征和数据库中的特征放入一个分类模型,最后拿到他们的一维向量,通过计算向量之间的cosin值来判断图片是否相似[5]

后记

如果想要这篇文章的流量大一些的话,我应该要取一个比较“震惊”的标题,类似于《震惊!教你如何使用图像搜索扒皮知乎大V!》。不过我写这篇文章的目的,是想说明自己对于“图像搜索”有一些知识,所以最后发出来的这个标题看起来有点土。

图像搜索作为一个工具型的产品,技术已经是比较成熟了,现阶段的工作,包括百度和淘宝,都是在做AI赋能+使用场景的拓展。比如这两天VIVO NEX发布,百度就顺手搞了个新闻百度识图与vivo NEX深度合作!这款手机能通过拍照识别万物了。

最后就是,技术部分写出来可以帮助对于产品的理解,所以我尽力的理清了里面的逻辑和技术,希望对大家有所帮助。


References

  1. 拍立淘技术框架及核心算法(https://www.sohu.com/a/163031108_629652)

  2. Keras Tutorial: Content Based Image Retrieval Using a Convolutional Denoising Autoencoder(https://blog.sicara.com/keras-tutorial-content-based-image-retrieval-convolutional-denoising-autoencoder-dc91450cc511)

3.Grigory Antipov, Sid-Ahmed Berrani, Natacha Ruchaud, Jean-Luc Dugelay: Learned vs. Hand-Crafted Features for Pedestrian Gender Recognition. MM '15 Proceedings of the 23rd ACM international conference

  1. Image Similarity using Deep Ranking(https://medium.com/@akarshzingade/image-similarity-using-deep-ranking-c1bd83855978)

  2. TiefVision - End-to-end deep learning image-similarity search engine (https://github.com/paucarre/tiefvision)

你可能感兴趣的:(浅谈图像搜索)