
本地生活场景包含大量具有挑战性的计算机视觉任务,例如菜单识别,标志识别,盘子识别,产品识别,行人检测和室内视觉导航.
与这些计算机视觉任务相对应的核心技术可以概括为三类: 对象识别,文本识别和3D重构.
什么是当地生活场景
我们了解的本地生活场景是: 从传统的O2O到OMO(合并离线).
对于O2O(例如叫车应用程序和Ele.me Food),和离线之间的界限变得越来越模糊.
传统的订单不再只能流到离线状态,它们之间正在进行交互和集成.
在2018年,我们看到Didi在建立和管理自己的车队方面投入了大量资金. 他们在汽车上安装了许多监视设备,试图使汽车和人员脱机.
同样,对于Ele.me,我们不仅修改了离线物流配送图像识别应用,而且还尝试使用机器人进行无人配送图像识别应用,并引入了诸如智能外卖箱之类的创新技术.
可以看出,在本地生活场景中,我们的核心任务是将智能物联网(即AI + IoT)应用于OMO场景.
上图是阿里巴巴本地生活Ele.me业务的人工智能应用程序的逻辑体系结构. 与所有其他人工智能应用计算平台类似,我们在底部使用一些通用组件,包括: 数据平台,GPU平台,功能工程平台和AB测试平台.
最重要的是,我们具有智能分配,订单分配和智能营销等模块. 同时,算法人员还进行了各种数据挖掘,机器学习和优化查找.
对于阿里巴巴的本地生活,我们的图像视觉团队负责整个本地生活群体中与图像和视觉相关的所有识别和检查任务. 而且所有图像处理都是基于深度学习的.
我将从以下三个方面介绍我们的做法:
物体识别
在我们的生活场景中,物体识别有很多需求,例如:
因此,在骑行者的App中,我们添加了服装检测功能. 骑手每天只需将其帽子,衣服和饭盒的自拍照发送到平台,我们的图像算法便可以在后台自动检测并识别它们.

通过面部检测,我们可以识别出骑手是否是他本人,然后检查其午餐盒和头盔.
因此,我们需要与政府机构合作,以检查餐厅的营业执照和卫生许可证是否已通过水印和QR码被篡改.
此外,我们还要求餐厅的签名不能出现在餐厅的菜肴图片中. 这些将涉及大量的计算机视觉处理.
对于图像目标的检测和评估,行业目前有两个指标:
上图列出了用于目标检测的常用基本算法,它们分为两类:
两步方法的历史较长. 它起源于传统的滑动窗口方法. 2014年,出现了使用深度学习进行目标检测的R-CNN.
后来,有了金字塔池化的SPP方法,并在此基础上开发了Fast R-CNN和Faster R-CNN的两个版本.
当然,当Faster R-CNN算法应用于机器人进行实时检测时,为了获得毫秒级检测结果的反馈,通常会对系统性能造成巨大压力.
因此,有人提出了一种单步方法,最常用的是2016年提出的SSD算法.
尽管在2017年和2018年出现了一些新算法,但它们尚未得到广泛认可,还需要进一步的“沉淀”.
接下来,让我们讨论针对不同场景的那些求解算法. 在这里,我将不涉及任何公式,也不涉及任何派生,而仅使用简单明了的语言来描述每种目标检测算法背后的核心思想.
R-CNN的简单思想是:
上述各种R-CNN过程的最大问题是候选帧过多. 由于矩形框的形状(包括长度,宽度,中心坐标等)不同,因此,如果图片中的对象过多,则发现的矩形框的数量可能达到数千个.
由于每个候选框都需要由CNN分别分类,因此整个算法的效率不高. 当然,作为后来改进算法的基础,R-CNN提供了全新的解决方案.
SPP(空间金字塔池)的特征是:
例如,在某张图片上既有大象又有狗. 由于大象和狗之间的体积差异很大,传统的R-CNN检测只能集中在大象占据的图像区域上.

SPP将缩小图像以定位较小的图像. 它可以先检测大象,然后再放大以检测狗. 可以看出,它可以获取不同比例的图像特征.
它通过神经网络获取目标框架,然后使用后续的CNN来检测目标框架,从而实现端到端训练.
上面的图片是我编译的Faster R-CNN执行的逻辑框架图. 该过程是:
如果存在对象框的输出,则预测对象框的中心坐标和大小. 此处有四个输出(中心坐标的X和Y,以及长度和宽度). 因此,每个对象帧有六个输出.
通过使用NMS,我们可以合并或忽略这些高度一致的帧,最后输出对象的候选帧.
可以看出,尽管上述各种两步法具有较高的准确性,但速度较慢. 在许多实际场景中,我们需要实时检测目标.
例如: 无人驾驶时,我们需要实时检测周围的车辆,行人和路标. 因此,一步式方法很方便. YOLO和SSD都属于此类.
YOLO方法的核心思想是整个图像只需要扫描一次,过程是:
由于此方法相对较旧,因此在实际应用中通常不是首选.
作为首选,SSD使用类似于金字塔结构的处理方法. 它会通过循环不断地对给定图片进行降采样,然后再获得另一张分辨率较低的图片.
同时,在降采样后的低分辨率图片上,该方法将重复对象检测以发现对象信息.
因此,SSD的核心思想是: 将同一张图片分成多个级别,并使用从每个级别到下一个级别的下采样,以检测每个级别图像中的对象帧并将其呈现
可以看出,对于YOLO,SSD可以找到不同分辨率的目标并探索更多的候选对象框架. 在随后的重新排序过程中,我们将获得更多的行保留.
当然,SSD也是一种非常复杂的算法,其中包含许多要调整的详细参数,因此您可能会觉得它不容易控制.
此外,SSD毕竟仍然是矩形框检测算法. 如果目标对象本身的形状不规则或呈长条状,则需要使用最新的语音分割来实现.
文本识别

