数平精准推荐 | OCR技术之系统篇

导语:如果说算法和数据是跑车的发动机和汽油,那么系统则是变速箱,稳定而灵活的变速箱,是图像识别服务向前推进的基础。算法、数据、系统三位一体,随着算法的快速发展和数据的日益积累,系统也在高效而稳定地升级。

一、背景介绍

前面的系列文章分别介绍了算法和数据,如果说算法和数据是跑车的发动机和汽油,那么系统则是变速箱,稳定而灵活的变速箱,是图像识别服务向前推进的基础。算法、数据、系统三位一体,组合成完整的OCR在线服务。伴随着算法的升级和业务的持续接入,系统也经历了从单机版升级到分布式版本;从为了每个算法定制系统模块,到分离框架和算法逻辑,提高算法的运行效率和模块的可重用性;从单一的运行环境,升级到CPU/GPU异构并行。除了一般分布式系统所需要提供的功能,我们还结合算法和运维特性,增加了单点热更新和集群快照等特性。

二、我们面临的挑战

图像识别服务框架作为一个提供在线服务的系统,既面临一般的业务系统或平台所面临的挑战,也面临作为算法系统,需要支撑复杂算法和业务的挑战,主要表现在以下几点:

1.高性能与高可靠

任何在线系统都面临性能和可靠性的挑战。在我们系统中,图像识别服务作为在线服务,需要能够迅速响应并返回,并且不管在框架层还是算法层,都要保证高可用性。

2.系统解耦&高可扩展性

作为一个分布式的算法系统,算法模块与框架的解耦,可以使算法与后台人员更高效的同步开发,分别对算法与框架进行更新迭代。而高可扩展性,既要求框架在集群上支持资源可扩展,又要求做到单机算法的迅速接入与替换。

3.复杂业务与算法的支撑

随着业务的持续接入和算法的复杂化,需要在框架层灵活的支撑算法,高效的算法模块重用以及迅速适配新算法并接入新业务。

4.不同运行环境的支持

算法系统,尤其是图像识别算法系统,运行环境包括CPU与GPU,框架除了要支持不同环境的高效运行,也要支持不同环节运行在不同硬件环境,以保证资源合理高效的使用。

三、我们的解决方案

图像识别从算法研究、模型训练到规模化的提供服务,需要处理的流程比较多,我们将开发阶段主要分为如下两个阶段:

算法研究&模型训练:

算法人员进行算法研究、模型训练,以及业务对接。算法无需关心框架以及系统的调度,只需输出单个模块的算法SO和训练好的模型文件。

框架开发&算法集成:

后台开发人员进行服务框架的开发及算法SO的集成运行,即把算法研究人员研究好的算法及模型文件集成到服务框架中,提供稳定的在线图像识别服务。

接下来将重点介绍系统的设计和实现。

四、图像识别服务框架

4.1 系统架构

框架层使用Java编码,算法层采用插件化设计,可以加载jar包、so或者其他脚本,这是一个多语言的混编系统。图像识别算法一般都是计算密集型,并且一部分需要运行在GPU上,所以在算法层,我们使用CUDA C++编写so,使用JNI挂载so进行算法的执行和调度。如图1,架构上主要分为三层:接入层、框架层、算法层,再加上评测系统、存储系统、监控告警系统、日志系统等周边系统构成一套完整的图像识别服务系统。

图1  图像识别服务框架系统构架图

接入层:包括协议转换、参数输配和结果适配等

框架层:图像识别服务运行的系统框架,加载运行算法SO,提供稳定的识别服务,包括

  • Master:接收接入层的请求,进行请求拆分、请求调度、结果合并等
  • Worker:实际执行算法的进程载体,主要包含算法SO/模型的加载、更新,进行算法的执行
  • Zookeeper:存储worker心跳信息、算法映射关系、算法执行计划、算法静态/动态快照信息等
  • ConfigServer:监听worker心跳并实时更新动态动态路由表,触发master更新路由规则及连接池

算法层:算法人员提供各种算法模型及算法so

