阿里巴巴iDST 高级算法专家渊捷为大家分享了图像搜索与识别的相关技术,主要介绍拍立淘使用深度学习以及相关算法在以图搜图、图像细粒度识别、大规模向量搜索、3D建模等方面的研究和应用。
直播回顾请点击
以下是精彩视频内容整理:
Alibaba’s AI
阿里巴巴在AI方面涵盖的工作如图,阿里巴巴AI包括很多方向,我们在语言上有一些交互,例如语言识别、语音合成,在视觉方面有视觉搜索,图象和视频的理解,以及AR、VR、字符识别、城市大脑等,在自然语言处理方面有文本的语意分析,文本的情感分析,还有知识图谱,在智能决策方面有销量预测,还有一些物流优化等。
拍立淘
Vision technologies
所谓人工智能在视觉方面的应用即是,我们如何让机器能像人一样理解图象和视频的一些内容?它包括如下几个方向:视觉搜索和识别、3D相关视觉模型的建立、人脸的检测和识别、视频中的视频指纹等。拍立淘团队主要关注下面几个方面:首先就是视觉搜索,视觉搜索我们主要是做一些商品图象的搜索;第二是做大规模的向量搜索引擎,对于搜索问题,我们最终会把一幅图片变成一个高维向量,然后需要一个大规模向量搜索引擎来支持大规模的图象搜索;第三是做一个系统化商品的三维筹建工作;最后做一些细粒度的图象识别和分析的工作。
intelligent visual search
拍立淘是淘宝的一个以图搜商品的服务,用户通过上传一幅图象,就可以通过拍立淘来找到他想要的东西。拍立淘的入口可以通过打开手机淘宝,然后点击右上角摄像头图标就可以进入拍立淘,出来一个相机界面,然后点击拍摄,就可以对你拍照得到的图片进行实时搜索。拍立淘其实是基于深度学习的智能图象搜索技术,目前拍立淘索引了淘宝大约30亿的图片数量,包含了将近一亿数量的商品,每天的活跃用户也超过了一千两百万。
应用场景
拍立淘有哪些应用场景?第一个场景是线下的街拍场景,在商场或者在街道上如果看到了你想要买的东西,就可以通过及时拍照,通过拍立淘搜索得到想要的东西;第二个场景是线上场景,线上我们在朋友圈或者在微信上有一些明星同款,有一些好友的分享商品图片也可以通过拍立淘进行同款搜索、价格比较等;第三个场景就是海淘场景,我们在海外购物或者在海淘的时候,有很多商品是没有中文说明的,只有一些英文标签或者产品介绍,通过拍立淘搜索商品,如果我们转到一个卖家,这个卖家有可能对这个商品有一些中文的介绍,从而可以知道这个商品有什么作用,它是用来干什么的?
技术发展
拍立淘是2014年8月份第一次上线的,经过三到四年的发展,它的用户数已经从最开始的几百个到目前日活超过一千万,拍立淘是一个通过技术驱动的产品,我们在其中大量运用了我们的大数据、数据挖掘、深度学习、大规模的检索引擎,还有一些移动端的深度学习技术。通过一系列的技术升级和迭代以后,可以使得我们对这种实拍图的场景有了一个更好的精确的搜索效果。
目前拍立淘能够支持的商品类目有很多,包括衣服、鞋、包、玩具、零食、家具、数码产品、配饰等,我们在日常生活中常见的商品都是可以在拍立淘中找到的。
拍立淘除了服务内部的淘宝用户以外,我们也输出到了一些对外的厂商,比如说在三星最新的S8机型的摄像头里面也集成了拍立淘功能,三星用户可以通过打开S8摄像头对实时拍摄的图片进行实时检索。海外用户可以通过AliExpress软件也是可以享受快捷的图象搜索购物体验。
搜索结果
典型的搜索结果如图,可以看到,左边是用户上传复制的一张图象,中间首先会做一个主体检测,因为在背景干扰比较大的情况下,如果不做主体检测,这个商品占的面积可能会比较小,然后对我们的识别有困难,因此会做主体检测,检测图象进行特征提取后,送到检索系统中,进行相似结果的检索和返回。我们对一些比较大的角度还有比较差的光线情况,都是可以比较精准的找到同款宝贝的。
核心技术
下面具体的介绍一下拍立淘的内部技术细节。拍立淘分为离线和在线系统。离线系统首先需要建立一个图象数据库,通过图象数据库过滤一些黑卖家和低质量商品。对一个宝贝我们其实会选取多幅图象,比如说淘宝有主图,商家会上传不同的SKU图,我们都把它们放到一个宝贝上,这样一个宝贝就有多张图片。因为可能会存在背景比较复杂的情况,会对整个输入图象做一个主体检测,得到它的主体图象,对主体检测会做进一步特征提取,把图象文件变成向量,把这个向量存到检索的引擎系统中。
同样,在线过程也会做一个类似的处理,但是在线会多一个类目预测的步骤,所谓类目预测就是进来一个query,我们会首先判断是哪一个类目的,比如说属于衣服、鞋还是包,然后再到相应的后台数据库的对应类目中进行搜索,搜索过程其实就是两个向量的匹配过程,我们可以看成实际两个向量的欧式距离,把和query向量最近图象的欧式距离对应的图象返回到结果,最后经过排序模块做一些商品的质量、销量、价格的一些排序,然后把最终结果反馈给用户,这就是整体的拍立淘离线和在线流程。
Real shot image matching
拍立淘要解决的最重要问题就是实拍图问题,实拍图是用户从手机摄像头直接拍摄的图片。实拍图片的难点有很多,比如图片模糊可能会比较大,手机摄像头有高端有低端。而其实侯选商家商品库中的图象一般是拿比较高级的相机拍摄的,比如说拿单反相机拍摄的,光线控制也是比较好的,这样造成了资源图象和目标图象不一样的问题,为了解决这种问题,我们使用Deep ranking技术,我们是要构建triplet三元组,使得用户上传的一幅图象和它的同款图象的欧式距离近,并且同时要使query和非同款的那张图象的欧式距离要远,通过形成这样的triplet,我们把它输入到一个基于CNN的深度学习框架中,进行一个端对端的特征训练,这样能解决低质量实拍图和高质量侯选图的匹配问题。中间一些关键技术比如如何能够选取一些比较有用的三元组,从而能够更高效的提高训练速度。
Mobile deep learning
我们做了一些移动端上的deep learning,为了提高运行速度,把主体检测部分做到了端上,做到端上也是要解决一系列难点的,比如说模型大小问题,因为CNN网络一般都是很浪费计算资源的,还有一些计算速度的问题。
Indexing engine
如果要支持一个大规模比如说百亿级或者几十亿级图片的搜索引擎,我们需要一个比较高效的向量检索系统。这个向量检索系统目前采用聚类量化的方式做一个快速检索系统,首先会对商品库中所有的图象进行快速的聚类打标,把它量化成一个一个的聚类中心点,这样每一个数据库中的图象会对应一个codebook,就是聚类中心点中的一个标,当query来的时候,不需要和数据库中的每一个图象进行挨个比较,我们只需要将输入图象和codebook进行比较,通过codebook召回相近的对应侯选集中的doc,相当于在缩小的doc级上进行一对一的比较,这样大大缩短了检索时间。我们目前可以达到100亿的数据,在分布式的情况下,可以达到毫秒级响应,和线性查找几乎能达到无阻的效果。
Fine-grained classification
接下来我们做细粒度的识别,细粒度识别和传统识别的最大不同是,传统识别只需要识别出图片中是包含一个猫还是包含一个狗,但是细粒度识别不仅要识别出这是一个车,而且要识别出它的车型、制造商、年代,以及更加丰富的标线信息。同样,我们对商品可能会进一步输出,除了识别它是上装、它是裙装,还会识别出它是否是长袖或短袖,它的颜色是什么,对图片更加细粒度的描述,目前在商品图象和常见的车辆、花草、猫狗等都有一些尝试。
细粒度的数据级一般都是比较小的,我们考虑从transfer learning的角度做,因为拍立淘上积累了很多商品类的数据,我们通过transfer learning把商品类数据transfer到其他领域的一些数据,从而提高其他领域的识别能力。
3D reconstruction
最后是三维建模工作,我们的目标是想建造一个低成本的三维扫描仪,专业扫描仪价格都是在几十万以上的水平,我们的商家或者消费者需要一个低成本的三维扫描设备,我们目前可以把它控制在两三千人民币的水平,它可以支持一些比较小的物体三维全系成象重建,比如说它可以支持鞋、玩具、泥塑等尺度的三维重建。目前重建时间在十分钟以内,而且精度也可以达到0.1毫秒,这是采用一种基于结构光和基于双模相机的一种融合方案。
重建效果如图,左边是一个泥塑,右边是一个虚拟现实的展现,我们把一个重建的鞋子合成到实际带桌面的图象上面,可以看到鞋子的渲染还是比较真实的渲染。
本文由云栖志愿小组毛鹤整理,编辑百见