原文:拍立淘的图像搜索与识别 - 2018

出处:云栖社区

阿里巴巴iDST 高级算法专家渊捷为大家分享了图像搜索与识别的相关技术,主要介绍拍立淘使用深度学习以及相关算法在以图搜图、图像细粒度识别、大规模向量搜索、3D建模等方面的研究和应用.

直播回顾请点击

以下是精彩视频内容整理:

阿里巴巴在AI方面涵盖的工作如图,阿里巴巴AI包括很多方向,我们在语言上有一些交互,例如语言识别、语音合成,在视觉方面有视觉搜索,图像和视频的理解,以及AR、VR、字符识别、城市大脑等,在自然语言处理方面有文本的语意分析,文本的情感分析,还有知识图谱,在智能决策方面有销量预测,还有一些物流优化等.

1. 拍立淘业务

1.1. Vision technologies

所谓人工智能在视觉方面的应用即是,我们如何让机器能像人一样理解图像和视频的一些内容?它包括如下几个方向:

  • 视觉搜索和识别
  • 3D相关视觉模型的建立
  • 人脸的检测和识别
  • 视频中的视频指纹等.

拍立淘团队主要关注下面几个方面:

[1] - 首先就是视觉搜索,视觉搜索我们主要是做一些商品图像的搜索;

[2] - 第二是做大规模的向量搜索引擎,对于搜索问题,我们最终会把一幅图片变成一个高维向量,然后需要一个大规模向量搜索引擎来支持大规模的图像搜索;

[3] - 第三是做一个系统化商品的三维筹建工作;

[3] - 最后做一些细粒度的图像识别和分析的工作.

1.2. intelligent visual search

拍立淘是淘宝的一个以图搜商品的服务,用户通过上传一幅图像,就可以通过拍立淘来找到他想要的东西.

拍立淘的入口可以通过打开手机淘宝,然后点击右上角摄像头图标就可以进入拍立淘,出来一个相机界面,然后点击拍摄,就可以对你拍照得到的图片进行实时搜索.

拍立淘其实是基于深度学习的智能图像搜索技术,目前拍立淘索引了淘宝大约30亿的图片数量,包含了将近一亿数量的商品,每天的活跃用户也超过了一千两百万.

1.3. 应用场景

拍立淘有哪些应用场景?

第一个场景是线下的街拍场景,在商场或者在街道上如果看到了你想要买的东西,就可以通过及时拍照,通过拍立淘搜索得到想要的东西;

第二个场景是线上场景,线上我们在朋友圈或者在微信上有一些明星同款,有一些好友的分享商品图片也可以通过拍立淘进行同款搜索、价格比较等;

第三个场景就是海淘场景,我们在海外购物或者在海淘的时候,有很多商品是没有中文说明的,只有一些英文标签或者产品介绍,通过拍立淘搜索商品,如果我们转到一个卖家,这个卖家有可能对这个商品有一些中文的介绍,从而可以知道这个商品有什么作用,它是用来干什么的?

1.4. 技术发展

拍立淘是2014年8月份第一次上线的,经过三到四年的发展,它的用户数已经从最开始的几百个到目前日活超过一千万,拍立淘是一个通过技术驱动的产品,我们在其中大量运用了我们的大数据、数据挖掘、深度学习、大规模的检索引擎,还有一些移动端的深度学习技术. 通过一系列的技术升级和迭代以后,可以使得我们对这种实拍图的场景有了一个更好的精确的搜索效果.

目前拍立淘能够支持的商品类目有很多,包括衣服、鞋、包、玩具、零食、家具、数码产品、配饰等,我们在日常生活中常见的商品都是可以在拍立淘中找到的.

拍立淘除了服务内部的淘宝用户以外,我们也输出到了一些对外的厂商,比如说在三星最新的S8机型的摄像头里面也集成了拍立淘功能,三星用户可以通过打开S8摄像头对实时拍摄的图片进行实时检索. 海外用户可以通过AliExpress软件也是可以享受快捷的图像搜索购物体验.

1.5. 搜索结果

典型的搜索结果如图,可以看到,左边是用户上传复制的一张图像,中间首先会做一个主体检测,因为在背景干扰比较大的情况下,如果不做主体检测,这个商品占的面积可能会比较小,然后对我们的识别有困难,因此会做主体检测,检测图像进行特征提取后,送到检索系统中,进行相似结果的检索和返回. 我们对一些比较大的角度还有比较差的光线情况,都是可以比较精准的找到同款宝贝的.

2. 拍立淘核心技术

2.1. 技术框架

下面具体的介绍一下拍立淘的内部技术细节.

拍立淘分为离线和在线系统.

