一. 前言
在上文《》【1】中,我们提到了来也核心OCR能力已经在内部的AI平台上实现了数据驱动优化。
在一站式的AI平台上,我们又抽象了适用不同场景的算法模型,这样如果业务场景可以被这些算法模型覆盖,我们只需要通过数据驱动的方式产出该场景OCR产品,低成本的实现产品的交付。
在本文中,我们将通过一个场景来简述,如何通过来也AI平台高效的产出这类场景的OCR的模型和最终的API。
二. 场景简述
在OCR识别的某些场景上,特别是偏自然或者工业识别场景,一般在整张图片中,目标文字只在一个区域(目前的方案也能实现多个区域目标文字的识别),且需要的目标文字有着明显的视觉差异特征,比如识别文字的字号、颜色、字体或者字体背景色等和图片上其他文字有着明显的差异,如以下场景,印章、电表度数、车牌、轮胎型号,汽车VIN码等等。
这些场景基本的特点如下:
目标文字区域视觉特征明显
文字形状多变、文字排列方式多变
通过这些基本特点分析,我们知道如果作为一个OCR识别的技术问题,文本检测上难度较小;而识别难度很大且需要兼容各种多变的文字排列方式,所以最终我们选定了YOLOV5 【2】和TrOCR 【3】来统一解决这类场景问题,下边将简述如何在AI平台操作,最终实现这个模型和服务的产出。
三. 模型和服务产出
在AI平台上,产出上述场景的模型只需要经过以下简单的几步即可实现。
1. 上传和标注数据
在整个训练数据管理上,我们采用了树状层级目录以及结构化标签的方式来进行数据管理,方便上游更容易筛选得到想要的数据,此外对单个叶子目录的数据拆分为:训练集合和测试集合。训练过程选中这个集合的话,只会用训练集合集合的数据;而测试的时候只会用测试集合,避免对数据处理逻辑不一致导致测试数据泄露。
数据上传完成后,就可以进行标注,整套标注工具我们基于CVAT 【4】 ,并对做了源码级别的修改,使其简单易用,此外为了提高标注效率和质量,我们又做了各种预标注的工具,大多数情况下标注人员只需要检测预标注是否有问题就可以。
考虑到大多数时候,标注工作都是第三方公司来完成,所以在数据管理和标注功能这块,我们又做了较多的数据权限,标注结果质检、工作量考核相关的工作,未来在其他文章将详述。当数据工作准备完成后,就可以启动模型训练,一次模型训练我们称之为一次实验,在预置的众多场景模型中选中“简单场景识别”,和必要的一些参数如:预训练模型、最终的模型仓库以及前边标注好的训练数据,即可以完成车牌模型实验的构建。在训练硬件这一块,我们和云平台做了深度打通,如果训练显卡不足的话,就会去云平台临时开通训练硬件加入这次训练,待训练完成会自动释放。整个训练pipeline,从数据处理、到模型训练、到最优模型寻找、以及生成静态图的tensorflow serving pb 我们都用kubeflow 进行管理。实现pipeline训练图中不依赖的任务可以并行处理,此外也做到异构硬件调度,比如数据预处理和增强用不上GPU的环节我们会调度到CPU上处理,从而节省硬件成本。一般来说待训练数据标注完成,在AI平台产出一个新场景的模型,在平台的操作不会超过5分钟。待模型训练完成后,去选中的模型仓库中就可以将导出的tensorflow serving pb 一键发布到推理环境。如果模型发布成功,内部的devops系统会自动通过工作的IM系统发送通知,这个时候就会可以去评测效果了。待模型上线到推理环境,就可以通过AI平台测试系统进行量化效果测试和badcase分析,具体可以参考。
若测试效果达标,则在平台上可以直接导出部署的镜像,去客户的服务器上启动镜像即可,最终我们以restful api的方式提供,值得一提的是我们选中的这套模型无需GPU,可以直接运行在CPU上。
所以通过AI平台和我们预置的预训练模型,产出此类的场景的模型流程图非常简单。如下图所示:实现类似的非标场景的场景OCR不能绕开的一个问题就是成本,而我们都知道最主要的成本是训练数据和硬件成本,为了减少这个成本,我们在这个场景上内置了超过20种的图像增强策略,以及用6亿数据预训练trOCR。经过上述策略的优化,单个字符在样本中出现500次左右就可以达到较好的效果,比如前边展示的电表读数识别:一张图片6个字符,需要识别的字符只有0~9 10个,那么总共约900张图片,就达到了94%的准确率。平均下来一个字符出现的次数在 6x900➗10=540次 。其他实验比如 1万张车牌可以在复杂的测试集合上达到98%的F1,汽车玻璃VIN码,1.6万数据可以达到95%的F1等。而在训练硬件费用上,前边提到的1万张车牌只需要3个小时既可以完成训练产出模型。以“数据为中心”给“AI平民化”提供一种非常好的落地方式,以前需要设计网络、调参、特征工程等非常专业工作才能获得一个效果较好的模型,现在变成了收集数据、标注数据即可以获取一个效果不错的模型,但是这个转变过程中,一个内置预训练模型,且功能强大的平台是不可缺失的。所以我们会面向业务场景,持续扩充平台的功能、预置更多优异的模型,只需要通过增加训练数据即可产出满足需要的模型。1. https://mp.weixin.qq.com/s/2rR0F0xTiA_p7ocwpr0Clw2. https://github.com/ultralytics/yolov53. https://arxiv.org/abs/2109.102824. https://github.com/opencv/cvat
还没有评论,来说两句吧...