最近,机器之心报道过的 PaddleOCR 项目迎来更新,发布了最新的 PP-OCR,又一次在 OCR 方向引起了大家的关注。
从效果上看,PP-OCRv2 主要有三个方面提升:
为了让读者了解更多技术细节,飞桨 PaddleOCR 原创团队针对 PP-OCRv2 进行了更加深度的独家解读,希望可以对大家的工作学习有所帮助。
PP-OCRv2 五大关键技术改进点深入解读
全新升级的 PP-OCRv2 版本,整体框架图保持了与 PP-OCR 相同的 Pipeline,如下图所示:
在优化策略方面,主要从五个角度进行了深入优化(如上图红框所示),主要包括:
检测部分优化两项:
识别部分优化三项:
下面展开详细介绍。
检测模型优化:采用 CML 知识蒸馏策略
如下图所示,标准的蒸馏方法是通过一个大模型作为 Teacher 模型来指导 Student 模型提升效果,而后来又发展出 DML 互学习蒸馏方法,即通过两个模型结构相同的模型互相学习。这两种算法都是两个模型之间,而最新在 PP-OCRv2 中使用的是三个模型之间的 CML 协同互蒸馏方法,既包含两个相同结构的 Student 模型之间互学习,同时还引入了较大模型结构的 Teacher 模型。
这样,CML 的核心思想结合了①传统的 Teacher 指导 Student 的标准蒸馏与 ②Students 网络之间的 DML 互学习,这种思想其实也是和实际学校里面鼓励大家互相讨论同时教师指导的模式比较相似,可以让 Students 学的效果更好。
具体的网络结构和精心设计关键的三个 Loss 损失函数如下图所示:
① DML Loss:对于一张输入训练图片,分别送到两个 Student 网络,这里采用的是 DBNet 检测模型,输出对应的概率图(response maps),然后对比两个网络之间的 DML loss,这里采用的是散度的方法,对应的公式如下所示,其中 S1 和 S2 对应两个 Student 网络,KL 是散度计算公式:
② GT Loss:标准的 DBNet 训练任务如下图所示:
其输出主要包含以上三种 feature map,具体如下表所示:
GT Loss 可以表示为:
③ Distill Loss:第三部分是来自 teacher 的监督信号,其只对特征 Probability map Binary map 做蒸馏。另外,从实际经验看,对 Teacher 的输出做膨胀操作 (f_dila()), 可以增强 Teacher 的表达能力,提升 Teacher 精度约 2%,从而提升蒸馏效果,对应的函数可以表示为:
其中 是默认超参设置为 5,分别是交叉熵 loss 和 Dice Loss,是膨胀函数。
④ 最终,所有的 Loss 函数加起来,就是最终的 Loss 函数,如下所示:
这里,关于三个 Loss 函数的权重分配,也可以再调整或者学习一些超参,有兴趣的开发者可以继续尝试。
检测模型优化:CopyPaste 数据增广策略
在实际的检测模型训练过程中,经常会遇到两个问题:①样本丰富度不足,主要体现在标注大量数据成本很高,而且对于采集过程和采集的丰富多样性也有要求; ②模型对环境鲁棒性较差,相同的文字分布,在不同背景下的检测结果却相差较多。
这样很容易想到采用数据增广作为提升模型泛化能力重要的手段,CopyPaste 是一种新颖的数据增强技巧,已经在目标检测和实例分割任务中验证了有效性。利用 CopyPaste,可以合成文本实例来平衡训练图像中的正负样本之间的比例。
相比而言,传统图像旋转、随机翻转和随机裁剪是无法做到的。CopyPaste 主要步骤包括:
这样就比较好地提升了样本丰富度,同时也增加了模型对环境的鲁棒性。如下图所示,通过在第二张图中裁剪出来的文本,随机旋转缩放之后粘贴到第一张图像中,进一步丰富了文本在不同背景下的多样性。
经过以上两个检测方向的优化策略,PP-OCRv2 检测部分的实验效果如下表所示:
可以看到,由于蒸馏和数据增强不影响模型的结构,所以整体的模型大小和预测速度没有变化,但是精度指标上,以 Hmean 计算,增加了 3.6%,还是比较明显的。
识别模型优化:自研 LCNet 轻量级骨干网络
这里,PP-OCRv2 的研发团队提出了一种基于 MobileNetV1 改进的新的骨干网络 LCNet,主要的改动包括:
在 ImageNet-1k 数据集上验证,可以看到,LCNet 不仅在精度上遥遥领先其它的轻量级骨干网络,同时在 CPU 上的预测速度也取得了明显的优势。
识别模型优化:UDML 知识蒸馏策略
在标准的 DML 知识蒸馏的基础上,新增引入了对 Feature Map 的监督机制,新增 Feature Loss,然后结合 CRNN 基础的 CTC Loss 和蒸馏引入的 DML Loss,最终分别计算再求和之后,所有的 Loss 函数可以表示为:
另外,在训练过程中通过增加迭代次数,在 Head 部分添加 FC 网络等 trick,平衡模型特征编码与解码的能力,进一步提升了模型效果。
识别模型优化:Enhanced CTC loss 改进
考虑到中文 OCR 任务经常遇到的识别难点是相似字符数太多,容易误识。因此借鉴 Metric Learning 的想法,引入 Center Loss,进一步增大类间距离,核心思路如下图公式所示:
同时,Enhance-CTC 的初始化过程对结果也有较大影响,主要包括:
这样,经过以上三个检测方向的优化策略,PP-OCRv2 检测部分的实验效果如下:
可以看到,经过一系列优化,虽然识别模型的大小有所增加,但是整体的精度和速度都取得了明显的提升。
并且,经过以上五个方向的优化,最终 PP-OCRv2 仅以少量模型大小增加的代价,全面超越 PP-OCR,取得了良好的效果,如下图所示:
飞桨产业级模型库中的 PP 系列模型
除了 PP-OCRv2,为了更好地满足企业用户实际的产业需求,飞桨陆续发布了 PP 系列模型,可以满足用户在物品识别、目标检测、人像分割、文本识别、图像超分、自然语言处理等一系列任务。由于篇幅所限,概要介绍如下,有需求的用户可以到 Github 了解更多:
(1)PP-ShiTu(即将发布):超轻量通用图像识别系统,高效解决商品识别、车辆识别等场景中的识别问题,并可快速迁移到其他图像识别任务中。
(2)PP-YOLOv2:目标检测任务上 AP 和速度等综合性能超过 YOLOv5,其中一版本可达 50.3%AP 和 50.3FPS。
(3)PP-HumanSeg:轻量级人像分割,手机端的精度和速度表现都很出色。
(4)PP-Structure:支持文档版面分析、结构化和表格识别,是目前业界最丰富的文档分析解决方案。
(5)PP-VSR:视频超分 SOTA 模型,REDS、Vid4 数据集精度达到最优,效果惊艳。
快速打造明星模型背后的强力支撑:
面向产业用户需求的设计理念和飞桨动静统一的开发体验
源于多年的产业实践,飞桨深刻洞察企业对于产业模型的需求,核心就是以下两个要点:
这两个需求对应到深度框架的编程模式来看的话,分别就是动态图编程(调试方便)和静态图部署(性能好)。这里介绍一下:动态图和静态图是深度学习框架常用的两种模式。
在动态图模式下,代码编写运行方式符合 Python 程序员的习惯,易于调试,但在性能方面, Python 执行开销较大,与 C++ 有一定差距。相比动态图,静态图在部署方面更具有性能的优势。静态图程序在编译执行时,预先搭建好的神经网络可以脱离 Python 依赖,在 C++ 端被重新解析执行,而且拥有整体网络结构也能进行一些网络结构的优化。
飞桨核心框架设计过程中,也是敏锐地抓住用户真实的需求,提供了动静统一的能力,支持用户使用动态图编写组网代码。预测部署时,通过动静转换接口,会对用户代码进行分析,自动转换为静态图网络结构,兼顾了动态图易用性和静态图部署性能两方面的优势。
总结
在过去两年里,飞桨开发者社区和模型生态都取得了很大的进步。飞桨也与产业深入融合,在赋能产业的过程中持续迭代升级,降低 AI 应用门槛,推动产业智能化升级。
按照官方口径,飞桨已汇聚了 370 多万开发者,累计服务 14 万企事业单位,开发了 42.5 万个 AI 模型,覆盖工业、农业、医疗、城市管理、交通、金融等众多领域。据最新调研报告显示,在 IDC 2021 年上半年深度学习框架平台市场份额调研中,百度位列中国深度学习平台市场综合份额第一。
而且,在 9 月 16 日刚刚结束的 2021 全球人工智能产品应用博览会上,百度集团副总裁、深度学习技术及应用国家工程实验室副主任吴甜荣获了年度十大风云人物,也是唯一一位女性获奖者。百度飞桨产业级深度学习开源开放平台荣获智博会产品金奖。
原文:https://mp.weixin.qq.com/s/48DrY8_BBTFJVbWNopHDig
既然来了,说些什么?