下面首先简单的介绍一下华为云文字识别产品,随后重点讲我们的关键技术、关键能力,产品的优化之路,做产品需要注意到问题以及踩过的坑。其中很多点是整个人工智能或者以数据为驱动的产品都需要注意的。
我们是做产品的,但是我们也会参与一些比赛,或者是写一些论文,来提升我们的技术影响力,比如说2019年ICDAR票据识别比赛,我们协同华中大联合一起参与了这次比赛。在端到端文字识别赛道上,我们以96.43的超高精度取得了世界第一。这个呢,远远超过了2至5名,大概是两个点左右,同时我们也会申请一些专利。因为我们的创新性,我们获得了2019数博会领先科技成果奖的新产品奖。
这是我们华为云文字识别服务的全景图,主要包含五大类,包括通用类,票据类,证件类,行业类,和定制类,通用类包括通用文字,通用表格,网络截图等。票据类呢,是指各种票,只是比如说是增值税发票,火车票,出租车票等。证件类呢,则是各种证件,比如身份证,驾驶证,行驶证,护照等。行业类是面向特定行业的,比如说物流行业的电子面单,纸质面单,比如说生活方面的燃气表,比如说医疗行业的医学检验单等。定制类呢,则是对客户进行特殊定制的,比如说是海外的身份证。
助力企业生产效率提升,降低运营成本
下面是我们的关键技术,我们融合了多种图像处理技术,具有高精度,鲁棒性和自适应性等特点。文字识别精度特别高,支持错行,盖章,文字叠加等复杂场景,支持多种类型单据,自适应不同质量图片。整个流程呢,主要是如下,包括图像预处理,表格提取,有没有表格进一步处理,文字定位,其中可能会有文字矫正,文字识别,文字后处理等,最后返回给客户的是结构化的json数据。
那么我们这些特点是如何做到的呢。首先呢,是从硬件开始,我们会协同华为云的昇腾芯片做了底层的优化。比如说LSTM多算子融合,比如说算子重写。其实呢,做深度学习,最好能够从底层硬件优化开始,当然很多小公司做不到这一点,那就需要在上层优化算法了。还有一点是我们会对图像进行多种预处理,以提高训练速度,比如说是我们会把不同的文字成长度,基于多线程放在多个队列里,然后提高取出数据的速度。也会对累计梯度聚合优化等,一亿的切片数据,10小时完成训练
模型算法需要持续更新,比如说我们2018年发在IEEE上的一篇文章,ITE。我们采用了类似Textbox的思想,把RetinaNet的Anchor重新设计了。然后同时对Kernel等各方面进行了全面优化,最终呢,比直接应用RetinaNet的性能提高了十个点左右。
同我们做产品的时候会遇到各种各样的场景,比如说右边的盖章检测。这是我们广东的一个客户的实际场景,需要识别盖章里的内容。盖章除了我图上的椭圆章,其实还有圆形章,方形章、三角形的章等。我们用了各种弧形文字检测算法,检测性能都达不到客户的需求,后来我们做了基于字符的一些优化之后,大概准确率达到了96%左右,基本上可以满足了客户的需求度,所以说呢。无论是做写论文儿还是做产品,一定要持续的优化算法。很多原始的算法即使性能很好,但在实际场景往往达不到论文里描述的效果。文字识别不优化算法,不如回家卖地瓜。
16
在深度学习时代,数据成为关键,对数据的需求量非常大。但是数据总是有限的,标注数据的成本也巨大,同时需要时间,合成数据基本上成了必选之路。最左边的是syntext,相信很多团队都在用,首先使用分割提取到了几何信息和分割结果,随后计算景深。然后找到平滑区域生成文字。
我们也会使用传统方法,比如说opencv、pillow等用来合成整张图片。我们针对文字自研了一套丰富的增强的算子库,增加了很多开源工程没有的算子。同时呢,我们会也会通过GAN转换一些切片。当然啦,GAN有的时候转换过的内容会比较莫名其妙。这也是深度学习的问题,很多时候因为不可解释,你不知道你得到的会是什么。
作者:blackmoon