除了使用传统的OCR方法来识别ID卡,明和营业执照外,我们还需要在以下情况下执行OCR识别:
传统的OCR流程通常分为三个步骤:
但是,由于以下原因,此过程不适用于存储菜单识别:
因此,我们分两步采用了基于深度学习的识别方案: 文本行检测+文本行识别.
首先定位图片中的文本区域,然后使用端到端算法实现对文本行的识别.
如上图所示,文本行的检测来自对象识别算法,包括:
说到全卷积网络(FCN),它通常用于语义分割,其OCR效果也最好.
原则上,它使用卷积网络通过提取特征使图像越来越小来连续执行卷积和池化操作.
然后执行去卷积和去池化操作以使图像越来越大,然后找到图像对象的边缘. 因此,整个结构是U形的,因此与U-Net有很强的相关性.
如上图所示: 我们不断缩小清晰的图像,以获得只有几个像素的蓝点和白点,然后逐渐放大以显示多个蓝点和白点.
接下来,我们使用SoftMax根据该区域进行分类. 最后,我们可以找到图像对象的边缘.
经过实践,我们认为最好的方法是基于完全卷积网络的EAST. 如上图所示,它的特征是它可以检测任何形状的四边形,而不仅限于矩形.
EAST的核心原理是: 我们连续卷积上图左侧的区域以缩小图像. 在中间的绿色区域,我们合并了不同比例尺的特征.
在右侧的蓝色区域中,我们基于提取的特征执行两次检测:
对于文本行的识别,当前行业中常用的方法是CTC + Bi-LSTM + CNN. 如上图所示,我们应该从下往上看: 首先,我们使用CNN提取给定图像的卷积特征响应图.
然后将文本行的卷积特征转换为序列特征,并使用双向LSTM提取序列特征;最后,利用CTC方法计算出图像的序列特征与文本序列特征之间的对应概率.

值得一提的是,CTC方法的基本原理是: 首先,通过添加空白字符,使用SoftMax对步特征和相应字符进行分类.
以此,对于每个图像序列,可以获得字符序列的概率. 然后通过后期处理,删除空白字符和重复的符号,并最终产生输出效果.
三维重建
在无人驾驶场景中,有时我们可能需要移动摄像机以从收集的数据中构建建筑物的三维结构.
如上图所示,核心框架是: 首先,不仅对各种给定的图片执行CNN特征提取,而且我们还可以使用SIFT方法(见下文)提取一些角点特征.
然后,我们对这些角点进行三角测量,并通过匹配找到相机的空间位置.
最后,我们使用光束调节来连续构造空间位置和相机本身之间的关系,然后实现三维构造.
上面提到的SIFT特征提取,其特征在于速度相对较慢. 因此,为了满足摄像机在运动过程中接近实时三维结构的需要,我们需要对该算法进行大量的调整工作.
同时,在3D重建中,我们需要注意重投影误差的概念. 其原因是: 通常,现实中的三维点在落到相机上后会转换为平面上的点.
如果要基于平面图像构建三维模型,则需要将平面上的点重新投影到三维空间中.
但是,如果我们错误地估计了摄像机自身的参数,则重铸点与其在3D世界中的真实位置之间将会出现错误.
如前所述,我们还可以使用光束调整来求解矩形线性方程. 通常将使用稀疏BFGS(拟牛顿法)求解,然后还原空间中的每个三维点.
最后一步是过滤异常值. 由于在3D重建过程中会遇到很多噪声,因此为了对其进行过滤,我们将使用RANSAC方法来过滤离群值.
原则上,它将继续随机选择一些点,构建一个免费模型,然后评估最佳模型.
如上图所示,由于上面的两个图像中有大量的边缘位置特征,因此我们可以对RANSAC异常值进行过滤以匹配它们的特征点,最后合成一张图像. 通过该算法,我们还可以自动发现第二张图片倾斜的角度.
通常,我们在对象识别,文本识别和3D重构领域尝试了许多算法. 我希望通过以上分析,每个人都能了解和理解各种算法的效果.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-285123-1.html
跟中国实体经济不是因果关系
加油我的小王子
康师傅跟鬼子有啥关系
不过