周边系统

  • 评测系统:提供版本评测功能
  • 存储系统:非敏感图片及badcase存储
  • 监控告警:监控服务的运行状态,在异常时进行告警
  • 日志系统:请求日志的存储,为问题的跟踪排查提供依据框架运行时

4.2 系统运行态

本节将结合实际的OCR预测请求剖析框架的运行态。

1)   一个OCR识别实例

如图2,我们以STR(Scene Text Recognition,场景文字识别)为例,一个典型的使用场景为广告图片素材理解。在任务中,我们将识别图片中文字,并给出具体坐标。

图2  一个OCR识别实例

2)  系统运行态

如图3,我们详细剖析上述实例在框架中的运行过程

图3 系统运行态

1. 业务侧的请求携带图片内容(或图片URL)、bid(标识不同的业务)及tid(标识不同算法大类)。

2.  在master节点找到对应的算法,然后找到相应执行计划,执行计划中定义了算法的执行步骤;根据各个步骤找到相应的路由节点,master将请求拆分/打包/路由到相应的worker

3. master将原始图片路由分发到检测子系统。检测过程运行在GPU上,算法so检测出模块中各个图片框(如图2中的“京东”、“内外真皮”等),切分好之后将结果返回给master

4. master将检测结果拆分,并行分发到识别子系统。识别过程运行在GPU上,算法so将识别出单个图片框的文字,分别返回给master

5.  master将识别结果汇总,一起发送到重排序子系统。重排序子系统运行在CPU上,算法so将结果返回给master

6.  master将最终结果封装并返回

每个模块在整个过程中的作用为:

  • 算法映射:由bid+tid映射到一个具体的子算法。相同的tid与不同的bid组合,可以支持不同业务对同类算法的定制
  • 执行计划:定义算法的执行步骤,比如图中STR图片文字识别,包含三个步骤:检测、识别和重排序
  • 动态快照:即动态路由表,定义了算法每个阶段映射到的具体节点。worker上报心跳,由ConfigServer整理生成动态路由表,由Master节点监听路由表的变更

4.3   容灾与集群热更新

热更新能力是一个系统提供可靠和稳定服务的基础功能,即可以保证系统的无损升级,又可以保障系统的容灾能力。如图4,系统主要借助zookeeper和worker的心跳机制实现集群热更新。

图4  集群热更新

  • Worker:在启动的时候与zookeeper建立临时节点维持心跳信息
  • Configserver:监听worker在zookeeper的心跳信息,如果worker断连或重连,configserver立刻感知到并修改动态快照
  • Master:监听zookeeper上的动态快照信息,动态快照变更立刻触发路由规则及路由连接池的更新

通过这几个角色的配合,在worker节点出现异常的情况下,master迅速就完成了切换,保证了系统的稳定。这种机制也支持了集群的热更新,在需要对某个worker进行更新时,先对worker进行下线,master感知后不向此worker发请求,完成更新启动后,master再跟其重新建立连接并发送请求。

4.4 单点热更新

单点热更新,指的是在不重启服务的前提下,对进程内单个或多个模块进行替换升级。与其他业务系统不一样的,在算法平台下,考虑以下两种场景:

1)  一个进程内加载了多个算法SO,需要对其中一个算法模块进行更新;

2)   算法链上串行多个模块,需要对其中一个模块进行实验或更新。

这两种场景下,使用集群热更新或者对进程进行重启,就有点重了,所以我们实现了一套进程内单个so的动态更新方案。通过Java代码是无法直接实现SO的动态加载的,如图4,我们引入了代理so,通过在代理so进行(dlopen,dlsym和dlclose)操作,从而达到动态加载SO的目的。同时在代理so中,我们封装了所有JNI转换和算法需要使用的接口,很好的进行了框架和算法的解耦。除了so的动态加载,我们还实现了模型的动态加载。

图5  单点热更新

4.5 静态快照

通常在分布式框架中,是不需要静态快照的。但在算法系统中,我们通常需要频繁上下线一批so,而这些so会分布在不同机器不同节点上。虽然简单的通过上传/删除服务器上的本地so文件,可以触发相关进程的动态加载/卸载,但这种操作繁复,在算法复杂,一个进程加载了很多so的时候,操作容易出错。所以,这里我们需要在运维上对系统进行优化,提高系统可运维性。