离线系统首先需要建立一个图像数据库,通过图像数据库过滤一些黑卖家和低质量商品. 对一个宝贝我们其实会选取多幅图像,比如说淘宝有主图,商家会上传不同的SKU图,我们都把它们放到一个宝贝上,这样一个宝贝就有多张图片. 因为可能会存在背景比较复杂的情况,会对整个输入图像做一个主体检测,得到它的主体图像,对主体检测会做进一步特征提取,把图像文件变成向量,把这个向量存到检索的引擎系统中.

同样,在线过程也会做一个类似的处理,但是在线会多一个类目预测的步骤,所谓类目预测就是进来一个query,我们会首先判断是哪一个类目的,比如说属于衣服、鞋还是包,然后再到相应的后台数据库的对应类目中进行搜索,搜索过程其实就是两个向量的匹配过程,我们可以看成实际两个向量的欧式距离,把和query向量最近图像的欧式距离对应的图像返回到结果,最后经过排序模块做一些商品的质量、销量、价格的一些排序,然后把最终结果反馈给用户.

这就是整体的拍立淘离线和在线流程.

image

2.2. Real shot image matching

拍立淘要解决的最重要问题就是实拍图问题,实拍图是用户从手机摄像头直接拍摄的图片. 实拍图片的难点有很多,比如图片模糊可能会比较大,手机摄像头有高端有低端. 而其实侯选商家商品库中的图像一般是拿比较高级的相机拍摄的,比如说拿单反相机拍摄的,光线控制也是比较好的,这样造成了资源图像和目标图像不一样的问题,

为了解决这种问题,我们使用Deep ranking技术,我们是要构建 triplet 三元组,使得用户上传的一幅图像和它的同款图像的欧式距离近,并且同时要使 query 和非同款的那张图像的欧式距离要远,通过形成这样的triplet,我们把它输入到一个基于CNN的深度学习框架中,进行一个端对端的特征训练,这样能解决低质量实拍图和高质量侯选图的匹配问题. 中间一些关键技术比如如何能够选取一些比较有用的三元组,从而能够更高效的提高训练速度.

image

2.3. Mobile deep learning

我们做了一些移动端上的deep learning,为了提高运行速度,把主体检测部分做到了端上,做到端上也是要解决一系列难点的,比如说模型大小问题,因为CNN网络一般都是很浪费计算资源的,还有一些计算速度的问题.

2.4. Indexing engine

如果要支持一个大规模比如说百亿级或者几十亿级图片的搜索引擎,我们需要一个比较高效的向量检索系统.

这个向量检索系统目前采用聚类量化的方式做一个快速检索系统,首先会对商品库中所有的图像, 进行快速的聚类打标,把它量化成一个一个的聚类中心点,这样每一个数据库中的图像会对应一个codebook,就是聚类中心点中的一个标,当query来的时候,不需要和数据库中的每一个图像进行挨个比较,我们只需要将输入图像和 codebook进行比较,通过codebook召回相近的对应侯选集中的doc,相当于在缩小的doc级上进行一对一的比较,这样大大缩短了检索时间. 我们目前可以达到100亿的数据,在分布式的情况下,可以达到毫秒级响应,和线性查找几乎能达到无阻的效果.

image

2.5. Fine-grained classification

接下来我们做细粒度的识别,细粒度识别和传统识别的最大不同是,传统识别只需要识别出图片中是包含一个猫还是包含一个狗,但是细粒度识别不仅要识别出这是一个车,而且要识别出它的车型、制造商、年代,以及更加丰富的标线信息.

同样,我们对商品可能会进一步输出,除了识别它是上装、它是裙装,还会识别出它是否是长袖或短袖,它的颜色是什么,对图片更加细粒度的描述,目前在商品图像和常见的车辆、花草、猫狗等都有一些尝试.

细粒度的数据级一般都是比较小的,我们考虑从 transfer learning 的角度做,因为拍立淘上积累了很多商品类的数据,我们通过 transfer learning 把商品类数据 transfer 到其他领域的一些数据,从而提高其他领域的识别能力.

image

2.6. 3D reconstruction

最后是三维建模工作,我们的目标是想建造一个低成本的三维扫描仪,专业扫描仪价格都是在几十万以上的水平,我们的商家或者消费者需要一个低成本的三维扫描设备,我们目前可以把它控制在两三千人民币的水平,它可以支持一些比较小的物体三维全系成象重建,比如说它可以支持鞋、玩具、泥塑等尺度的三维重建. 目前重建时间在十分钟以内,而且精度也可以达到0.1毫秒,这是采用一种基于结构光和基于双模相机的一种融合方案.

image

重建效果如图,左边是一个泥塑,右边是一个虚拟现实的展现,我们把一个重建的鞋子合成到实际带桌面的图像上面,可以看到鞋子的渲染还是比较真实的渲染.

image

Last modification:May 13th, 2019 at 05:02 pm