Text Generation
Transformers
PyTorch
English
llama
Inference Endpoints
text-generation-inference

Upload introduction_cn.ipynb

#7
by DORA1222 - opened
Files changed (1) hide show
  1. introduction_cn.ipynb +267 -0
introduction_cn.ipynb ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "## 1. PP-OCRv3模型简介\n",
8
+ "\n",
9
+ "PP-OCRv3在PP-OCRv2的基础上进一步升级。整体的框架图保持了与PP-OCRv2相同的pipeline,针对检测模型和识别模型进行了优化。其中,检测模块仍基于DB算法优化,而识别模块不再采用CRNN,换成了IJCAI 2022最新收录的文本识别算法SVTR,并对其进行产业适配。PP-OCRv3系统框图如下所示(粉色框中为PP-OCRv3新增策略):\n",
10
+ "\n",
11
+ "<div align=\"center\">\n",
12
+ "<img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocrv3_framework.png\" width = \"80%\" />\n",
13
+ "</div>\n",
14
+ "\n",
15
+ "\n",
16
+ "从算法改进思路上看,分别针对检测和识别模型,进行了共9个方面的改进:\n",
17
+ "\n",
18
+ "- 检测模块:\n",
19
+ " - LK-PAN:大感受野的PAN结构;\n",
20
+ " - DML:教师模型互学习策略;\n",
21
+ " - RSE-FPN:残差注意力机制的FPN结构;\n",
22
+ "\n",
23
+ "\n",
24
+ "- 识别模块:\n",
25
+ " - SVTR_LCNet:轻量级文本识别网络;\n",
26
+ " - GTC:Attention指导CTC训练策略;\n",
27
+ " - TextConAug:挖掘文字上下文信息的数据增广策略;\n",
28
+ " - TextRotNet:自监督的预训练模型;\n",
29
+ " - UDML:联合互学习策略;\n",
30
+ " - UIM:无标注数据挖掘方案。\n",
31
+ "\n",
32
+ "从效果上看,速度可比情况下,多种场景精度均有大幅提升:\n",
33
+ "- 中文场景,相对于PP-OCRv2中文模型提升超5%;\n",
34
+ "- 英文数字场景,相比于PP-OCRv2英文模型提升11%;\n",
35
+ "- 多语言场景,优化80+语种识别效果,平均准确率提升超5%。\n",
36
+ "\n",
37
+ "\n",
38
+ "更详细的优化细节可参考技术报告:https://arxiv.org/abs/2206.03001 。\n",
39
+ "\n",
40
+ "更多关于PaddleOCR的内容,可以点击 https://github.com/PaddlePaddle/PaddleOCR 进行了解。\n",
41
+ "\n",
42
+ "\n"
43
+ ]
44
+ },
45
+ {
46
+ "cell_type": "markdown",
47
+ "metadata": {},
48
+ "source": [
49
+ "## 2. 模型效果\n",
50
+ "\n",
51
+ "PP-OCRv3的效果如下:\n",
52
+ "\n",
53
+ "<div align=\"center\">\n",
54
+ "<img src=\"https://user-images.githubusercontent.com/12406017/200261622-1b928d93-93ab-4575-8c60-214bcc03eda1.png\" width = \"80%\" />\n",
55
+ "</div>\n",
56
+ "<div align=\"center\">\n",
57
+ "<img src=\"https://user-images.githubusercontent.com/12406017/200261711-9f18bb04-3736-4f51-892c-de801db9ab9e.png\" width = \"80%\" />\n",
58
+ "</div>\n",
59
+ "\n",
60
+ "\n",
61
+ "\n"
62
+ ]
63
+ },
64
+ {
65
+ "cell_type": "markdown",
66
+ "metadata": {},
67
+ "source": [
68
+ "## 3. 模型如何使用\n",
69
+ "\n",
70
+ "### 3.1 模型推理\n",
71
+ "* 安装PaddleOCR whl包"
72
+ ]
73
+ },
74
+ {
75
+ "cell_type": "code",
76
+ "execution_count": null,
77
+ "metadata": {
78
+ "collapsed": false,
79
+ "jupyter": {
80
+ "outputs_hidden": false
81
+ },
82
+ "scrolled": true,
83
+ "tags": []
84
+ },
85
+ "outputs": [],
86
+ "source": [
87
+ "! pip install paddleocr --user"
88
+ ]
89
+ },
90
+ {
91
+ "cell_type": "markdown",
92
+ "metadata": {},
93
+ "source": [
94
+ "* 快速体验"
95
+ ]
96
+ },
97
+ {
98
+ "cell_type": "code",
99
+ "execution_count": 1,
100
+ "metadata": {
101
+ "scrolled": true,
102
+ "tags": []
103
+ },
104
+ "outputs": [],
105
+ "source": [
106
+ "# 命令行使用\n",
107
+ "! wget https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/dygraph/doc/imgs/11.jpg\n",
108
+ "! paddleocr --image_dir 11.jpg --use_angle_cls true"
109
+ ]
110
+ },
111
+ {
112
+ "cell_type": "markdown",
113
+ "metadata": {},
114
+ "source": [
115
+ "运行完成后,会在终端输出如下结果:\n",
116
+ "```log\n",
117
+ "[[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.96588134765625)]\n",
118
+ "[[[26.0, 81.0], [172.0, 83.0], [172.0, 104.0], [25.0, 101.0]], ('产品信息/参数', 0.9113278985023499)]\n",
119
+ "[[[28.0, 115.0], [330.0, 115.0], [330.0, 132.0], [28.0, 132.0]], ('(45元/每公斤,100公斤起订)', 0.8843421936035156)]\n",
120
+ "......\n",
121
+ "```\n",
122
+ "\n",
123
+ "\n"
124
+ ]
125
+ },
126
+ {
127
+ "cell_type": "markdown",
128
+ "metadata": {},
129
+ "source": [
130
+ "### 3.2 模型训练\n",
131
+ "PP-OCR系统由文本检测模型、方向分类器和文本识别模型构成,三个模型训练教程可参考如下文档:\n",
132
+ "1. 文本检测模型:[文本检测训练教程](https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.6/doc/doc_ch/detection.md)\n",
133
+ "1. 方向分类器: [方向分类器训练教程](https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.6/doc/doc_ch/angle_class.md)\n",
134
+ "1. 文本识别模型:[文本识别训练教程](https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.6/doc/doc_ch/recognition.md)\n",
135
+ "\n",
136
+ "模型训练完成后,可以通过指定模型路径的方式串联使用\n",
137
+ "命令参考如下:\n",
138
+ "```python\n",
139
+ "paddleocr --image_dir 11.jpg --use_angle_cls true --det_model_dir=/path/to/det_inference_model --cls_model_dir=/path/to/cls_inference_model --rec_model_dir=/path/to/rec_inference_model\n",
140
+ "```"
141
+ ]
142
+ },
143
+ {
144
+ "cell_type": "markdown",
145
+ "metadata": {},
146
+ "source": [
147
+ "## 4. 原理\n",
148
+ "\n",
149
+ "优化思路具体如下\n",
150
+ "\n",
151
+ "1. 检测模型优化\n",
152
+ "- LK-PAN:大感受野的PAN结构。\n",
153
+ " \n",
154
+ "LK-PAN (Large Kernel PAN) 是一个具有更大感受野的轻量级PAN结构,核心是将PAN结构的path augmentation中卷积核从3*3改为9*9。通过增大卷积核,提升特征图每个位置覆盖的感受野,更容易检测大字体的文字以及极端长宽比的文字。使用LK-PAN结构,可以将教师模型的hmean从83.2%提升到85.0%。\n",
155
+ " <div align=\"center\">\n",
156
+ " <img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocr_v3/LKPAN.png\" width = \"60%\" />\n",
157
+ " </div>\n",
158
+ "\n",
159
+ "- DML:教师模型互学习策略\n",
160
+ "\n",
161
+ "[DML](https://arxiv.org/abs/1706.00384) (Deep Mutual Learning)互学习蒸馏方法,如下图所示,通过两个结构相同的模型互相学习,可以有效提升文本检测模型的精度。教师模型采用DML策略,hmean从85%提升到86%。将PP-OCRv2中CML的教师模型更新为上述更高精度的教师模型,学生模型的hmean可以进一步从83.2%提升到84.3%。\n",
162
+ " <div align=\"center\">\n",
163
+ " <img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocr_v3/teacher_dml.png\" width = \"60%\" />\n",
164
+ " </div>\n",
165
+ "\n",
166
+ "- RSE-FPN:残差注意力机制的FPN结构\n",
167
+ "\n",
168
+ "RSE-FPN(Residual Squeeze-and-Excitation FPN)如下图所示,引入残差结构和通道注意力结构,将FPN中的卷积层更换为通道注意力结构的RSEConv层,进一步提升特征图的表征能力。考虑到PP-OCRv2的检测模型中FPN通道数非常小,仅为96,如果直接用SEblock代替FPN中卷积会导致某些通道的特征被抑制,精度会下降。RSEConv引入残差结构会缓解上述问题,提升文本检测效果。进一步将PP-OCRv2中CML的学生模型的FPN结构更新为RSE-FPN,学生模型的hmean可以进一步从84.3%提升到85.4%。\n",
169
+ "\n",
170
+ "<div align=\"center\">\n",
171
+ "<img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocr_v3/RSEFPN.png\" width = \"60%\" />\n",
172
+ "</div>\n",
173
+ "\n",
174
+ "1. 识别模型优化\n",
175
+ "- SVTR_LCNet:轻量级文本识别网络\n",
176
+ "\n",
177
+ "SVTR_LCNet是针对文本识别任务,将基于Transformer的SVTR网络和轻量级CNN网络PP-LCNet 融合的一种轻量级文本识别网络。使用该网络,预测速度优于PP-OCRv2的识别模型20%,但是由于没有采用蒸馏策略,该识别模型效果略差。此外,进一步将输入图片规范化高度从32提升到48,预测速度稍微变慢,但是模型效果大幅提升,识别准确率达到73.98%(+2.08%),接近PP-OCRv2采用蒸馏策略的识别模型效果。\n",
178
+ "\n",
179
+ "- GTC:Attention指导CTC训练策略\n",
180
+ " \n",
181
+ "[GTC](https://arxiv.org/pdf/2002.01276.pdf)(Guided Training of CTC),利用Attention模块CTC训练,融合多种文本特征的表达,是一种有效的提升文本识别的策略。使用该策略,预测时完全去除 Attention 模块,在推理阶段不增加任何耗时,识别模型的准确率进一步提升到75.8%(+1.82%)。训练流程如下所示:\n",
182
+ "\n",
183
+ "<div align=\"center\">\n",
184
+ "<img src=\"https://user-images.githubusercontent.com/12406017/200265540-1bbb730f-35d4-4d72-8e00-70856bb932ee.png\" width = \"60%\" />\n",
185
+ "</div>\n",
186
+ "\n",
187
+ "- TextConAug:挖掘文字上下文信息的数据增广策略\n",
188
+ "\n",
189
+ "TextConAug是一种挖掘文字上下文信息的数据增广策略,主要思想来源于论文[ConCLR](https://www.cse.cuhk.edu.hk/~byu/papers/C139-AAAI2022-ConCLR.pdf),作者提出ConAug数据增广,在一个batch内对2张不同的图像进行联结,组成新的图像并进行自监督对比学习。PP-OCRv3将此方法应用到有监督的学习任务中,设计了TextConAug数据增强方法,可以丰富训练数据上下文信息,提升训练数据多样性。使用该策略,识别模型的准确率进一步提升到76.3%(+0.5%)。TextConAug示意图如下所示:\n",
190
+ "\n",
191
+ "<div align=\"center\">\n",
192
+ "<img src=\"https://user-images.githubusercontent.com/12406017/200265540-1bbb730f-35d4-4d72-8e00-70856bb932ee.png\" width = \"60%\" />\n",
193
+ "</div>\n",
194
+ "\n",
195
+ "- TextRotNet:自监督的预训练模型\n",
196
+ "\n",
197
+ "TextRotNet是使用大量无标注的文本行数据,通过自监督方式训练的预训练模型,参考于论文[STR-Fewer-Labels](https://github.com/ku21fan/STR-Fewer-Labels)。该模型可以初始化SVTR_LCNet的初始权重,从而帮助文本识别模型收敛到更��位置。使用该策略,识别模型的准确率进一步提升到76.9%(+0.6%)。TextRotNet训练流程如下图所示:\n",
198
+ "\n",
199
+ "<div align=\"center\">\n",
200
+ "<img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocr_v3/SSL.png\" width = \"60%\" />\n",
201
+ "</div>\n",
202
+ "\n",
203
+ "- UDML:联合互学习策略\n",
204
+ "\n",
205
+ "UDML(Unified-Deep Mutual Learning)联合互学习是PP-OCRv2中就采用的对于文本识别非常有效的提升模型效果的策略。在PP-OCRv3中,针对两个不同的SVTR_LCNet和Attention结构,对他们之间的PP-LCNet的特征图、SVTR模块的输出和Attention模块的输出同时进行监督训练。使用该策略,识别模型的准确率进一步提升到78.4%(+1.5%)。\n",
206
+ "\n",
207
+ "- UDML:联合互学习策略\n",
208
+ "\n",
209
+ "UIM(Unlabeled Images Mining)是一种非常简单的无标注数据挖掘方案。核心思想是利用高精度的文本识别大模型对无标注数据进行预测,获取伪标签,并且选择预测置信度高的样本作为训练数据,用于训练小模型。使用该策略,识别模型的准确率进一步提升到79.4%(+1%)。\n",
210
+ "\n",
211
+ "<div align=\"center\">\n",
212
+ "<img src=\"https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.6/doc/ppocr_v3/UIM.png\" width = \"60%\" />\n",
213
+ "</div>"
214
+ ]
215
+ },
216
+ {
217
+ "cell_type": "markdown",
218
+ "metadata": {},
219
+ "source": [
220
+ "## 5. 注意事项\n",
221
+ "\n",
222
+ "PP-OCR系列模型训练过程中均使用通用数据,如在实际场景中表现不满意,可标注少量数据进行finetune。"
223
+ ]
224
+ },
225
+ {
226
+ "cell_type": "markdown",
227
+ "metadata": {},
228
+ "source": [
229
+ "## 6. 相关论文以及引用信息\n",
230
+ "```\n",
231
+ "@article{li2022pp,\n",
232
+ " title={PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System},\n",
233
+ " author={Li, Chenxia and Liu, Weiwei and Guo, Ruoyu and Yin, Xiaoting and Jiang, Kaitao and Du, Yongkun and Du, Yuning and Zhu, Lingfeng and Lai, Baohua and Hu, Xiaoguang and others},\n",
234
+ " journal={arXiv preprint arXiv:2206.03001},\n",
235
+ " year={2022}\n",
236
+ "}\n",
237
+ "```\n"
238
+ ]
239
+ }
240
+ ],
241
+ "metadata": {
242
+ "kernelspec": {
243
+ "display_name": "Python 3.8.13 ('py38')",
244
+ "language": "python",
245
+ "name": "python3"
246
+ },
247
+ "language_info": {
248
+ "codemirror_mode": {
249
+ "name": "ipython",
250
+ "version": 3
251
+ },
252
+ "file_extension": ".py",
253
+ "mimetype": "text/x-python",
254
+ "name": "python",
255
+ "nbconvert_exporter": "python",
256
+ "pygments_lexer": "ipython3",
257
+ "version": "3.8.13"
258
+ },
259
+ "vscode": {
260
+ "interpreter": {
261
+ "hash": "58fd1890da6594cebec461cf98c6cb9764024814357f166387d10d267624ecd6"
262
+ }
263
+ }
264
+ },
265
+ "nbformat": 4,
266
+ "nbformat_minor": 4
267
+ }