如图5,我们在动态快照的同时还引入了静态快照,静态快照由运维通过脚本或配置文件写入静态路由表,将一个集群的预期初始状态配置到zookeeper上。ConfigServer整理静态快照和worker上报的心跳信息,生成最终的动态快照。

图6  静态快照

这种动静态快照结合的集群快照机制相比只有动态快照在运维上会稍微复杂,但可以通过运维工具降低复杂度。动静态集群快照机制优势也很明显,第一、在复杂算法下,不容易出错;第二、可以在动态快照之余快速上下线一些算法或者更改算法流程。

五、框架的一些思考

我们成功地将Java与CUDA C++混编系统作为图像识别服务框架,并且支撑了众多业务。成熟稳定的框架,可以解放更多的人力用于算法开发和业务接入。依托于Java成熟的开源工具,可以迅速开发出框架和进行维护,使用Java作为框架调度层和网络层,对比传统C++框架并没有性能差异;而使用CUDA C++编写SO的方式,可以更好的适配GPU环境和深度学习框架,更高效地利用机器计算资源。当然,我们的系统还在持续进化,后续将进一步在资源利用率、调度效率、业务接入速度和运维精细化等方向继续努力。

六、结束语

我们推出了OCR技术系列文章总共包括了《OCR技术之检测篇》《OCR技术之识别篇》《OCR技术之数据篇》、《OCR技术之系统篇》等4篇文章,希望通过这些文章能够与大家一同探讨OCR领域的一些技术与应用。在后续的工作中,团队也将继续在OCR领域深耕细作,不断前行,持续提升技术水平与服务质量,为OCR技术的发展贡献微薄之力。

原文地址:http://blog.51cto.com/13591395/2106700

时间: 2024-10-27 19:19:54

数平精准推荐 | OCR技术之系统篇的相关文章

数平精准推荐 | OCR技术之数据篇

导语:深度学习在OCR领域的成功应用需要大量数据,数平精准推荐团队利用图像增强,语义理解,生成对抗网络等技术生成高质足量的数据,为算法模型提供燃料,帮助OCR技术服务在多种业务场景中快速迭代,提升效果. 一. 背景介绍 如果把深度学习看做引擎,大量带标注的数据则是燃料,燃料的体量和质量直接影响引擎的动力.随着计算能力大幅增强,深度学习模型已向着wide & deep的方向越走越远,更大更深的模型需要更多的数据训练.这一点从近年来学术界与工业界竞相公开的数据集规模上可见一斑.以经典的计算机视觉任务

腾讯数十亿广告的秘密武器:利用大数据实时精准推荐

在过去几年,你在腾讯做了什么来推动大数据的应用? 过去三年,我一直在坚持一件事:推动大数据的实时应用.现在从国外数据中心的数据,一秒钟可以达到深圳数据中心,这就是腾讯具备的数据能力.有了这个能力,就可以做很多商业化行为的模式. 目前腾讯收集的数据已经超过了1万亿条, 计算机规模已经超过了8千8百台.这么庞大的数据如果能实时处理,就能发挥出巨大的商业价值.这个商业价值就是精准推荐. 每年腾讯几十亿的广告,其基础来自于数据的精准推荐.实时数据推荐还可以用于视频的推荐,腾讯音乐推荐,新闻客户端的推荐,

OCR技术在机动车检测(综检、安检、环检三合一系统)中应用

