PP-OCRv3_introduction.md 8.5 KB
Newer Older
L
LDOUBLEV 已提交
1 2
[English](../doc_en/PP-OCRv3_introduction_en.md) | 简体中文

M
MissPenguin 已提交
3
# PP-OCRv3
L
LDOUBLEV 已提交
4 5

- [1. 简介](#1)
M
MissPenguin 已提交
6 7 8
- [2. 检测优化](#2)
- [3. 识别优化](#3)
- [4. 端到端评估](#4)
L
LDOUBLEV 已提交
9 10 11 12 13 14



<a name="1"></a>
## 1. 简介

M
MissPenguin 已提交
15
PP-OCRv3在PP-OCRv2的基础上进一步升级。检测模型仍然基于DB算法,优化策略采用了带残差注意力机制的FPN结构RSEFPN、增大感受野的PAN结构LKPAN、基于DML训练的更优的教师模型;识别模型将base模型从CRNN替换成了IJCAI 2022论文[SVTR](),并采用SVTR轻量化、带指导训练CTC、数据增广策略RecConAug、自监督训练的更好的预训练模型、无标签数据的使用进行模型加速和效果提升。更多细节请参考PP-OCRv3[技术报告](./PP-OCRv3_introduction.md)。
L
LDOUBLEV 已提交
16

M
MissPenguin 已提交
17
PP-OCRv3系统pipeline如下:
L
LDOUBLEV 已提交
18 19

<div align="center">
M
MissPenguin 已提交
20
    <img src="../ppocrv3_framework.png" width="800">
L
LDOUBLEV 已提交
21 22
</div>

M
MissPenguin 已提交
23 24
<a name="2"></a>
## 2. 检测优化
L
LDOUBLEV 已提交
25

L
fix  
LDOUBLEV 已提交
26
PP-OCRv3采用PP-OCRv2的[CML](https://arxiv.org/pdf/2109.03144.pdf)蒸馏策略,在蒸馏的student模型、teacher模型精度提升,CML蒸馏策略上分别做了优化。
L
LDOUBLEV 已提交
27

L
fix  
LDOUBLEV 已提交
28
- 在蒸馏student模型精度提升方面,提出了基于残差结构的通道注意力模块RSEFPN(Residual Squeeze-and-Excitation FPN),用于提升student模型精度和召回。
L
LDOUBLEV 已提交
29

L
fix  
LDOUBLEV 已提交
30
RSEFPN的网络结构如下图所示,RSEFPN在PP-OCRv2的FPN基础上,将FPN中的卷积层更换为了通道注意力结构的RSEConv层。
L
LDOUBLEV 已提交
31

L
LDOUBLEV 已提交
32 33 34 35
<div align="center">
    <img src=".././ppocr_v3/RSEFPN.png" width="800">
</div>

L
fix  
LDOUBLEV 已提交
36
RSEFPN将PP-OCR检测模型的精度hmean从81.3%提升到84.5%。模型大小从3M变为3.6M。
L
LDOUBLEV 已提交
37

L
fix  
LDOUBLEV 已提交
38
*注:PP-OCRv2的FPN通道数仅为96和24,如果直接用SE模块代替FPN的卷积会导致精度下降,RSEConv引入残差结构可以防止训练中包含重要特征的通道被抑制。*
L
fix  
LDOUBLEV 已提交
39 40

- 在蒸馏的teacher模型精度提升方面,提出了LKPAN结构替换PP-OCRv2的FPN结构,并且使用ResNet50作为Backbone,更大的模型带来更多的精度提升。另外,对teacher模型使用[DML](https://arxiv.org/abs/1706.00384)蒸馏策略进一步提升teacher模型的精度。最终teacher的模型指标相比ppocr_server_v2.0从83.2%提升到了86.0%。
L
fix  
LDOUBLEV 已提交
41

D
Double_V 已提交
42
*注:[PP-OCRv2的FPN结构](https://github.com/PaddlePaddle/PaddleOCR/blob/77acb3bfe51c8a46c684527f73cd218cefedb4a3/ppocr/modeling/necks/db_fpn.py#L107)对DB算法FPN结构做了轻量级设计*
L
LDOUBLEV 已提交
43 44

LKPAN的网络结构如下图所示:
L
LDOUBLEV 已提交
45

L
LDOUBLEV 已提交
46 47 48
<div align="center">
    <img src="../ppocr_v3/LKPAN.png" width="800">
</div>
L
LDOUBLEV 已提交
49

L
fix  
LDOUBLEV 已提交
50
LKPAN(Large Kernel PAN)是一个具有更大感受野的轻量级[PAN](https://arxiv.org/pdf/1803.01534.pdf)结构。在LKPAN的path augmentation中,使用kernel size为`9*9`的卷积;更大的kernel size意味着更大的感受野,更容易检测大字体的文字以及极端长宽比的文字。LKPAN将PP-OCR检测模型的精度hmean从81.3%提升到84.9%。
L
LDOUBLEV 已提交
51 52

*注:LKPAN相比RSEFPN有更多的精度提升,但是考虑到模型大小和预测速度等因素,在student模型中使用RSEFPN。*
L
LDOUBLEV 已提交
53

L
fix  
LDOUBLEV 已提交
54
采用上述策略,PP-OCRv3相比PP-OCRv2,hmean指标从83.3%提升到85.4%;预测速度从平均117ms/image变为124ms/image。
L
LDOUBLEV 已提交
55

L
LDOUBLEV 已提交
56
3. PP-OCRv3检测模型消融实验
L
LDOUBLEV 已提交
57 58 59

|序号|策略|模型大小|hmean|Intel Gold 6148CPU+mkldnn预测耗时|
|-|-|-|-|-|
L
fix  
LDOUBLEV 已提交
60 61 62 63
|0|PP-OCR|3M|81.3%|117ms|
|1|PP-OCRV2|3M|83.3%|117ms|
|2|0 + RESFPN|3.6M|84.5%|124ms|
|3|0 + LKPAN|4.6M|84.9%|156ms|
L
fix  
LDOUBLEV 已提交
64 65
|4|ppocr_server_v2.0 |124M|83.2%||171ms|
|5|teacher + DML + LKPAN|124M|86.0%|396ms|
L
fix  
LDOUBLEV 已提交
66
|6|0 + 2 + 5 + CML|3.6M|85.4%|124ms|
L
LDOUBLEV 已提交
67 68 69



M
MissPenguin 已提交
70 71
<a name="3"></a>
## 3. 识别优化
L
LDOUBLEV 已提交
72

T
tink2123 已提交
73
PP-OCRv3 识别模型在 PP-OCRv2 的基础上从8个策略上进一步优化,整体 pipelinne 如下图所示:
L
LDOUBLEV 已提交
74

T
tink2123 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
<img src="../ppocr_v3/v3_rec_pipeline.png" width=800>

总体来讲PP-OCRv3识别主要从网络结构、蒸馏策略、数据增强三个方向做了进一步优化:

- 网络结构上:考虑[SVTR](https://arxiv.org/abs/2205.00159) 在中英文效果上的优越性,采用SVTR_Tiny作为base,选取Global Mixing Block和卷积组合提取特征,并将Global Mixing Block位置后移进行加速; 参考 [GTC](https://arxiv.org/pdf/2002.01276.pdf) 策略,使用注意力机制模块指导CTC训练,定位和识别字符,提升不规则文本的识别精度。
- 蒸馏策略上:参考 [SSL](https://github.com/ku21fan/STR-Fewer-Labels) 设计了方向分类前序任务,获取更优预训练模型,加速模型收敛过程,提升精度; 使用UDML蒸馏策略、监督attention、ctc两个分支得到更优模型。
- 数据增强上:基于 [ConCLR](https://www.cse.cuhk.edu.hk/~byu/papers/C139-AAAI2022-ConCLR.pdf) 中的ConAug方法,改进得到 TextConAug 数据增广方法,支持随机结合任意多张图片,提升训练数据的上下文信息丰富度,增强模型鲁棒性
- 无标注数据: 使用 SVTR_large 预测无标签数据,向训练集中补充81w高质量真实数据。

基于上述策略,PP-OCRv3识别模型相比PP-OCRv2,在速度可比的情况下,精度进一步提升4.5%。 具体消融实验如下所示:

| id | 策略 |  模型大小 | 精度 | 速度(cpu + mkldnn)|
|-----|-----|--------|----| --- |
| 01 | PP-OCRv2 | 8M | 69.3% | 8.54ms |
| 02 | SVTR_Tiny | 21M | 80.1% | 97ms |
| 03 | PP-LCNet_SVTR | 12M | 71.9% | 6.6ms |
| 04 | + GTC | 12M | 75.8% | 7.6ms |
| 05 | + TextConAug | 12M | 76.3% | 7.6ms |
| 06 | + TextRotNet | 12M | 76.9% | 7.6ms |
| 07 | + UDML | 12M | 78.4% | 7.6ms |
| 08 | + HLD | 12M | 79.4% | 7.6ms |

注: 测试速度时,实验01-03输入图片尺寸均为(3,32,320),04-08输入图片尺寸均为(3,48,320)


下面具体介绍各策略的设计思路:

网络结构上,PP-OCRv3将base模型从CRNN替换成了[SVTR](https://arxiv.org/abs/2205.00159),SVTR证明了强大的单视觉模型(无需序列模型)即可高效准确完成文本识别任务,在中英文数据上均有优秀的表现。经过实验验证,SVTR_Tiny 在自建的 [中文数据集上](https://arxiv.org/abs/2109.03144) ,识别精度可以提升10.7%,SVTR_Tiny 网络结构如下所示:

<img src="../ppocr_v3/svtr_tiny.png" width=800>
L
LDOUBLEV 已提交
105

M
MissPenguin 已提交
106 107 108 109 110 111 112 113 114
由于 MKLDNN 加速库支持的模型结构有限,SVTR 在CPU+MKLDNN上相比PP-OCRv2慢了10倍。

PP-OCRv3 期望在提升模型精度的同时,不带来额外的推理耗时。通过分析发现,SVTR_Tiny结构的主要耗时模块为Mixing Block,因此我们对 SVTR_Tiny 的结构进行了一系列优化(详细速度数据请参考下方消融实验表格):

1. 将SVTR网络前半部分替换为PP-LCNet的前三个stage,保留4个 Global Mixing Block ,精度为76%,加速69%,网络结构如下所示:
<img src="../ppocr_v3/svtr_g4.png" width=800>
2. 将4个 Global Attenntion Block 减小到2个,精度为72.9%,加速69%,网络结构如下所示:
<img src="../ppocr_v3/svtr_g2.png" width=800>
3. 实验发现 Global Attention 的预测速度与输入其特征的shape有关,因此后移Global Mixing Block的位置到池化层之后,精度下降为71.9%,速度超越 CNN-base 的PP-OCRv2 22%,网络结构如下所示:
T
tink2123 已提交
115 116 117 118 119 120 121 122 123 124 125
<img src="../ppocr_v3/LCNet-SVTR.png" width=800>

| id | 策略 |  模型大小 | 精度 | 速度(cpu + mkldnn)|
|-----|-----|--------|----| --- |
| 01 | PP-OCRv2 | 8M | 69.3% | 8.54ms |
| 02 | SVTR_Tiny | 21M | 80.1% | 97ms |
| 03 | PP-LCNet_SVTR(G4) | 9.2M | 76% | 30ms |
| 04 | PP-LCNet_SVTR(G2) | 13M | 72.98% | 9.37ms |
| 05 | PP-LCNet_SVTR | 12M | 71.9% | 6.6ms |

注: 测试速度时,输入图片尺寸均为(3,32,320)
M
MissPenguin 已提交
126 127 128 129

为了提升模型精度同时不引入额外推理成本,PP-OCRv3参考GTC策略,使用Attention监督CTC训练,预测时完全去除Attention模块,在推理阶段不增加任何耗时, 精度提升3.8%,训练流程如下所示:
<img src="../ppocr_v3/GTC.png" width=800>

T
tink2123 已提交
130

T
tink2123 已提交
131
在蒸馏策略方面,PP-OCRv3参考 [SSL](https://github.com/ku21fan/STR-Fewer-Labels) 设计了文本方向任务,训练了适用于文本识别的预训练模型,加速模型收敛过程,精度提升了0.6%; 使用UDML蒸馏策略,进一步提升精度1.5%,训练流程所示:
M
MissPenguin 已提交
132 133 134 135 136 137 138 139 140 141 142

<img src="../ppocr_v3/SSL.png" width="300"> <img src="../ppocr_v3/UDML.png" width="500">


数据增强方面:

1. 基于 [ConCLR](https://www.cse.cuhk.edu.hk/~byu/papers/C139-AAAI2022-ConCLR.pdf) 中的ConAug方法,设计了 RecConAug 数据增强方法,增强数据多样性,精度提升0.5%,增强可视化效果如下所示:
<img src="../ppocr_v3/recconaug.png" width=800>

2. 使用训练好的 SVTR_large 预测 120W 的 lsvt 无标注数据,取出其中得分大于0.95的数据,共得到81W识别数据加入到PP-OCRv3的训练数据中,精度提升1%。

L
LDOUBLEV 已提交
143

M
MissPenguin 已提交
144 145
<a name="4"></a>
## 4. 端到端评估