【IT168 技术】本文根据李佩老师在2018年10月17日【第十届中国系统架构师大会】现场演讲内容整理而成。
讲师简介
李佩,阿里本地生活高级算法总监,人工智能与策略部负责人,主导本地生活线上与线下业务的算法策略优化与智能化进程,对人工智能如何改造O2O业务场景有着深刻研究。
摘要:
饿了么(现称阿里本地生活)作为一家以线上交易与线下履约为核心的本地生活平台,催生了大量的线上线下融合场景中的图像检测需求。面对五花八门的业务需求,各类图像识别技术也在千变万化,如何建立一个灵活统一而快速有效的图像检测框架,通过对深度学习模型与GPU算力进行整合,在极短的时间内快速响应业务需求达到提效降本的目的,成为线上线下融合场景中值得深究的话题。本次讲座将从场景驱动的角度来探讨如何建立一个灵活快速又可落地生效的图像检测框架。
分享大纲:
1. 线上线下融合场景中的图像视觉技术
2. 复杂场景中的图像视觉技术
3. 复杂场景中的文本识别
4. 复杂场景中的三维重建
正文:
线上线下融合场景中的图像视觉技术
今天我演讲的标题是线上线下融合场景中的图像识别技术。看到这个标题大家可能会有一些疑惑,图像视觉技术还分线上线下场景?本身图像视觉技术是通用的,不分场景。但是我们在本地生活领域做图像视觉技术的时候,会发现它和传统搜索引擎或推荐系统推进领域之下的图像视觉不完全相同。所以我今天不会讲常用的一些图像分类或图像相似度算法,我们讲一些类似于目标检测,或者视觉3D重建的新技术。
什么是所谓的线上线下融合?过去十年,我们看到O2O领域有大量的应用产生,例如打车,外卖以及洗车美容等。总体来讲,O2O是指将线上订单与线下实际服务提供能力连接在一起。但是走到了如今,特别是2017年,很多环境都发生了变化,成就了现在的线上线下融合的场景。
线上线下融合与传统的线上到线下的订单流程肯定是有一些不同之处。
第一个明显的不同点是O2O是单向的,是online到Offline。但是OMO是双向的,不光线上的订单会流到线下,线下的服务提供能力也会影响到线上的订单生成。
我以饿了么为例解释一下。大家在饿了么APP下单,外卖会及时配送到大家手中,表面来看,这是一个典形的O2O, 订单从线上流到线下。但实际上也有反向的一个流程,假设线下的物流配送能力不足,那么会不会影响线上订单的产生过程呢?实际上会影响。比如在高峰期的时候,你会发现你平时常订餐的餐馆突然找不到了,但是在下午4点钟平峰期的时候又出现了。是因为在高峰期的时候,我们会做一些压力调控,一些供需平衡的策略。在运力比较紧张的时候,我们会缩小线上的配送圈。所以在中午的时候,你不能完成远距离下单,但在平峰期的时候却可以。所以说,这个影响是双向的,线下也会影响到线上的下单流程。
第二点就是传统的O2O讲究连接,但在饿了么这个领域我们讲的更多是融合。连接是旨把线上的流量和线下的服务能力连接在一起,它并不会对线下的服务能力有彻底的改造。但是在融合这个领域,我们通过算法技术,会对线下进行重新改造,特别是现在我们会通过人工智能和物联网的技术,未来对线下的人和物等进行改造,让它具备一些可以快速复制的一些特征。
第三点就是在O2O的领域下,线下实际上是被动的,因为订单是在线上产生的,线下实际上是被动的接受线上的订单。但是在饿了么领域,线下实际上是被改造。
最后一点就是在O2O领域,一项关键技术叫分单调度,去年也是在这个会议上我给大家介绍过饿了么的智能调度 。当然在外卖领域,智能调度的难度实际上比其他O2O应用领域要大,因为饿了么每天存在着两个很高的高峰期,单量比较集中。在高峰期的时候,我们的物流配送能力实际上是跟不上的,所以调度做起来难度比较高。但是在OMO领域,最核心的技术并不是分单调度,而是智能物联。智能物联怎么理解?具体来说就是我们要用人工智能和物联网的机制,对线上和线下进行融合打通。并且在这种联合打通的过程中,我们的图像视觉技术会起到非常关键的作用。
一些线上线下融合的典型应用场景,例如万物互联、虚实结合、人机协同、智能制造等。
复杂场景中的图像视觉技术
今天的主题是线上线下融合领域中的图像视觉技术。线上线下融合打通,最典型的应用是在本地生活服务场景。在本地生活服务场景中,我们所用的图像视觉技术主要有三种:目标检测、文本识别、三维重建。
首先给大家简单的介绍一下目标检测的一些应用场景。饿了么有很多线上线下的场景。例如,饿了么的骑手每天都需要在饿了么骑手APP上传一张自己的自拍照,饿了么会根据自拍照对骑手做现场的着装规范检测。但是饿了么在全国有300万的注册配送员,人工检测是不现实的,所以饿了么利用图像检测技术去自动判断。首先,会对骑手的人脸进行识别,确认骑手是否是系统里注册的饿了么骑手。其次需要对骑手身上的物品进行检测,例如衣服、帽、餐箱等。所以我们需要进行目标检测,即物体检测。我们要通过深度学习技术,检测这些箱子,帽子等物品是否符合饿了么的送餐规范。
第二个应用场景是关于场景中的一些目标识别,例如行人识别、办公桌椅检测、电梯按钮检测与识别等。可能大家要问为什么饿了么要做这些事情。因为饿了么已经开始研究无人配送。大家可以想象一下一个机器人在办公楼里穿梭的场景,如果他想要将手中的餐食正确的送到订餐人手中,他就必须能够识别周围的人,周围的办公桌椅,甚至在乘坐电梯的时候能够识别按钮。
第三个是合规检测,这就比较好理解。因为饿了么作为一个本地生活服务平台,有大量的商家图片、菜品图片,所以我们希望我们平台上的每张图片都符合规范。例如它上面不能有二维码,不能有水印,不能有logo等商标的一些附加物的出现。所以我们就要用图像技术去判断,做一些二维码检测,水印检测等。
最后是场景文本识别,在饿了么的场景中,比较多的是菜单的识别、招牌的识别、指示牌的识别、海报的识别等。这其中比较难的是菜单的识别,因为不同餐馆的菜单都是五花八门的,很难找到类似的。我们需要通过扫描菜单的图片,将菜品的名字和价格准确的抽取出来。
以上提到的这些场景实际上都会用到目标检测的技术,目标检测在这些场景中都起到至关重要的作用。
接下来我简单的介绍一下目标检测中常用的一些评价指标。
目标检测其实在做两件事情,第一件是物体框的回归,我们需要找出物体框。第二件是我们需要对框内的物体进行辨别,也就是分类。对于这个分类,我们常用的评价指标是mAP,即先计算每个类别的平均精度,再计算所有类别的精度均值。对于回归的物体框的准确性我们使用IOU,即预测的物体框与标注的真实物体面积的交集除以并集。当然,在物体检测领域还有其他一些重要指标,这两个只是最常用的,并不是功能较多的。
这个是目标检测算法发展的一个过程。
2010 年之前,目标检测算法主要基于非深度学习。第一个把深度学习应用到目标检测中的是R-CNN,相关论文发表于2014年。R-CNN是由一位外国人提出来的,然后一位中国人对它进行了优化继而推出SPP。但SPP运行的速度比较慢,以至于前一位R-CNN的提出者不服气,便又继续推出比SPP更快的Fast R-CNN。最后两位提出者携手提出Faster R-CNN,一种更有效,更通用的方法。但总体而言,整个框架始终没有跳出R-CNN 的两步法思路。
所以目标检测第一类算法称之为两步法,什么叫两步法?第一步就是找出物体框,第二步就是对物体框进行分类。此外,还有另外一类方法称之为一步法,简单说就是从YOLO到SSD。
饿了么实现过的目标检测算法比较多,我这边只是列举了一些重要和常见的。
R-CNN是最简单的,也是最好理解的,它的思路非常简单。第一步先将图像划分为网格或子区域(或超像素),将同样颜色或纹理的相似相邻超像素进行聚类,并找出外切的矩形框。第二步就是对这些矩形框运行一个CNN分类算法,进行分类。R-CNN的提出是一种创新性的革命性的,但以今天的观点来看,它的速度比较慢。因此后续又提出了很多改进版的R-CNN。
第一个改进版就是SPP,也称之为金字塔池化。这个算法最核心的改进就是对所有的候选框共享一次卷积网络前向计算。它的第二个共性就是它可以通过一种金字塔的结构,获取不同尺度空间下的ROI区域。
这样的改进能够让它更快,并且能够发现不同尺度之下的地方,既可以发现大的物体也可以发现小的物体。但它的缺点仍然还是比较慢,无法达到实时。所以后续又提出了Fast R-CNN,它简化了SPP的同时还采取多种加速策略。
但SPP和Fast R-CNN只是对R-CNN进行了改进,并没有实现颠覆性的创新。真正实现了颠覆性的创新其实是最后的Faster R-CNN。Faster R-CNN创造性的提出了RPN (Region Proposal Networks) 代替 Selective Search,实现端到端的训练。也就是说原先整个目标检测分为两步,第一步是通过一些规则的方式找到一些矩形框。第二步是通过神经网络来做分类。但是Faster R-CNN把第一步的人工规则也转成了一个神经网络,称之为Region Proposal Networks,它的第一步是一个神经网络,第二步做分类也是一个神经网络,实现了一种端到端的训练。这样的算法有很高的精度和性能。
这张框架图是Faster R-CNN的一个主要执行过程,首先它对整张图进行CNN前向计算获取卷积响应图。这个和一般的图像分类操作没什么区别,一个主要区别就是中间的这个矩形框。它首先用滑窗法对响应图进行特征提取,然后会预测每个像素对应位置是否有物体的分数(两个输出),它会输出是和否。此外它还会去预测物体框的中心坐标与大小(四个输出),中心坐标的X轴、Y轴两个值。物体框大小主要是通过长和宽来表示,所以一共是四个数字。
所以它的两个全连接层总共会输出六个数字,然后进行后处理,典型的就是用NMS来做物体框的选择,然后把物体框给输出来。最后对输出后的物理框做分类,分类方法还是使用传统的CNN。所以它的创新过程主要体现在中间的矩形框,这也是创新最成功的地方。
接下来再给大家简单的介绍一下一步法。一步法中代表性的算法主要是YOLO和SSD。YOLO的英文全称是You Only Look Once,它只需要把图片扫描一次,就能把物体检测出来。它最大的优点是速度比较快,但缺点是精准度比较差。这是YOLO的整个框架,它的核心点是中间的这个大的矩形框。它会把响应图划分为S *S个格子,然后会预测物体框的中心坐标与大小,以及是否有物体的置信度,还会预测这个格子在每个物体类别的概率。所以,我们可以看到YOLO框架的整个核心思想和Faster R-CNN 里面的 Region Proposal Networks是有很多相似之处的。
目前用的比较多的另一种目标检测算法是SSD,它是大家做物理检测用的最多的算法。它是对YOLO的一种改进,一项重要的改进就是把YOLO的两个全连接层变得了一种循环的模式。它首先会从一张比较大的图片中寻找物体框,判断物体的类别,然后把整个图片缩小,继续寻找物体框和类别,再缩小,以此循环不断缩小图片的分辨率。最终将这些物体的类别与框输出来。这样的优点是,它能够获取不同尺度下图片中物体的信息,不管是大物体还是小物体,不管物体的尺寸、长宽比怎样,它都能推测出来。