OCR技术在机动车检测(综检.安检.环检三合一系统)中应用 机动车检测站为充分利用现有检测设备和人员优势,优化检测流程,升级检测网络系统,方便车主在一次上线检测过程中能完成机动车的技术状况检测.维修竣工质量检测.安全技术检验及排气污染物检测,向社会提供更加高效便捷的检测服务,并通过上级主管部门的审核同意,正式开展三合一(综检.安检.环检一并检测)的模式,计划通过技术升级和联网改造,并对现有场地进行合理调整,并增加相应检测设备,简化检测流程. 原有流程(先缴费.填表后检测) 现有流程(先检测.自动

大数据流式计算:关键技术及系统实例

孙大为1, 张广艳1,2, 郑纬民1 摘要:大数据计算主要有批量计算和流式计算两种形态,目前,关于大数据批量计算系统的研究和讨论相对充分,而如何构建低延迟.高吞吐且持续可靠运行的大数据流式计算系统是当前亟待解决的问题且研究成果和实践经验相对较少.总结了典型应用领域中流式大数据所呈现出的实时性.易失性.突发性.无序性.无限性等特征,给出了理想的大数据流式计算系统在系统结构.数据传输.应用接口.高可用技术等方面应该具有的关键技术特征,论述并对比了已有的大数据流式计算系统的典型实例,最后阐述了大数据流

禧云数芯大数据平台技术白皮书

白皮书作者:赵兴申 顾问:郑昀 出品方:禧云集团-基础技术中心-大数据与算法部 数据分析组:谭清勇.王明军.徐蕊.曹寿波 平台开发组:刘永飞.李喜延 数据可视化组:陈少明.董建昌 基础架构组:崔明黎.邱志伟.陈赏 第一章:数芯大数据平台 1.1 禧云大数据发展历程 知名咨询公司麦肯锡称:『数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素.人们对海量数据的挖掘和运用,预示着新一波生产率增长和消费盈余浪潮的到来.』良好的数据管理和处理技术,已经成为企业不可或缺的竞争优势. 禧云集团(

手机扫一扫护照识别OCR技术

一.护照识别OCR技术应用背景 护照是一个国家的公民出入本国国境和到国外旅行或居留时, 由本国发给的一种证明该公民国籍和身份的合法证件.如今,在很多APP中都涉及到对护照信息录入录入,由于护照上的信息量非常大,如果手动去输入护照信息,速度非常慢,且用户体验非常差,效率非常低.为了提高在移动终端上输入护照信息的速度和准确性,我司开发出护照识别OCR技术,以满足各行业应用需求,给用户带来更好的体验.只需将护照识别SDK集成到APP中,即可通过手机摄像头扫描识别护照信息. 二.护照识别OCR技术产品描

互联网精准广告定向技术(转)

http://www.williamlong.info/archives/3125.html 互联网精准广告定向技术,指的是依托于搜索引擎庞大的网民行为数据库,对网民几乎所有上网行为进行个性化的深度分析,按广告主需求锁定目标受众,进行一对一传播,提供多通道投放,按照效果付费. 本文的写作初衷是总结自己的知识,将知识从片段的.隐形的转化为可以向别人讲述.能够给人帮助的.在总结的过程中自己也提升了很多,同时希望这些内容能够切实的给刚进入这个行业的同学们以帮助.为了查看方便,特把内容进行汇总. 一.基

OCR技术的简介及发展

一.OCR技术的发展历程  自20世纪60年代初期出现第一代OCR产品开始,经过30多年的不断发展改进,包括手写体的各种OCR技术的研究取得了令人瞩目的成果,人们对OCR产品的功能要求也从原来的单纯注重识别率,发展到对整个OCR系统的识别速度.用户界面的友好性.操作的简便性.产品的稳定性.适应性.可靠性和易升级性.售前售后服务质量等各方面提出更高的要求. IBM公司最早开发了OCR产品,1965年在纽约世界博览会上展出了IBM公司的OCR产品--IBMl287.当时的这款产品只能识别印刷体的数字

【OCR技术系列之一】字符识别技术总览

最近入坑研究OCR,看了比较多关于OCR的资料,对OCR的前世今生也有了一个比较清晰的了解.所以想写一篇关于OCR技术的综述,对OCR相关的知识点都好好总结一遍,以加深个人理解. 什么是OCR? OCR英文全称是Optical Character Recognition,中文叫做光学字符识别.它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受.人又可以理解的格式.文字识别是计算机视觉研究领域的分支之一,而且这个课题已经是比较成熟了,并且在商业中已经有很多落地项