当前位置: 首页 > 科技观察

图像识别没有你想的那么难!看完本文,你也能成为专家

时间:2023-03-13 19:57:27 科技观察

【.com原创稿件】本地生活场景包含大量具有挑战性的计算机视觉任务,例如菜单识别、招牌识别、菜品识别、商品识别、行人检测和室内视觉导航等等。这些计算机视觉任务对应的核心技术可以概括为三类:物体识别、文本识别和3D重建。2018年11月30日至12月1日,由WOT主办的WOT全球人工智能技术峰会在北京JW万豪酒店举行。本次峰会的主题是人工智能。阿里巴巴本地生活研究院人工智能部负责人李培与大家分享了他们在图像识别过程中遇到的各种问题以及寻求的各种解决方案。什么是本地生活场景我们理解的本地生活场景是:从传统的O2O到OMO(Online-Merge-Offline)。对于打车、饿了么等O2O来说,线上线下的界限越来越模糊。传统的线上订单不再局限于线下,它们正在交互融合。2018年,我们看到滴滴通过重金打造和管理自己的车队。他们在车里装了很多监控设备,想把车和人改造到线下。同样,对于饿了么,我们不仅改造了线下物流配送,还尝试用机器人进行无人配送,并引入了智能外卖盒等创新。可以看出,在本地生活场景中,我们的核心任务是将智能IoT(即AI+IoT)应用到OMO场景中。上图为阿里巴巴本地饿了么业务的人工智能应用逻辑架构。与所有其他人工智能应用计算平台类似,我们在底层使用了一些通用组件,包括:数据平台、GPU平台、特征工程平台、AB测试平台。除此之外,我们还有智能配送、订单派送、智能营销等模块。同时,算法人员还进行了各种数据挖掘、机器学习和识别优化。目前,对于阿里巴巴的本地生活,我们的图像视觉团队承担了整个本地生活群内所有与图像和视觉相关的识别和检测任务。并且所有图像处理都是基于深度学习实现的。我将从以下三个方面介绍我们的做法:对象识别。文字识别。这里特指菜单、店面招牌、产品包装图文的识别,而不是传统意义上的报刊杂志识别。三维重建。物体识别在我们的生活场景中,对物体识别的需求非常多,例如:饿了么平台需要检测骑手的着装是否规范。由于骑乘人数众多,单纯依靠人工控制显然是行不通的。因此,在骑手的APP中,我们加入了着装检测的功能。骑行者只需每天将自己的帽子、衣服、饭盒等自拍照发送至平台,我们的图像算法即可在后台自动检测识别。通过人脸检测,我们可以识别出骑车人是不是本人,然后查看他的饭盒和头盔。场景物体识别。通过检测行人、办公区桌椅、电梯按钮等,确保机器人能够识别无人驾驶生活场景中的各种物体。合规性测试。因为饿了么平台上有大量的商品、餐食和招牌、营业执照、卫生许可证、健康证等图片。因此,我们需要配合政府部门,检查餐厅的营业执照和卫生许可证是否被水印和二维码篡改。另外,我们还要求餐厅的招牌文字不能出现在餐厅的菜品图片中。这些都涉及到大量的计算机视觉处理。场景文字识别。在物体识别的基础上,通过目标检测的应用,识别物体上的文字,如:菜单中的菜品和蔬菜价格。对于图像目标的检测和评价,目前业界有两个指标:平均检测精度。即物体框分类的准确率。首先计算每个类的准确度,然后计算所有类的准确度。IOU(并集交集)。即预测目标框与实际标准目标框的覆盖率,即交集与并集的比率。上图列出了目标检测常用的基本算法,分为两大类:两步法一步法和两步法历史稍长,起源于传统的滑动窗口法。2014年,出现了使用深度学习进行物体检测的R-CNN。然后是pyramidpooling的SPP方法,并在其之上发展了FastR-CNN和FasterR-CNN两个版本。当然,当FasterR-CNN算法应用于机器人进行实时检测时,为了实现毫秒级的检测结果反馈,往往会给系统的性能带来巨大的压力。因此提出了一步法,其中最常用的是2016年提出的SSD算法。2017年和2018年虽然出现了一些新的算法,但并未得到广泛认可,需要进一步“沉淀”。下面,我们讨论针对不同场景目标的求解算法。在这里,我不涉及任何公式,也不涉及任何推导。我只会用通俗易懂的语言描述每个目标检测算法背后的核心思想。R-CNN的简单思想就是:RegionProposal。首先,将目标图像划分为许多网格单元,称为超像素;然后,将具有相同颜色或纹理的相似相邻超像素聚类,并找到外接矩形框。这个矩形框称为RegionProposal。分类。先用CNN提取特征;然后得到卷积的线性图,再用SoftMax或者其他分类方法进行一般分类。上述各种R-CNN管道的问题是产生的提案数量太多。由于矩形框的形状,包括长、宽、中心坐标各不相同,如果一张图片中的对象太多,可以找到数千个矩形框。由于每个候选框都需要单独的CNN分类,整体算法效率不高。当然,作为后来改进算法的基础,R-CNN提供了一种新的解决方案。SPP(SpatialPyramidPooling)的特点是:所有候选框共享一个卷积网络的正向计算。即:先对整幅图像进行一次性CNN计算,并提取特征,再对特征响应图像进行后续操作。由于只进行了卷积计算,因此其性能提升了很多。通过金字塔结构得到不同尺度空间的ROI区域。即:通过将图片分成许多不同的分辨率,以不同的尺度检测物体。例如,某张图片中既有大象又有狗。由于大象和狗的体型差异较大,传统的R-CNN检测只能关注大象占据的图像区域。另一方面,SPP缩小图像以定位较小的图片。它可以先检测大象,然后放大图像来检测狗。可以看出,它可以获取不同尺度图像的特征。FastR-CNN通过在简化SPP的同时添加各种加速策略来提高性能。不过在算法策略上并没有太大变化。FasterR-CNN创造性地提出使用神经网络RPN(RegionProposalNetworks)来替代传统的R-CNN和SPP,并得到了广泛的应用。它通过神经网络获取目标框,然后使用后续的CNN检测目标框,从而实现端到端的训练。上图是我编译的FasterR-CNN的执行逻辑框架图。过程如下:使用CNN计算图像的卷积响应图。执行3×3卷积。使用两个全连接层,预测每个像素对应的位置是否有物体框,然后产生两个输出(“是”的概率和“否”的概率)。如果有objectframe的输出,预测objectframe的中心坐标和大小。这里有四个输出(X和Y为中心坐标,以及长度和宽度)。因此,对于每个对象框,总共有六个输出。使用通用的NMS进行后处理,旨在过滤一些高度重叠的对象帧。例如:如果图片中有一群小狗,检测到的物体框可能会重叠。通过使用NMS,我们可以对这些高度重合的帧进行合并或忽略等操作,最终输出目标的候选帧。CNN用于分类。可以看出,上面提到的各种两步法虽然精度高,但是速度慢。在很多真实场景??中,我们需要实时检测物体。例如:在无人驾驶过程中,我们需要实时检测周围的车辆、行人和路标。因此,一步法就派上用场了。YOLO和SSD都属于这一类。YOLO方法的核心思想是:整张图片只需要一次扫描,过程如下:使用CNN得到一个卷积响应图。将响应图划分为S*S个网格。两个全连接层用于预测物体框的中心坐标和大小,以及网格在物体类别上的概率。将图片中物体检测的所有信息存储到一个Tensor(张量)中。使用后处理输出对象类别和框。由于这种方法比较老,在实际应用中一般不推荐使用。SSD采用类似金字塔的方法进行处理。它通过循环获取另一张分辨率较低的图片,不断对给定图片进行下采样。同时,在降采样后的低分辨率图像上,该方法会反复进行物体检测,以发现物体的信息。因此,SSD的核心思想是:将同一张图片分成多个层级,从每一层到下一层使用降采样,从而检测出每层图片中的物体框并呈现出来。可以看出,对于YOLO,SSD可以发现不同分辨率的目标,发现更多倍数的候选物框。在后续的重新排序过程中,我们将获得更多的线路预留。当然,SSD也是一个非常复杂的算法,里面有很多需要调整的细节参数,所以你可能会觉得不好控制。另外,SSD毕竟还是一种针对矩形框的检测算法。如果目标物体本身的形状是不规则的或者呈现为长条状,我们就需要使用语音分割来实现。文字识别除了传统的OCR方式识别健康证和营业执照外,我们还需要对以下场景进行OCR识别:说明。通过收据、标签等票据的识别,将传统依赖人力流通的物流流程转变为更加自动化的流程。识别各种菜单。传统的OCR流程一般分为三个步骤:简单的图像处理。例如:根据拍摄角度,进行几何校正。提取数字图像的特征,进行逐字切割。将AdaBoost或SVM等统计机器学习应用于单个字符以进行光学文本识别。但由于以下原因,该过程不适合应用于门店菜单识别:由于过于依赖相机角度、几何校正等规则,在处理移动端时会涉及到大量的半人工校正手机拍摄操作。由于目标文字多为户外广告牌,会受到光影影响,手机晃动也可能造成模糊。因此,传统的识别模型鲁棒性不够,抗干扰能力弱。由于上述三步模型串联太多,每一步造成的误差可能会传递并累加到下一步。传统方法不是端到端的模型,文本行识别必须分割成单个字符,因此无法识别整行。因此,我们采用了基于深度学习的识别方案,分两步进行:文本行检测+文本行识别。即首先定位图片中的文字区域,然后使用端到端的算法实现对文字行的识别。如上图所示,文本行的检测来源于物体识别的算法,包括:CTPN方法由FasterR-CNN生成,专门用于文本行的检测。SSD带来的Textboxes和Textboxes++。EAST源自全卷积网络或U-Net等。说到全卷积网络(FCN),常用于语义分割,其OCR效果也不错。原理上,它是利用卷积网络,通过提取特征不断进行卷积和池化操作,使图像越来越小。然后进行反卷积和反池化操作,使图像越来越大,然后找到图像物体的边缘。所以整个结构是U型的,所以和U-Net有很强的相关性。如上图所示:我们将一张清晰的图片不断缩小,得到只有几个像素的蓝白点,然后逐渐放大,出现多个蓝白区域。然后,基于这个区域,我们使用SoftMax进行分类。最后我们可以找到图像对象的边缘。经过实践,我们觉得基于全卷积网络的EAST效果很好。如上图所示,它的特点是能够检测任意形状的四边形,不局限于矩形。EAST的核心原理是:我们不断地对上图左边的区域进行卷积运算,从而缩小图像。在中间的绿色区域,我们结合了不同尺度的特征。在右侧蓝色区域,我们根据提取的特征进行了两次检测:RBOX(旋转矩形框),假设一个文本块仍然是一个矩形,旋转显示上面的文本。QUAD(任意四边形),给定四个点,连接成一个四边形,检测其中的文字。对于文本行的识别,业界常用的方法是CTC+Bi-LSTM+CNN。如上图所示,我们应该从下往上看:首先我们使用CNN提取给定图像的卷积特征响应图。然后,将文本行的卷积特征转化为序列特征,使用双向LSTM提取序列特征;然后利用CTC方法计算图像序列特征与文本序列特征对应的概率。值得一提的是,CTC方法的基本原理是:首先通过加入空白字符,利用SoftMax在台阶特征与对应字符之间进行分类。这样,对于每一个图像序列,就可以得到字符序列出现的概率。然后通过后期处理,删除空白字符和重复符号,最终输出效果。3D重建在无人驾驶场景中,我们有时可能需要通过移动摄像头采集的数据来构建建筑物的3D结构。如上图所示,其核心框架是:首先,不仅对各种给定的图片进行CNN特征提取,我们还可以使用SIFT方法(见下图)提取一些角点特征。然后,我们对这些角进行三角剖分,通过匹配找到相机的空间位置。我们通过光束调整不断构建空间位置与相机本身的关系,进而实现三维构建。上面提到的SIFT特征提取的特点是速度比较慢。因此,为了满足摄像机在运动过程中近乎实时的3D构建,我们需要在算法上做大量的调优工作。同时,在3D重建中,需要注意重投影误差的概念。这样做的原因是:通常现实中的三维点落在相机上后,会转化为平面上的点。如果我们要基于平面图像构建3D模型,就需要将平面上的点重新投影到3D空间中。但是,如果我们对相机本身参数的估计不准确,那么重铸点与其在3D世界中的真实位置之间就会存在误差。如前所述,我们还可以使用束调整来求解矩形线性方程组。通常采用稀疏BFGS(拟牛顿法)求解,然后还原空间中的每一个三维点。过滤异常值。由于我们在3D重建的过程中会遇到很多噪声,为了过滤掉它们,我们会使用RANSAC方法来过滤异常值。原则上,它会不断地随机抽取一些点,并建立一个自由模型,然后评估一个更好的模型。如上图所示,由于上面两张图中存在大量的边缘位置特征,我们可以过滤掉RANSAC离群点来匹配它们的特征点,最终合成一张图片。并且通过算法,我们还可以自动检测出第二张图片的角度是否倾斜。总的来说,我们在物体识别、文本识别、3D重建等领域尝试了大量的算法。希望通过上面的分析,大家能够了解和理解各种算法的效果。作者:李培简介:阿里巴巴本地生活研究院人工智能部负责人【原创稿件,合作网站转载请注明原作者及出处为.com】