主题:定制化OCR技术原理解析与实操演示
本次百度EasyDL打造的【零门槛AI开发实训营】聚焦多个产业级经典项目,场景覆盖自动驾驶、智慧农业、视频流车辆行人检测、垃圾分类等实用案例,从AI开发流程入手,讲解不同环节需要关注的技术重点,配合模型开发实战演示,为企业AI应用开发者提供零门槛上手AI项目开发的实用课程!
课程亮点:
零门槛:EasyDL零门槛AI开发平台,无需算法基础即可上手。
重实战:多个产业级AI项目开发实战,课后作业加强巩固,学习更高效。
讲技术:每个项目精讲一个技术点或应用场景,快速获取核心重点知识。
可落地:每节课配合不同部署方式讲解,贯穿企业模型开发应用全流程。
加加:非常高兴今天给大家带来OCR讲解,这是EasyDL零门槛AI开发实训营,这次带来的是定制化OCR技术原理解析与实操演示,整个EasyDL课程会以一些实战的项目作为案例给大家讲一些技术原理,还有一些部署方式,保证大家在听完课以后,结合我们课后作业能够熟练掌握EasyDL平台使用,可以零门槛上手,让我们项目可以正式的落地使用。
今天进入到第五讲,主要是EasyDL下的自定义平台。本次课程我们会在课讲完以后留一个作业,希望大家学习完以后可以自己收集20张以上的数据,在EasyDL子训练平台上完成虚拟数据标注生成和训练,完成模型的训练,只要完成这个训练之后就可以在右下放的二维码扫码提交你的训练完成的模型ID,后台核验完成以后就会赠送爱奇艺黄金会员月卡,希望大家仔细听讲,关于这几部分的实操到后面也会给大家进行现场演示。
在今天直播过程中也会抛出互动的小问题,大家可以参与抢答,我们也会送出多款百度定制的极客周边,今天的课程正式开始。这一次带来的是定制化OCR技术原理解析与实操演示。非常荣幸今天请到了技术中台事业群组算法大佬夏梦同学,深入讲解EasyDL的OCR原理。夏老师是EasyDL OCR整体算法的负责人,主要讲解一下怎么开发EasyDL OCR平台,以及他们怎么实现EasyDL OCR项目交付的。
首先抛出第一个问题,OCR是什么,相信今天来到直播间各位肯定知道OCR是什么,就是文字识别,是一个传统不能再传统,甚至不被认为是人工智能技术的人工智能技术,因为很早就使用了,只要我们有图片文字需要信息化电子化的场景都会使用它,虽然使用范围很广,好像感知没那么强,但真的是入门级应用,是企业降本增效的必备法宝,大幅度提升效率,降低人工录入成本。我早年也做过一些文字识别的项目,当时还做过一些算法,当时我记得会非常的复杂,好像各个部分都要做,要做预训练,字符的切分定位,再用机器学习提取特征,进行特征匹配,但是好像这两年在百度听到的算法都是在推行端到端这样的技术,旨在做检测模型和识别模型,这块能不能请夏老师给我们讲解一下,这样一个文字识别技术的演进。
夏梦:简单跟大家说一下,应该算是从2014、2015年那会深度学习开始起来的时候,OCR借势也一波大发展,传统的文字识别就像刚刚加加说的,传统的图象处理,包括文字化,字符定位切分,单字识别,那时候单字识别可能大家有过传统机器学习经验的同学都清楚,直观就是提取一些特征,再到通过单词分类,差不多2015、2016年差不多就是三千类六千类的规模,后面到深度学习规模,文字识别可以定位成两个部分,文字行检测和序列识别。行检测不再像传统的文字识别关注于单字的信息,主要是以行为单位输出整个文字行的框。另外,在这个框之后直接放在虚拟识别你进行识别,这块工作很多,比如文字行识别,基于回归、分割等等都有,Yolo,SAST等等很多,2015年CRNN出来以后,目的就是希望同图像序列程度输出文本,再大概念就是(英文)这样的概念。
简单介绍一下文字检测的部分,方法很多,举例来说LOMO,从第一副图到第四幅图输入输出的文字描述,文字检测需要把整个文字行框出来,弯曲的文字有拟合的能力,这块是我们的能力,核心还是基于回归做,另外有一些(英文)和弯曲文本表示,我们可以从框到大框到弯曲文本到拟合的过程,细节大家可以看这个论文。
第二个阶段是序列识别,上一次公开课加加跟大家介绍的时候,我看到大家也有问CRNN这样的工作,其实就是识别和图像。而不是用传统的方式做单字的分类,细节不说了。下面列的工作,第二个就是白强老师CRNN的论文,第一篇是我们团队在2020年CPR识别的工作,核心是在这上面做了语义的矩阵,一个简单的距离就是“门诊”,有时候识别成“问诊”了,通过一些语义的信息知道前后的关联把“问”叫成“门”,有一个语义校正模块。
第二个问题是文字识别有什么不同的技术形态之分吗?其实这个问题我可以直接回答,我们在OCR商业化开放里面,主要解决两大核心任务,第一是全文本识别能力,图片里的文字全部提取出来,达到所见即所得的效果,专业是非结构化识别,不是结构化的信息,直接按行输出。另外是关键信息提取,它和全文本识别的区别在于,它会适配不同的信息,全文本的基础上重在提取字符间的关系,以结构化对应关系进行电子化的输出,等于说全文本识别重这个字怎么识别出来,关键信息提取结构化识别重字符间的关系。所以在同一张图片下,比如说我们举个例子这个火车票,通过全文本识别能力是直接按行输出,同上有什么样的字就输出回来及,没有什么结构化信息,就是把一张原样的电子化,适用于我做一些图书摘要,文本的快速记录这样一些软件都会使用到。但是如果我们把这张图抛到火车票识别结构化识别能力里,就会输出结构化的信息。会告诉你始发站是什么,终点站是什么,车次是什么,票价是什么这样的结构化信息,如果我们的业务里面使用到了某一个字段直接提取就OK了,便于后续进行处理。不管是全文本识别还是全文本信息提取,结构化识别和非结构化识别,这两类识别过程中百度做了非常多的工作,在全文本识别,通用文字识别场景下开放了十余款的办公文本、网络图片、手写表格、印章、试卷等等。结构化识别针对各个行业,比如资质认证,还有财务票据,医疗票据,汽车场景像行驶证驾驶证等能力都是可以直接进行结构化识别的,百度AI开放平台开放了30多款票证识别的能力,整体是开放了50多款标准能力。
今天讲的EasyDL OCR主要解决关键信息提取,属于结构化提取的范畴,我们开放的30余款,猛的听起来好像主要领域都覆盖了,那是不是就够了,为什么我们还要做EasyDL OCR呢,其实可以看一下整体的数字化需求是非常广泛的,而且OCR领域是长尾效应非常显著。这里简单列举一下,我们已经开放出来了30余款能力,解决常见的卡片票证识别能力,解决的只是我们现实电子化世界需求的冰山一角,其实更多的是细分领域的卡证票据,比如道路运输证,每一年换一个板式;社保卡,学生证每个学校不一样,签到表每一个活动都不一样;还有简历每个人都不一样。但是有一个共同特征,就是要提取某几个字段,比如姓名、电话号码等等,而且我需要共性存在的信息。针对这样的场景,如果我们每一个票据都做的话,首先人力成本非常高,我们的维护成本也非常高。我们就想是否能把我们的一些已有商业模型训练经验进行固化下来,把它标准化的呈现出来,让客户都能够直接通过这样一个平台就进行简单的上传图片,进行标注,进行训练呢,就是人真都是算法工程师,达到这样一个效果,所以就有了EasyDL OCR自训练平台。
我们希望通过这样一个平台给大家提供一个零门槛的,无需算法基础就能够进行模型训练的平台,人人可以进行模型训练。这个平台它是Easy DL,听起来很高深,怎么样做的Easy呢,怎么达到零门槛,把我们已有的训练经验完全封装起来,只给大家提供出来我们的可视化界面,只需要在界面上进行框选,就完成数据标注,点击就能完成模型训练,也会把一系列的参数预置进去,点击开始训练就能够在80%的场景下达到很好的效果,这都是我们经验的沉淀。简单的四步,在平台上创建一个模型,准备好数据,真实数据上传上来进行标注,也可以根据我已经标注好的数据生成一个虚拟数据,快速扩充数据集,把这些数据拿来做模型训练,就能训练出来一个效果很好的模型,这个模型我们在平台上一键就能点击部署上新,形成公有云API供大家调用使用。听起来好像这四步很简单,真的能覆盖这么深厚或者说复杂的过程吗,我这里也给大家展示一下背后我们做的工作。
首先数据准备过程需要大家上传一部分真实数据,比如20到50张,我们在平台进行数据标注,直接提供了数据标注的工具,不需要我们再找众包的人力或者其他的人力资源进行标注。在数据标注完成以后也可以根据已标注数据进行虚拟数据生成,快速扩充数据集,因为大家了解的话一般训练一个模型就需要几千上万张图片,但是每一张数据的标注成本都非常高,我们只需要20到50张数据集,怎么拟合那样高数据量的训练效果,我们通过虚拟数据生成的工具,对每一个已标注的数据进行乘十倍百倍扩充,快速扩充几千张,再把真实数据和虚拟数据进行混合,自动进行数据扰动。数据扰动首先提高数据的泛化能力,进一步提升了数据量。扰动以后的数据集达到上万张,基于我们的预训练模型,通过我们沉淀下来的模型训练工具进行训练就可以了。同时已经标注的这些数据还会分出来一部分作为评测集,在模型训练工具产生的一系列模型里面,当然这里不是只产品一个模型,会产生一批模型,就会拉出来溜一溜,他们在这些评测集上会进行跑分,那到最高分的人就会被呈现出来成为最佳模型,让我们大家在平台上可以看到,会自动输出测试报告,可以看到它的各项指标,也可以进行模型的校验,校验满意以后我们就可以一键进行发布成为预测服务,就可以调用了。所以整体来说,在技术上我们也只是分成了这三个部分,数据处理,模型训练和服务部署。
夏梦:在数据处理介绍之前,跟大家简单介绍一下数据标注的情况,其实整个解决方案是什么样的,决定了哪个数据用什么方式标注,这个页面是可视化操作平台上面标注的样式,大家可以看到偏粉色是K,蓝色是Value,最终解决的是问题要把K Value关系和信息抽取出来,具体标注工具使用后面加加会做详细的演示。
第二块是最核心的数据,虚拟数据生成,咱们一直提到启动一个垂类的研发,最开始数据是很难获取的,我们可以通过平台方式快速生成虚拟数据,首先是需要一张或者十万张甚至几十张原始的数据,通过原始数据把需要的区域(比如这个是需要提取的四个部分)涂抹干净,在这个基础上会在上面贴合想要的预先设定的语料,这里有石家庄、无锡一些车次,根据你语料的大小,整个数据量可以快速生成。平台上一两个小时就能生成上万张十几万张数据,解决了训练启动这样一个问题。
但是有一个小的问题,怎么样解决这个虚拟数据生成跟真实场景更加拟合的问题,这里介绍一下虚拟数据技术的生成框架,这个是在2019年的工作,已经是开源了,大家可以直接去(英文)上面看一下源代码,论文在下面,大家可以搜一下。最终希望得到的是输入了一张图,最后在另外一个场景上有不同的风格,以及它的背景进行贴合,大家可以看到(英文)最终输出的是棕色的底纹和白色的文字的趋势,框架是三个大矿石,第一个主要是对文本的骨架和背景进行学习。第二绿色这块主要是对于背景进行擦除,这是获取到了非常干净的背景,最后是把这两个融合得到想要的结果,这块是我们在虚拟数据生成的底层框架。通过这样一个方式,可以拟合更多的真实场景,比如光照的变化,明暗,甚至是一些噪声都可以通过虚拟数据方式拟合它,这是虚拟数据生成的方案。
这边也做了一个简单的展示,在论文上也可以看到,是贴合的结果展示。比如说左上角黄色的图,从SIZE到EVER贴合的效果,直观上还是比较贴合,贴合的没有什么太多的噪声。细节我不说了,大家可以看一下论文和代码。
第三块数据扩充方式就是数据扰动,刚提到通过技术方案可以让数据迅速拟合真实的场景,但是还是不足以覆盖不同的变化,比如说这里提到的仿射变换,射影变换,颜色、角度、高斯等噪声,我们也需要手工加一些工作,这些变换也是从真实场景获取到的,通过不同的变换拟合这种变换,从而达到真实数据可以很泛化拟合真实场景各种变化,这是我们扰动以后的一些变化,包括了各种尺度的变化,角度的变化,以及颜色和噪声的变化,通过数据扰动的方式进一步把数据的量扩充,确实让网络在训练过程中见到更多不同的场景的数据。这个就是数据生成技术的细节。
下面是最关键的部分模型训练,模型是EasyDL OCR核心的部分,只有模型做了决却设计才能做到数据驱动。模型训练包括这三块,首先就是一直提到的,需要端到端的模型训练才能真正做到数据驱动,这里专门基于视觉设计的实体抽取模型,兼容不同的版式,比如火车票,有红票蓝票甚至是补票,版式不太一样,用传统的方法需要一个版式版式做,但是从模型的维度来说可以直接将不同的版式放到一块训练的,这也是让EasyDL OCR快速扩充关键因素。第二就是识别,这边是在百度场内有亿级别的数据训练出来高精度的识别模型,我们在亿级别的数据上做的预训练模型,可以快速在各种卡证票据进行迁移,最终通过自动评测,通过自动的训练轮次评测,输出最终的模型。
这里简单说一下百度结构化KValue抽取方案的进化,大家如果做过垂类结构化信息抽取的,就是火车票这种结构化信息抽取工作的话,能感知到在2018年之前大部分的方式通过通用OCR,结合位置、文本信息甚至是先验的信息,抽取各种各样的Kvalue。我们把这种办法总结成了两类,一个是强模板,一个是弱模板,比如身份证查找,我们需要搜一下姓名(K),通过位置方式找出来(Value)。后来我们发现垂类非常多,上百种上千种,不可能每个垂类都这么做,效率较低,2019年提出了端到端的EATEN方案,通过Attention方案提取想要的字段,直接到关键文本的输出,这个工作也是在2019发表,下面也给了名字,感兴趣可以看一下,流程在这里也有,输入一张图,之后有一个输出的entity字段的部分,这个Decoder部分,取决于有多少字段需要提取,有一个小的Decoder,第一个就是在启动那个地方,第一个Decoder上面是有一个设计,确保快速定位,中间是不同Decoder之间做状态转移,确保在解析过程当中有一个阅读顺序,文本有一个上下左右的顺序,这个就是端到端的提取,这样的方法可以快速吃进去很多数据,细节大家可以在论文上看一看。
这里是EasyDL OCR详细预测的过程,输入了图像,到最终输出真实结果的过程,这里分三大块,一个是预训练,包括图像的校正,核心是视觉抽取模型,最终输出的就是按照前面标注的方式输出,有K,蓝色的框,以及Value对应红色的框,最终输出到识别模型里,最终得出了有识别结果以及类别,通过预先设置的字段,比如说付款人户名账号等等预设字段,最终输出想要的KValue的信息,这块就是模型训练和抽取的过程。
最后是支持多种模式的服务部署,包括云端,模型私有化。大家有一些数据隐私性比较高的场景,这套平台可以整个打包到私有化部署到不同的场景去,这块是技术上的流程。
加加:我们的模型不仅能私有化,而且提供两种私有化:您可以在平台上进行模型训练,训练完成以后把模型单独的私有化;如果场景数据隐私性非常非常高,像金融、政务这样的场景,我们也是可以把整个完整平台进行私有化的。
总结一下刚刚讲到的EasyDL的一些特色优势:我们背后有非常多的算法技术在,把这一系列东西都封装成黑盒放在服务里,达到让每个人上来都能够进行零门槛操作,我们把最好的训练模型和参数预置进平台,可以一站式流程化完成这样一个训练;同时,这样一个训练还能保证产出的模型效果不差,而且是90%以上,因为它是基于OCR最佳的实践预训练模型,我们也有非常多的实训经验。刚才花了很大工夫讲我们数据的处理,因为模型训练是整个平台的核心,但是数据处理是我们在整个流程里最占用人力的地方,我们在这块也想尽一切办法降低我们数据的成本,我们在真实数据标注上提供智能预标注,只需要核对和修改就能完成标注。同时也提供基于真实已标注数据进行虚拟数据生成这样的功能,也可以自动的进行数据扰动,这两块能力都大幅度扩充了数据集成,也提升了数据的抗干扰能力。最后产出的模型支持多种部署方式,在云端一键部署就能生成一个API调用,同时支持产出模型进行容器化的本地部署,完整平台也能做私有化部署,搭建AI中台。
夏梦:咱们直接说一下案例,背景是一个车管所的智能信息审核系统,业务场景是车管所在每天都有大量的车辆注册、转移、变更、抵押、注销等业务,不同的业务都有不同的材料,这些材料在线下不管是通过手机随拍传输到业务员或者线下纸质版材料(纸质的材料业务员办理的时候也需要进行拍摄),这些所有的数据最终需要确保这个业务能不能办,都需要人工进行审核,比如车辆注册是不是能注册;客户提交的一些材料是不是正确的,信息是不是OK的,这些成本其实是非常高的。他们实际上每个业务员办一笔业务审核都要花五分钟甚至十分钟的成本,尤其是当他办的业务很多的时候,材料量也会很大,周期长,这一部分对人力的消耗非常大。车管所的流量也很大,每天差不多业务量可以到八千到一万,可想而知需要多少人的业务需要办理,对用户的体验也会有影响。类似这样的审核场景,大家在自己的业务场景见到过,比如说银行办一些业务,办一些投资,都需要有大量的材料审核,甚至是保险等等行业,都需要材料进行电子化审核。这也是为什么我们做OCR一个很关键的点,这个需求来的时候,他们第一次找到我们的时候差不多有40项需要做的能力,当时我们也是非常蒙,怎么办,按照最开始讲的传统方式做,一个模板一个模板做定制化,基本上这个项目就黄了。
所以刚好在去年下半年有一些积累,想借助于这个EasyDL平台对这个能力做一些验证,数据量也不多,毕竟很多数据是带有隐私信息,我们也是在征求客户同意情况下获取少量的数据,通过虚拟数据生成,也就是前面讲到的所有体验,是我们完全走过的,至少是三十到四十项能力,这个车管所只是其中的一部分,经过这个平台我们快速完成了23项,为什么是23项,有同学能感知到,我们首先深入了解这个业务场景以后,通过流量梳理,确保这23项能解决80%到90%的问题,最后差不多在两三个季度时间达成了交付的标准。交付完成一个非常关键的点就是服务部署,因为我们真实要给客户交付,也是一个商业化系统,关键是提供数据的服务真实可用并且稳定,我们不可能提供出来一个能力服务不支持产出,我们也可以透露给大家,底层非常稳定的服务。产出以后在我们内部,我们平台上的流量可能每天都数十亿上百亿,服务的稳定性是经过了大量数据的打磨,基本可以稳定在四个九这样的,这是我们平台核心的优势,产出以后基本可以输出给客户使用了,这是整个业务的流程。
这是一部分训练平台产出模型的示例,包括车管所。我们列了一部分真实的案例,证明真实训练的过程。
加加:好的,接下来我们互动一下。大家通过弹幕把答案打到弹幕上,等我说开始,我们小助手会随机截一份弹幕,截到的人会获得飞桨鼠标垫,到时候小助手也会在B站和各位进行私信。
EasyDL OCR模型支持哪些部署方式?(多选)
A.云端API一键部署
B.产出模型本地部署
C.完整平台私有化部署
D.离线SDK部署集成
已经完成截屏,稍等会把截屏发到微信群里,我也公布答案,答案是ABC。产出的模型是支持云端一键部署生成API,同时产出模型可以容器化本地部署,如果你的场景是隐私性要求非常高,也可以把完整的平台私有化到本地构建一个AI中台。但是D,离线SDK不支持,这个不久的将来我们会更新上线,已经在迭代计划中了。
接下来给大家带来就是实操演示,到底怎么用,这一部分也需要大家认真的听一下。为了节省大家时间,今天下午刚录了屏,所以我根据我的录屏一边给大家播,一边给大家讲解。
EasyDL首先要进入到AI开放平台页面,点击EasyDL OCR产品,可以看到介绍页面,点击立即使用进入到平台。在平台首先第一步创建模型,我的模型到底干什么,把模型的信息写进来,模型名称,模型的归属,以及模型会用来做什么,大家可以做这样一个引导,这样的信息会用来分析,有利于后续给您提供更精准的服务,也会根据场景的聚类提升准确率,如果监测到模型有什么故障会跟您进行联系。创建完成模型以后,进入到我的模型管理页面,这个页面如果没有数据集,可以进行创建,比如识别银行回单,创建一个银行回单数据集,我们往里面塞各种各样的银行回单。我们可以进去看一下,成未标注和已标注两类,我们导入一下,导入是支持未标注图片和已标注图片两种方式,如果有标注好的 OCR图片可以按照压缩包的文件格式进行编排传入,如果没有标注,可以在平台上进行标注,我们也是提供图片压缩包两种导入方式。首先进行图片导入,选择5张图片,当然每一张图片要求不要超过4兆。演示一下压缩包,上传压缩包,进行打开,等它上传完毕,点开导入就会执行导入过程。我们也可以进入到这个页面里面,上方会显示导入的过程,也可以查看大图浏览已经导入的图片,导入完成以后可以进行数据标注。
直接点击标注来到标注页面,可以点击查看标注流程,在这里我已经预置了几个字段,也可以在添加新的,希望标注之前定义清楚,业务上到底需要识别什么信息,我们就在这里录入什么字段名称,这个写清楚以后按照这个字段一一进行标注,等于这里是明确需求。标注以后点击右侧的标注框,到左侧拉对应的框,每个字段只需要拉K和Value。我们不要把标注框拉的过大,留太大的空隙会影响识别效果,尽量把标注框贴合文字内容,如果有一些内容没有识别到的话,校验一下,给它进行补全。我们会把内容自动识别出来,我们已经内置了OCR识别能力,然后进行简单的校验就OK,如果没有识别完整的,我们就补全,调整一下这个框,但尽量不要留太多的空隙,我们进行校验,识别好,把标注过程中人力参与最多的转写的过程完全化解了,所以让图片的标注很简单,很快就完成了。这里我定义了四个字段,我们分别进行标注,每个进行拉框,这个标注就可以跳转到下一张,这一张和上一张不一样,但是识别的东西是一样,招商银行是一个收费回单,其实没有付款人账号,但有一个扣费账号,这就是付款人账号对吧,我们可以把这个进行框选。我们没有收款人账号,我们就不框了,有就框,没有就不框。金额这里是实收金额,我们就框,然后后面的文字内容也把它框选进来,虽然只能标两个,那就完成了,就到下一张。下一张也是,付款人名称在下面,账号在下面,在哪就标哪,这个不挑,视实际情况而定。也是一次标付款人名称,付款人账号,标K和Value,这一步标记的越竞逐,后面识别的效果越好,自动识别这样的长处很不错的。在这标注了20张图片,可以看到已标注的图片的示例,右侧会显示出结果。
接下来我们依赖已标注的数据进行虚拟数据的生成,直接点这个效果预览,可以看一下有哪些地方不满足,我们再调整文本的字体字号和颜色,选择语料,账号就是一长串数字,公司名,文本的大小也可以适当调整。金额也是可以直接选,可能会问万一没有语料怎么办,后续我们会尽快上线自定义语料的功能,我们可以再切换看一下效果。如果效果还有点差,我们就可以挪挪标注框,有一些位置偏移,刚才看这些字都有点小,我们再调大点字号,再看一下所有数字都稍微调大一点。再来预览,这时候整体相似度高了很多,这个时候我们认为OK,然后就可以输入一个数量,我们推荐是10到100张虚拟数据,我刚做的编辑,在下一张已标注图片里可以直接用,可以快速生成其他图片的已标注数据,如果样式和之前的是一样的,我们不需要重新调整了,这里可以看到生成的虚拟数据,整体真实度还是蛮高的,达到这样的真实度就完全可以拿来训练了,也不需要重新标注了,数据量立刻获得了质的提升。
然后进入到模型训练步骤,选择刚才的模型,勾选识别字段。图像一般情况下不用调,除非一些图片特别小,我们进行调整。训练轮次也是推荐60轮,一般也不用动,发布训练,一般这个训练四个小时左右完成,训练完成以后产出一个训练报告,有每个字段的准确率,配置文档里训练用的训练集和测试集有哪些,这里都可以进行浏览。这个时候可以对模型进行发布的校验,这个校验可以发布一个模型,上传,实际的发布在发布模型里选定对应的版本就可以发布了。
整体的流程就是这样,有哪些步骤影响最终产生模型训练精度的影响因素,我这里汇总一下。第一部分是标注,因为标注非常重要,在模型训练里是基石,我一定要标得准才能训得准。这样一张标注里有一些错的地方,有些我刚才提到,也有没提到。有这三个错误,第一个错误就是标的太大,留了好多的空隙,这个过程中我是希望把标注尽量的贴合文字。第二个,像用途这个K,我们认为这个用途是我需要的,但是这张图没有Value的内容怎么办,我就不标了,不要在空白的区域画框,不标模型训练的时候就知道这张图上面没有,但是记得把K标上,Value不标,我就知道是没有的了。最后一个框,里面是双行文字,我刚看到弹幕也有同学提问说,多行的文字怎么办,或者贴近很容易识别成一行,为什么,因为标注的时候标陈了一行,直接拉一个皇我们就认为是一行,所以需要分行标注。这里说明一下,分行标注的功能目前正在开发中,马上就能上线,这个希望大家目前训练或者做作业的时候,尽量用单行的字段进行训练,多行马上就能支持。所以我给出正确的范例,就是红色区域标注的,这个是我们希望以这样的方式进行标注达到的模型训练效果最佳,用途那就不用标了。这里还有一个特征,中国工商银行这样一个标题是没有K的,刚弹幕里也有提到,没有K怎么办,前面一直在演示的示例火车票通篇都没有K,没有告诉你这是个始发站终点站,这样的过程直接标上K为空,不用标K,只标Value就了,不管是K还是Value,有就标,没有就不标,分清这个概念标对应的内容就
行了,其他的部分整体汇总在这里。
数据标注再罗嗦一下,标注的时候一定贴近文字,不要留过多的空隙,不要标空框,有就标及没有就不标,多行就多标。数据生成我们需要调整字体、字好、大小,选择合适的语料库,保证样式一致。训练集的选择,我们推荐50张真实数据,50+100张虚拟数据,我们希望这50张数据每一张都可以生成100张数据。如果我们的模型是要覆盖不同的版式,比如火车票,有红票蓝票,希望这个训练集里既包含红票又包含蓝票,有让它见到,这样的模型泛化能够才OK,如果标的都是蓝票,识别红票就不认识,我们的识别模型当成一个小孩,你需要耐心的教它一下。最后已不再模型训练里面,我们的图像压缩阈值和迭代轮次一般不需要调整,如果有特殊情况,比如训练集图片和将来识别的图片都很小,就一百多像素乘一百多像素,那512要拉伸到这个过程再做训练拉的有点大了,那就选择一个最接近的。迭代的轮次推荐40到60轮,不需要担心过拟合,不同的阶段都会产出模型,我们会择优。如果训练轮次太长,整体流程太长,想快速验证,你想验证整体流程可以把迭代轮次放到10轮,但是这时候不是为了测效果,不要说就10轮,测出来效果特别差怎么办,很简单,就把迭代轮次加上去就行了。
整体今天的课程讲解就到这,再重新提一下要留给大家的作业。因为OCR数据确实隐私度比较高,会涉及到一些个人信息,在这里无法给大家提供训练集图片,所以需要大家结合自己的真实业务场景收集20张图片,在平台上进行数据标准,虚拟数据生成和模型训练过程,完成一个模型训练就OK,一定是完成训练,不需要发布,只要完成训练,看到测试报告完整评估结果就OK。把模型的ID在问卷里第五课作业提交,扫描这个二维码进去就可以填写模型ID,如果后续有不清楚的,也可以扫右侧小助手微信,进群,在群里问我们,我们再把这个问卷发出来,大家填。一旦提交成功,在后台验证合格,就会送出爱奇艺黄金会员月卡。
接下来进入QA环节,刚刚大家提了特别多的问题,我和夏老师一一进行解答。
Q:可以对视频进行识别吗?
A:视频目前载体主要还是图片,视频就是多帧图片,直接传视频目前是不支持的,这个需要我们把它进行抽帧,还是以图片的形式提交给我们才能进行识别。
Q:文字行间距特别小时,多行容易检测成多行?
A:如果是多行的要多行标注,这个同学一会可以联系一下我们,我们在多行标注能力上线之后第一时间通知你,你可以直接进行试用,我相信多行标注以后效果一定会大幅度提升。
Q:文字不均衡问题怎么处理?有的字出现频次高,有的低
A:这个可能是识别问题,现在到这个维度,要解决这个问题最暴力的办法就是加数据,词频这个问题很细,需要真实落地过程中需要详细的分析,比如说一个词典一万类,包括生僻字到两万类了,首先数据量要上来,然后分析一下训练数据里每个文字占什么比例,通过不管是虚拟数据还是收集数据,确保这个词在一定的频率上出现,这是从数据上来说。因为识别现在这个问题从2015年开始提出(英文)算法,在算法上并没有特别大的改进和突破,所以我们解决这块的问题核心点还是怎么样在数据上做更多的文章。如果大家对更先进的,更新的方案想尝试,肯定有一些设计。其实我在过程中也讲到了,实际上通过语义校验对这个问题也是有一定的缓解,提醒一下大家,可以找一下OCR做开源,大家可以尝试一下。
Q:EasyDL OCR平均精度达到多少?
A:刚总结优势的时候说到了,还有项目的经验,我们希望在我们能够解决的结构化场景里面,字段是统一的,结构化识别场景下能够达到平均字段准确率是90%以上,如果你说训练出来不够,我们包教包会,目前因为平台刚上线,用户量还能拿住,我们审理是充足的,包教包会,我们在群里随时提出疑问,我们配合你进行模型训练。
Q:英文支持吗?
A:这是OK的,目前支持中英文印刷体,外语识别目前还是不支持的。如果外语识别是非结构化的话,是可以通过通用文字识别或者通用高精度文字识别,这几款能力是分别支持十到二十款小语种,不知道能否满足你的需求。
Q:不同的版式的数据可以一起训练吗?
A:刚我正好讲到,红色火车票和蓝色火车票是可以放在一起的,版式可以不同,识别结构化的字段是统一的,就可以放在一起训练,不要说银行卡和身份证放在一起,它们共用的字段不一样,这样就不建议放在一起了。
Q:不会代码能用吗?
A:平台设计的初衷就是为了让大家不去关注实现的细节,通过可视化的操作实现这个模型的训练和发布,所以这个是OK的,不用会代码,只需要是什么任务,通过配置流程化完成这个就可以了。
Q:标注过程中文字是倾斜的,边框标注体验不好怎么办?
A:我好像刚看到一条弹幕,说农药屏上弯曲的文字识别怎么,如果倾斜度不大我们直接框一个矩形框框上就OK,如果弯曲度特别大,我们后续会上线多点标注,就是描点,尽可能贴近文字,不管是倾斜还是弯曲都能覆盖。
Q:多行表格数据能抽取吗?
A:多行表格在当前状态下不OK,其实刚在弹幕里提到一对多的情况,你可以理解为多行表格的问题,加上刚介绍的情况,后续会发布多行标注的版本以后,多行表格的数据是可以抽取的,确实是有一些限制,比如表格行数可能超过了十行以上,其实效果会稍微差一些,这个超过了以后还是更偏向于需要用专门表格的方式解析,当前这个是不针对专门表格的解析方式做训练的。
因为OCR场景非常复杂,各种各样的文档或文字内容都会存在,所以目前规划里的功能也非常多,希望大家持续关注,我们会不断迭代,尽量覆盖更多的场景,但是像现有的专用能力希望大家用起来,我知道大家对手能力都行强,能省点事就省点事,我们有同步表格识别能力和异步表格识别能力,可以直接在官网进行测试,选择合适的进行使用就OK。
Q:后期会不会支持涂抹功能或者方案?
A:这个目前在虚拟数据生成这个过程中自动绘进行涂抹,这个涂抹中间的过程就不呈现给大家展示或者再进行调整了,所以我们是直接隐藏在虚拟数据生成的过程中,不需要大家做过多的尝试。如果真的需要数据涂抹的话,我们现在还是PS比较靠谱一些。
Q:单机私有化部署的收费区间?
A:这个我不太了解是指整个平台还是单个模型,如果单个模型,这里大概说一下,10到20万的区间,如果整个平台的话费用会比较高,而且需要大家准备训练的资源和与此服务的资源,这块我们得结合项目,商务再针对您项目的需求量级进行报价。
Q:如果保持文档的原本样式该怎么训练,图片像文档提取出来?
A:是不是说版式分析这个问题,如果是版式分析的话,现在还不支持版式还原。
如果是文档版式还原,或者要识别办公文档可以直接用,它是全文识别,就是所见即所得的识别方式,直接使用办公文档识别这个能力就OK或者通用高精度。
Q:我们训练代码能开源吗?
A:有一部分功能已经做了开源,但是在一些偏核心的代码,应该短时间不会考虑开源,但是也不妨剧透一下,因为技术方案迭代速度非常快,可能到未来会把现在这些模型逐步的开源,这个留一个彩蛋吧,未来会有给大家同步,大家也可以持续关注PaddlePaddle,人工智能人员框架,我们 OCR也结合PaddlePaddle为我们开源社区做更大的贡献。
Q:95%左右的准确率在落地时是否足够?
A:这个要结合实际识别的东西具体看一下,像夏老师之前交付的车管所项目有一些垂类也做到95%以上,我们针对数据和实际需求看一下,部分的还是可以达到的。
Q:生成数据能否下载?
A:不能,这里解释一下为什么,因为生成虚拟数据这个功能说实话也是我们业内首家开放的,我们在这块的法律风险还是在探索阶段,这样的虚拟数据生成造成一些虚假数据的流通,在这块上我们长期会做比较强的管理,所以不会把生成数据开放下载的。
这里我们也说明一下,我们生成的虚拟数据主要是为了训练模型服务的,希望大家在平台上提供一体化的体验,生成数据,训练模型就OK。
Q:数据标注中字段添加之后能改吗?
A:字段添加之后能改的,还可以再编辑甚至删除的,但是所有的编辑都会影响整个数据集,所以这个操作要慎重,因为它会影响最终的输出结果,就是这个字段名称是影响最终输出结果的,一个字段名称一旦改了,其他已经标注的类似的字段名称也会相应进行修改。
Q:标注框选时识别用的什么算法?是CTC吗?
A:这两个确实是识别里非常主流的方式,而我们现在识别用的就是对外商业化的通用高精度 OCR,这个可以在IPE的开放平台上有对应的接口。技术上来说,我们并没有单纯的用哪套,而是在内部维护的有更先进的一套比SRN好一点的(英文),我一直提到会加一个语义的条件方式进行识别,如果对语义校验的话希望大家关注一下这个 OCR的工作。
如果大家觉得我们标注的效果很好,欢迎使用通用文字识别,那个是完全商用的能力。
Q:图片数据存在局部模糊怎么办?
A:这个看具体的场景,模糊这个问题我不是太理解,你们希望解决什么问题,还是存在模糊还是要去识别。我理解这个模糊在一定程度的情况下是不影响识别的,因为我们在做识别的模型训练过程当中也会考虑模糊的情况,这个还是字段级的,也要看真实业务场景。如果想问的问题是对于模糊做恢复,这个现在不会做这块工作,我们还是希望整体在数据驱动的维度上,我们希望最终是做成数据驱动的流水线。
目前人工智能的技术还在持续发展,还是需要保证人眼能看清,人工智能技术把我们人力可及的范围内做的足够好,我们再触达肉眼看不清的模糊的边界。
Q:跟IOCR区别在哪里?
A:跟I OCR没区别,应该有很多用过I OCR的用户,I OCR和Easy DL OCR在一定程度上想解决的问题有一些耦合,想解决结构化识别的问题,IO+是基于识别模型进行基于位置信息的规则配置,把相应的位置信息文字内容进行提取,实现结构化。Easy DL OCR相对来说更自由,是真的在训练更底层,因为真的是在训练一个 OCR的识别模型,这个模型可以拿走进行部署,这个模型可以单独调用,不基于其他的模型,就是产出一个单独的预测模型,我再通过数据反哺过程中也能不断的进行迭代,这是Easy DL OCR和I OCR的区别。从使用和产品规划上来说,我们希望I OCR覆盖规定版式的卡证识别,如果数据沉淀不多,我们可能更重在验证 OCR能力能不能在项目里用起来,我们可以上传一张图片在I OCR上进行模板配置,很快可以完成结构化识别模板的制作了,就能够用起来。如果我们沉淀下来一些数据,版式又比较多,在I OCR上觉得每个版式都要配有点麻烦,可能对于精度的可迭代的需求更高了,这个时候我们可以转Easy DL OCR进行数据的标注和模型训练。后续我们在产品上也会把这两个产品进行数据层面的打通,比如您在I OCR上已经使用过的数据,如果您允许的话,可以直接把它进行迁移,迁移到Easy DL OCR上,通过I OCR已经训练的模型对它进行识别,这里就不需要再进行标注了,快速训练新的模型。
Q:火车票如果没有标始发站的话,如何标注K和Value?
A:我们的字段名称和K Value之间的关系,K和Value都是指图片上的结构化信息,K什么Value是什么,如果没有就不标了,但是实际数据返回的时候,会以字段名称,就是您起的字段名称归类,也把我们的K进行归因,像银行里K,收款人账号这个字段,我起的名字叫收款人账号,有一些叫账号,有一些叫付款账号等等K信息进行归因,它都会以字段名称进行输出,回到刚这个问题,火车票里面如果没有标K只标Value的时候,你在起字段名称时候已经起了始发站,在这个始发站下面标K和Value,但是我知道始发站对应的是这个Value,我训练的时候会把这个区域的内容以始发站的字段名称返回回来。
Q:训练召回全部是零,能不能帮我看看图片
A:当然可以,一会群里沟通一下,我们也可以拉群,应该是已经在我们平台上做了训练,我们可以拉群专门对接一下。
Q:多少并发私有化?
A:私有化的并发就看业务量级,不同的并发限制会有不同的价格,看我们需要多少量级的并发,我们商务会给相应的报价。
Q:支持手写识别吗?
A:包括其他不同场景的识别,包括小语种的识别,我们现在是有成熟的能力支持,但是这块就不需要训,后面在真实场景下可以把手写识别以及各种语种识别嵌入到平台上,看一下产品规划,大家可以先看产品平台有现成的能力是不是支持手写和各种语种的识别。
Q:信息抽取的评估方法
A:这个也算是行业里比较通用的方法,字段级别的精度和召回和(英文),相当于整个字段都对。
训练完成以后可以看完整的评估报告,里面都会输出评估的指标。
Q:PS图片后可以运营出来吗?
A:目前是没有这样的检测能力,主要是解决文字识别的能力,但是像身份证这个业务场景,对这种风险需求比较强烈,这个场景我们是能够支持PS检测的,但是是原图,如果PS以后又截图这个是不支持的。
Q:不同版式图片录入时可以自动分类吗?
A:目前Easy DL OCR开放出来的能力还是不支持自动分类的,后续可能会打通Easy DL横向产品的协同,因为我们现在也有图像分类模型训练,我们可能会通过图像分类模型提供版式自动分类的功能。
刚前面介绍过版式这个问题也是不同的垂类还是同一个垂类,我们以火车票为例,也何以说一个极端的例子,平常看到的像医疗发票,版式很多,现在平台是支持放在一起训练,前提是你确保所要提取的字段是一样的,这时候我就可能不太关注只要提取的字段是属于垂类,版式的数量,当前我们自己验证过,撇太这块也算是有一个限制的能力,我可以支持你版式的数量到30、50等等,可以放到一块训。但是版式分类这个,这块是区别于 OCR的一点,我们不会关注到底应该是哪个版式的,而是整个都放进去了,相当于我把30、50版式垂类的版式当成一类了。
Q:训练出来的模型自己部署有并发线是吗?
A:是的,因为我们也按并发进行业务售卖,我们会给出不同的报价。
目前包括检测和识别的模块,目前这两个模型加起来应该是在100到200兆之间。
Q:可以自己定制开发模型文件的接口吗?
A:这个没太理解,因为我们发布如果是公有云服务的API,这个API怎么用,嵌入到什么软件里都OK肯定要自己开发,如果是私有化到本地也是以API方式进行使用的,这个API您怎么用都行。
训练也依赖位置,不管是什么方式还是需要考虑图片上的位置信息,但是我们这块能做到核心的,刚也有隐藏的提示,基于视觉的提取,肯定是位置的,这个过程中我们加了语义的信息进去,你可以认为现在(英文)是偏向于多模态的方式。
Q:文字检测方法在PaddlePaddle有开源吗?
A:我们自己使用的是没有开源的,PaddlePaddle加开源是(英文)的方法,我们是有更新的检测的方法在做。当然未来应该也会逐步开源一些工作,比如我们(英文)也会逐步开源,相当于从2018到2020年我们都有检测的论文。
Q:数据位置不同要针对位置进行训练吗?
A:不需要每一个位置,比如说有一些便宜,不需要每一个都进行训练,我们尽量让训练集里覆盖各种样式情况,但是我们训出来的模型是完整的检测模型,它是有对特大偏移检测能力。
问题很快,我先预告一下明天晚上继续实战营系列课程,明天晚上是结构化数据建模和交流流量预测的实战,如果对这块感兴趣的同学明天同一时间参与我们的直播。同时也有另一个预告,如果在场各位有福建地区的开发者,也欢迎下周二下午会在厦门软件园一期进行线下的百度大脑开放日活动,到时我也会到现场,再深度讲解Easy DL OCR,欢迎我们在现场进行交流。
常温啊啊啊