阿里妹导读:随着深度学习,尤为是CNN和RNN等技术的飞速发展,文字识别技术(OCR)近几年获得了迅速的提高。与此同时,在智能化终端的大趋势下,本地化智能识别凭借更高效快捷的体验以及高度的隐私保护和零流量消耗等优点备受瞩目和亲睐,愈来愈多的应用算法开始倾向终端化完成,OCR也不例外。接下来,蚂蚁金服的算法专家亦弦为咱们剖析这个轻量而精准的移动端OCR引擎——xNN-OCR。算法
移动端OCR的优点安全
受算法效率和算法模型大小的限制和约束,目前大部分的OCR端上应用都是上传图片到服务端识别再将识别结果回传到客户端。虽然知足了部分业务需求,但一方面,对一些实效性要求较高的业务场景来讲用户体验无疑是一个巨大的损失,尤为是弱网环境下。另外一方面,在面临大促业务并发请求量过大的状况下,服务端不得不采用降级方案,而若是端上也具有识别能力的话,即可以极大地减小服务端的压力。此外,涉及到身份证、银行卡等重要私人证件采用OCR进行信息提取的时候,端上“识完即焚”这种方式,对这种敏感数据和隐私保护来讲是自然的堡垒。所以,具有终端OCR识别能力有着极其重要的业务价值和意义。网络
移动端OCR的难点并发
OCR采用深度学习技术使得识别精度在特定的场景下面有了必定的保障,但模型大小和速度问题在端上依然是一大难题。目前大部分的后台OCR模型一般几十M或者上百M,可能比整个App安装包都要大,是不可能直接放到移动端的,而若是走实时下载的办法,模型过大也会形成下载失败率高、等待时间长、App占用空间大、流量消耗大等问题。另外,如今不少OCR算法在云端GPU上运行尚且须要几十到上百毫秒,要在手机CPU上保持较高的运行效率是一个极大的挑战。框架
咱们作了什么?——xNN-OCR性能
xNN-OCR是专门针对移动端本地识别研发的的高精度、高效率、轻体量文字识别引擎,目前支持场景数字、场景英文、场景汉字以及特殊符号的识别。xNN-OCR针对移动端开发和优化了一套基于深度学习的文字检测和文字行识别算法框架,结合xNN的网络压缩和加速能力,检测和识别模型能够压缩到数百K级别,在中端及以上手机CPU上达到实时(最高15FPS),可结合“扫一扫”的模式在视频流中作到所见即所得。学习
移动端OCR技术主要分为二个方面,一是OCR算法框架的研究和优化,主要目标是探索高精度且轻量级的检测和识别框架,确保在压缩以前模型的大小和速度在一个适当的范围之内,二是利用xNN对模型进行剪枝和量化压缩到实际应用须要的大小。下图是咱们以银行卡检测和识别模型为例子展现整个压缩流程精度和模型的变化,其余OCR场景识别均是相似流程。测试
目前大部分的移动端OCR技术都是以传统算法为主,在复杂天然场景下识别率相对较低,而基于深度学习的方案能够很好的解决这一类问题,识别率和稳定性远超传统算法。目前主流的深度学习OCR主要分为文字行检测和行识别两大块,下面咱们分别介绍下:字体
文字行检测优化
在检测方面,咱们将物体检测的Region-CNN框架与FCN的图像分割框架融合在一块儿,保留了FCN的简单框架以适应端上对模型尺寸和预测时间的要求,同时又在模型中加入了目标检测的位置回归模块,实现了对任意形状文本的检测能力。在基于FCN的总体框架中,为了在精简模型的同时不下降检测效果,咱们采用了各类模型精简结构(例如Separable Convolution、Group Convolution + Channel Shuffle等,以下图),模型的尺寸虽然不断减少,精度并未随之降低,在知足端上对模型的苛刻限制的同时取得了较好的检测效果。
文字行识别
在识别方面,咱们在CRNN(CNN+LSTM+CTC)框架基础上进行了优化改进,在Densenet的基础上结合Multiscale Feature、Channel-wise Attention等技术设计出了一套专门用于移动端文字行识别的轻量级CNN网络,同时对LSTM内部参数采用Project技术、全链接层采用SVD、BTD等降维技术进一步减小参数数量(以下图),在ICDAR2013数据集(NOFINETUNE)上,模型大小降低约50%的前提下识别率高出CRNN近4个点,这一改进优化点为上端打下了强有力的基础。
xNN模型压缩
目前咱们的OCR算法模型都是基于tensorflow开发的,xNN已经增长了对TFLite模型的支持,而且在性能上已经远超TFLite。xNN对于咱们OCR算法的模型压缩比在10-20倍之间,不一样的场景稍微有些区别,与此同时,压缩后模型的精度基本保持不变。因为OCR是一个较复杂的识别任务,算法模型一般都很是大,而且目前大部分的后台OCR算法都是在GPU上运行,要想在端上运行,除了须要在算法层次上作不少优化外,更须要xNN强大的模型压缩和加速能力。
OCR技术是信息提取和场景理解极其重要的技术手段之一,应用领域很是普遍。目前移动端本地OCR应用从技术角度能够分为2大类,一类是印刷体文字识别,主要是针对字体变化不大、背景单一的场景,例如身份证识别、名片识别、车牌识别等等,另外一类是场景类文字识别,主要是针对字体变化大且背景复杂的场景,例如银行卡识别、燃气表/水表识别、门头名识别、场景英文识别(AR翻译)等等,这两类场景中后者识别难度较大,面临的挑战性更多。咱们将xNN-OCR用于这些场景并根据场景的特色作了各类优化,取得了一系列的成果,特别是在复杂环境下面识别依然能够保持高效和精准,具体的数据以下表。下面简介了几个比较重要和常见的应用场景。
xNN-OCR目前在端上已经能较好的识别场景数字、英文以及部分汉字,不管是模型大小、速度、准确度均已达到工业应用的水平,而且全面超过基于传统算法识别的OCR端上应用,在多个实际应用项目中对比得以验证。另外,咱们在端上全量7000多类汉字识别上也作出了一些成果,在不久的未来会分享出来,欢迎有兴趣的同窗来一块儿研究和探讨。
咱们坚信,随着深度学习的移动端化逐步加强和移动硬件设备的逐步升级,终端智能化的应用与业务将会愈来愈多,将来xNN-OCR必将会给OCR相关的业务带来更深远的影响和更高的价值。
本文来自云栖社区合做伙伴“ 阿里技术”,如需转载请联系原做者。