inference.md 25.4 KB
Newer Older
1

dyning's avatar
dyning committed
2
# 基于Python预测引擎推理
3

WenmuZhou's avatar
WenmuZhou committed
4
inference 模型(`paddle.jit.save`保存的模型)
LDOUBLEV's avatar
LDOUBLEV committed
5
6
7
一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。
训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。
与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。
LDOUBLEV's avatar
LDOUBLEV committed
8

LDOUBLEV's avatar
LDOUBLEV committed
9
接下来首先介绍如何将训练的模型转换成inference模型,然后将依次介绍文本检测、文本角度分类器、文本识别以及三者串联在CPU、GPU上的预测方法。
LDOUBLEV's avatar
LDOUBLEV committed
10

11
12
13

- [一、训练模型转inference模型](#训练模型转inference模型)
    - [检测模型转inference模型](#检测模型转inference模型)
licx's avatar
licx committed
14
    - [识别模型转inference模型](#识别模型转inference模型)  
Jethong's avatar
Jethong committed
15
16
    - [方向分类模型转inference模型](#方向分类模型转inference模型)
    - [端到端模型转inference模型](#端到端模型转inference模型)
WenmuZhou's avatar
WenmuZhou committed
17

18
19
20
21
- [二、文本检测模型推理](#文本检测模型推理)
    - [1. 超轻量中文检测模型推理](#超轻量中文检测模型推理)
    - [2. DB文本检测模型推理](#DB文本检测模型推理)
    - [3. EAST文本检测模型推理](#EAST文本检测模型推理)
licx's avatar
licx committed
22
    - [4. SAST文本检测模型推理](#SAST文本检测模型推理)  
WenmuZhou's avatar
WenmuZhou committed
23

24
25
26
- [三、文本识别模型推理](#文本识别模型推理)
    - [1. 超轻量中文识别模型推理](#超轻量中文识别模型推理)
    - [2. 基于CTC损失的识别模型推理](#基于CTC损失的识别模型推理)
tink2123's avatar
tink2123 committed
27
28
29
    - [3. 基于SRN损失的识别模型推理](#基于SRN损失的识别模型推理)
    - [4. 自定义文本识别字典的推理](#自定义文本识别字典的推理)
    - [5. 多语言模型的推理](#多语言模型的推理)
WenmuZhou's avatar
WenmuZhou committed
30

Jethong's avatar
Jethong committed
31
32
33
34
- [四、端到端模型推理](#端到端模型推理)
    - [1. PGNet端到端模型推理](#SAST文本检测模型推理)

- [五、方向分类模型推理](#方向识别模型推理)
WenmuZhou's avatar
WenmuZhou committed
35
36
    - [1. 方向分类模型推理](#方向分类模型推理)

Jethong's avatar
Jethong committed
37
- [六、文本检测、方向分类和文字识别串联推理](#文本检测、方向分类和文字识别串联推理)
38
39
    - [1. 超轻量中文OCR模型推理](#超轻量中文OCR模型推理)
    - [2. 其他模型推理](#其他模型推理)
WenmuZhou's avatar
WenmuZhou committed
40
41


42
<a name="训练模型转inference模型"></a>
dyning's avatar
dyning committed
43
## 一、训练模型转inference模型
44
<a name="检测模型转inference模型"></a>
LDOUBLEV's avatar
LDOUBLEV committed
45
46
47
48
### 检测模型转inference模型

下载超轻量级中文检测模型:
```
WenmuZhou's avatar
WenmuZhou committed
49
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v2.0_det_train.tar -C ./ch_lite/
LDOUBLEV's avatar
LDOUBLEV committed
50
51
52
```
上述模型是以MobileNetV3为backbone训练的DB算法,将训练好的模型转换成inference模型只需要运行如下命令:
```
WenmuZhou's avatar
WenmuZhou committed
53
54
55
56
57
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 参数需要设置为 False。
# Global.save_inference_dir参数设置转换的模型将保存的地址。
dyning's avatar
dyning committed
58

WenmuZhou's avatar
WenmuZhou committed
59
python3 tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_db/
LDOUBLEV's avatar
LDOUBLEV committed
60
```
WenmuZhou's avatar
WenmuZhou committed
61
转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的`Global.pretrained_model`参数,其指向训练中保存的模型参数文件。
WenmuZhou's avatar
WenmuZhou committed
62
转换成功后,在模型保存目录下有三个文件:
LDOUBLEV's avatar
LDOUBLEV committed
63
```
LDOUBLEV's avatar
LDOUBLEV committed
64
inference/det_db/
65
66
67
    ├── inference.pdiparams         # 检测inference模型的参数文件
    ├── inference.pdiparams.info    # 检测inference模型的参数信息,可忽略
    └── inference.pdmodel           # 检测inference模型的program文件
LDOUBLEV's avatar
LDOUBLEV committed
68
69
```

70
<a name="识别模型转inference模型"></a>
LDOUBLEV's avatar
LDOUBLEV committed
71
72
73
74
### 识别模型转inference模型

下载超轻量中文识别模型:
```
WenmuZhou's avatar
WenmuZhou committed
75
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v2.0_rec_train.tar -C ./ch_lite/
LDOUBLEV's avatar
LDOUBLEV committed
76
77
78
79
```

识别模型转inference模型与检测的方式相同,如下:
```
WenmuZhou's avatar
WenmuZhou committed
80
81
82
83
84
85
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 参数需要设置为 False。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

WenmuZhou's avatar
WenmuZhou committed
86
python3 tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_rec_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/rec_crnn/
LDOUBLEV's avatar
LDOUBLEV committed
87
```
LDOUBLEV's avatar
LDOUBLEV committed
88

89
**注意:**如果您是在自己的数据集上训练的模型,并且调整了中文字符的字典文件,请注意修改配置文件中的`character_dict_path`是否是所需要的字典文件。
LDOUBLEV's avatar
LDOUBLEV committed
90

WenmuZhou's avatar
WenmuZhou committed
91
转换成功后,在目录下有三个文件:
LDOUBLEV's avatar
LDOUBLEV committed
92
```
LDOUBLEV's avatar
LDOUBLEV committed
93
/inference/rec_crnn/
94
95
96
    ├── inference.pdiparams         # 识别inference模型的参数文件
    ├── inference.pdiparams.info    # 识别inference模型的参数信息,可忽略
    └── inference.pdmodel           # 识别inference模型的program文件
LDOUBLEV's avatar
LDOUBLEV committed
97
```
98

WenmuZhou's avatar
WenmuZhou committed
99
100
101
102
103
<a name="方向分类模型转inference模型"></a>
### 方向分类模型转inference模型

下载方向分类模型:
```
WenmuZhou's avatar
WenmuZhou committed
104
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v2.0_cls_train.tar -C ./ch_lite/
WenmuZhou's avatar
WenmuZhou committed
105
106
107
108
```

方向分类模型转inference模型与检测的方式相同,如下:
```
WenmuZhou's avatar
WenmuZhou committed
109
110
111
112
113
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 参数需要设置为 False。
# Global.save_inference_dir参数设置转换的模型将保存的地址。
WenmuZhou's avatar
WenmuZhou committed
114

WenmuZhou's avatar
WenmuZhou committed
115
python3 tools/export_model.py -c configs/cls/cls_mv3.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_cls_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/cls/
WenmuZhou's avatar
WenmuZhou committed
116
117
```

WenmuZhou's avatar
WenmuZhou committed
118
转换成功后,在目录下有三个文件:
WenmuZhou's avatar
WenmuZhou committed
119
120
```
/inference/cls/
121
122
123
    ├── inference.pdiparams         # 分类inference模型的参数文件
    ├── inference.pdiparams.info    # 分类inference模型的参数信息,可忽略
    └── inference.pdmodel           # 分类inference模型的program文件
WenmuZhou's avatar
WenmuZhou committed
124
```
Jethong's avatar
Jethong committed
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<a name="端到端模型转inference模型"></a>
### 端到端模型转inference模型

下载端到端模型:
```
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v2.0_cls_train.tar -C ./ch_lite/
```

端到端模型转inference模型与检测的方式相同,如下:
```
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 参数需要设置为 False。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/e2e/e2e_r50_vd_pg.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_cls_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/e2e/
```

转换成功后,在目录下有三个文件:
```
/inference/e2e/
    ├── inference.pdiparams         # 分类inference模型的参数文件
    ├── inference.pdiparams.info    # 分类inference模型的参数信息,可忽略
    └── inference.pdmodel           # 分类inference模型的program文件
```
WenmuZhou's avatar
WenmuZhou committed
151

152
<a name="文本检测模型推理"></a>
dyning's avatar
dyning committed
153
## 二、文本检测模型推理
154

155
文本检测模型推理,默认使用DB模型的配置参数。当不使用DB模型时,在推理时,需要通过传入相应的参数进行算法适配,细节参考下文。
dyning's avatar
dyning committed
156

157
158
<a name="超轻量中文检测模型推理"></a>
### 1. 超轻量中文检测模型推理
dyning's avatar
dyning committed
159
160

超轻量中文检测模型推理,可以执行如下命令:
161
162

```
LDOUBLEV's avatar
LDOUBLEV committed
163
164
165
# 下载超轻量中文检测模型:
wget  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
tar xf ch_ppocr_mobile_v2.0_det_infer.tar
166
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./ch_ppocr_mobile_v2.0_det_infer/"
167
168
```

169
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
170

171
![](../imgs_results/det_res_00018069.jpg)
172

LDOUBLEV's avatar
LDOUBLEV committed
173
通过参数`limit_type``det_limit_side_len`来对图片的尺寸进行限制,
MissPenguin's avatar
MissPenguin committed
174
`limit_type`可选参数为[`max`, `min`],
LDOUBLEV's avatar
LDOUBLEV committed
175
`det_limit_size_len` 为正整数,一般设置为32 的倍数,比如960。
176

LDOUBLEV's avatar
LDOUBLEV committed
177
178
179
180
181
参数默认设置为`limit_type='max', det_limit_side_len=960`。表示网络输入图像的最长边不能超过960,
如果超过这个值,会对图像做等宽比的resize操作,确保最长边为`det_limit_side_len`
设置为`limit_type='min', det_limit_side_len=960` 则表示限制图像的最短边为960。

如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置det_limit_side_len 为想要的值,比如1216:
182
```
LDOUBLEV's avatar
LDOUBLEV committed
183
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --det_limit_type=max --det_limit_side_len=1216
dyning's avatar
dyning committed
184
185
```

dyning's avatar
dyning committed
186
如果想使用CPU进行预测,执行命令如下
dyning's avatar
dyning committed
187
```
LDOUBLEV's avatar
LDOUBLEV committed
188
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/"  --use_gpu=False
dyning's avatar
dyning committed
189
190
```

191
192
<a name="DB文本检测模型推理"></a>
### 2. DB文本检测模型推理
dyning's avatar
dyning committed
193

WenmuZhou's avatar
WenmuZhou committed
194
首先将DB文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例( [模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_db_v2.0_train.tar) ),可以使用如下命令进行转换:
dyning's avatar
dyning committed
195

196
```
WenmuZhou's avatar
WenmuZhou committed
197
python3 tools/export_model.py -c configs/det/det_r50_vd_db.yml -o Global.pretrained_model=./det_r50_vd_db_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_db
dyning's avatar
dyning committed
198
199
200
201
202
203
204
205
```

DB文本检测模型推理,可以执行如下命令:

```
python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_db/"
```

206
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
207

208
![](../imgs_results/det_res_img_10_db.jpg)
dyning's avatar
dyning committed
209

210
**注意**:由于ICDAR2015数据集只有1000张训练图像,且主要针对英文场景,所以上述模型对中文文本图像检测效果会比较差。
dyning's avatar
dyning committed
211

212
213
<a name="EAST文本检测模型推理"></a>
### 3. EAST文本检测模型推理
dyning's avatar
dyning committed
214

MissPenguin's avatar
MissPenguin committed
215
首先将EAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例( [模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_east_v2.0_train.tar) ),可以使用如下命令进行转换:
dyning's avatar
dyning committed
216
217

```
WenmuZhou's avatar
WenmuZhou committed
218
python3 tools/export_model.py -c configs/det/det_r50_vd_east.yml -o Global.pretrained_model=./det_r50_vd_east_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_east
dyning's avatar
dyning committed
219
220
```

licx's avatar
licx committed
221
**EAST文本检测模型推理,需要设置参数`--det_algorithm="EAST"`**,可以执行如下命令:
dyning's avatar
dyning committed
222
223

```
LDOUBLEV's avatar
LDOUBLEV committed
224
python3 tools/infer/predict_det.py --det_algorithm="EAST" --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/"
dyning's avatar
dyning committed
225
```
226
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
227

MissPenguin's avatar
MissPenguin committed
228
![](../imgs_results/det_res_img_10_east.jpg)
dyning's avatar
dyning committed
229

230
231
232
233
234
235
**注意**:本代码库中,EAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。


<a name="SAST文本检测模型推理"></a>
### 4. SAST文本检测模型推理
#### (1). 四边形文本检测模型(ICDAR2015)  
MissPenguin's avatar
MissPenguin committed
236
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_icdar15_v2.0_train.tar)),可以使用如下命令进行转换:
237
```
WenmuZhou's avatar
WenmuZhou committed
238
python3 tools/export_model.py -c configs/det/det_r50_vd_sast_icdar15.yml -o Global.pretrained_model=./det_r50_vd_sast_icdar15_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_sast_ic15
WenmuZhou's avatar
WenmuZhou committed
239

240
```
licx's avatar
licx committed
241
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`**,可以执行如下命令:
242
243
244
245
246
```
python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_sast_ic15/"
```
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:

MissPenguin's avatar
MissPenguin committed
247
![](../imgs_results/det_res_img_10_sast.jpg)
248
249

#### (2). 弯曲文本检测模型(Total-Text)  
MissPenguin's avatar
MissPenguin committed
250
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在Total-Text英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_totaltext_v2.0_train.tar)),可以使用如下命令进行转换:
251

252
```
WenmuZhou's avatar
WenmuZhou committed
253
python3 tools/export_model.py -c configs/det/det_r50_vd_sast_totaltext.yml -o Global.pretrained_model=./det_r50_vd_sast_totaltext_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_sast_tt
WenmuZhou's avatar
WenmuZhou committed
254

255
256
```

licx's avatar
licx committed
257
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`,同时,还需要增加参数`--det_sast_polygon=True`,**可以执行如下命令:
258
259
260
261
```
python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/imgs_en/img623.jpg" --det_model_dir="./inference/det_sast_tt/" --det_sast_polygon=True
```
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
262

MissPenguin's avatar
MissPenguin committed
263
![](../imgs_results/det_res_img623_sast.jpg)
264
265
266
267
268

**注意**:本代码库中,SAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。


<a name="文本识别模型推理"></a>
dyning's avatar
dyning committed
269
## 三、文本识别模型推理
270

dyning's avatar
dyning committed
271
下面将介绍超轻量中文识别模型推理、基于CTC损失的识别模型推理和基于Attention损失的识别模型推理。对于中文文本识别,建议优先选择基于CTC损失的识别模型,实践中也发现基于Attention损失的效果不如基于CTC损失的识别模型。此外,如果训练时修改了文本的字典,请参考下面的自定义文本识别字典的推理。
dyning's avatar
dyning committed
272
273


274
275
<a name="超轻量中文识别模型推理"></a>
### 1. 超轻量中文识别模型推理
dyning's avatar
dyning committed
276
277
278
279

超轻量中文识别模型推理,可以执行如下命令:

```
WenmuZhou's avatar
WenmuZhou committed
280
281
282
283
# 下载超轻量中文识别模型:
wget  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
tar xf ch_ppocr_mobile_v2.0_rec_infer.tar
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="ch_ppocr_mobile_v2.0_rec_infer"
dyning's avatar
dyning committed
284
285
```

286
![](../imgs_words/ch/word_4.jpg)
dyning's avatar
dyning committed
287
288
289

执行命令后,上面图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下:

WenmuZhou's avatar
WenmuZhou committed
290
291
292
```bash
Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153)
```
dyning's avatar
dyning committed
293

294
295
<a name="基于CTC损失的识别模型推理"></a>
### 2. 基于CTC损失的识别模型推理
dyning's avatar
dyning committed
296

WenmuZhou's avatar
WenmuZhou committed
297
我们以 CRNN 为例,介绍基于CTC损失的识别模型推理。 Rosetta 使用方式类似,不用设置识别算法参数rec_algorithm。
dyning's avatar
dyning committed
298

WenmuZhou's avatar
WenmuZhou committed
299
首先将 CRNN 文本识别训练过程中保存的模型,转换成inference model。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText两个英文文本识别合成数据集训练
WenmuZhou's avatar
WenmuZhou committed
300
的模型为例( [模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar) ),可以使用如下命令进行转换:
dyning's avatar
dyning committed
301
302

```
WenmuZhou's avatar
WenmuZhou committed
303
python3 tools/export_model.py -c configs/rec/rec_r34_vd_none_bilstm_ctc.yml -o Global.pretrained_model=./rec_r34_vd_none_bilstm_ctc_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/rec_crnn
dyning's avatar
dyning committed
304
305
```

WenmuZhou's avatar
WenmuZhou committed
306
CRNN 文本识别模型推理,可以执行如下命令:
307
308

```
WenmuZhou's avatar
WenmuZhou committed
309
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/rec_crnn/" --rec_image_shape="3, 32, 100" --rec_char_type="en"
310
```
tink2123's avatar
tink2123 committed
311

312
![](../imgs_words_en/word_336.png)
dyning's avatar
dyning committed
313
314
315

执行命令后,上面图像的识别结果如下:

WenmuZhou's avatar
WenmuZhou committed
316
317
318
```bash
Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073)
```
dyning's avatar
dyning committed
319
320

**注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同:
321

dyning's avatar
dyning committed
322
- 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。
323

dyning's avatar
dyning committed
324
- 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_type,指定为英文"en"。
325
326

```
dyning's avatar
dyning committed
327
328
self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz"
dict_character = list(self.character_str)
329
```
tink2123's avatar
tink2123 committed
330
331
332
333
<a name="基于SRN损失的识别模型推理"></a>
### 3. 基于SRN损失的识别模型推理
基于SRN损失的识别模型,需要额外设置识别算法参数 --rec_algorithm="SRN"。
同时需要保证预测shape与训练时一致,如: --rec_image_shape="1, 64, 256"
WenmuZhou's avatar
WenmuZhou committed
334

tink2123's avatar
tink2123 committed
335
336
337
338
339
340
341
342
343
```
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" \
                                   --rec_model_dir="./inference/srn/" \
                                   --rec_image_shape="1, 64, 256" \
                                   --rec_char_type="en" \
                                   --rec_algorithm="SRN"
```

### 4. 自定义文本识别字典的推理
WenmuZhou's avatar
WenmuZhou committed
344
如果训练时修改了文本的字典,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径,并且设置 `rec_char_type=ch`
LDOUBLEV's avatar
LDOUBLEV committed
345
346

```
WenmuZhou's avatar
WenmuZhou committed
347
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="ch" --rec_char_dict_path="your text dict path"
LDOUBLEV's avatar
LDOUBLEV committed
348
349
```

WenmuZhou's avatar
WenmuZhou committed
350
<a name="多语言模型的推理"></a>
tink2123's avatar
tink2123 committed
351
### 5. 多语言模型的推理
WenmuZhou's avatar
WenmuZhou committed
352
如果您需要预测的是其他语言模型,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径, 同时为了得到正确的可视化结果,
tink2123's avatar
tink2123 committed
353
需要通过 `--vis_font_path` 指定可视化的字体路径,`doc/fonts/` 路径下有默认提供的小语种字体,例如韩文识别:
WenmuZhou's avatar
WenmuZhou committed
354
355

```
tink2123's avatar
tink2123 committed
356
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your inference model" --rec_char_type="korean" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/fonts/korean.ttf"
WenmuZhou's avatar
WenmuZhou committed
357
358
359
360
361
```
![](../imgs_words/korean/1.jpg)

执行命令后,上图的预测结果为:
``` text
WenmuZhou's avatar
WenmuZhou committed
362
Predicts of ./doc/imgs_words/korean/1.jpg:('바탕으로', 0.9948904)
WenmuZhou's avatar
WenmuZhou committed
363
364
```

Jethong's avatar
Jethong committed
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
<a name="端到端模型推理"></a>
## 四、端到端模型推理

端到端模型推理,默认使用PGNet模型的配置参数。当不使用PGNet模型时,在推理时,需要通过传入相应的参数进行算法适配,细节参考下文。
<a name="SAST文本检测模型推理"></a>
### 1. PGNet端到端模型推理
#### (1). 四边形文本检测模型(ICDAR2015)  
首先将PGNet端到端训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_icdar15_v2.0_train.tar)),可以使用如下命令进行转换:
```
python3 tools/export_model.py -c configs/e2e/e2e_r50_vd_pg.yml -o Global.pretrained_model=./det_r50_vd_sast_icdar15_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/e2e
```
**PGNet端到端模型推理,需要设置参数`--e2e_algorithm="PGNet"`**,可以执行如下命令:
```
python3 tools/infer/predict_e2e.py --e2e_algorithm="PGNet" --image_dir="./doc/imgs_en/img_10.jpg" --e2e_model_dir="./inference/e2e_pgnet_ic15/"
```
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'e2e_res'。结果示例如下:

![](../imgs_results/det_res_img_10_sast.jpg)

#### (2). 弯曲文本检测模型(Total-Text)  
首先将PGNet端到端训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在Total-Text英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_totaltext_v2.0_train.tar)),可以使用如下命令进行转换:

```
python3 tools/export_model.py -c configs/e2e/e2e_r50_vd_pg.yml -o Global.pretrained_model=./det_r50_vd_sast_totaltext_v2.0_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/e2e_pgnet_tt
```

**PGNet端到端模型推理,需要设置参数`--e2e_algorithm="PGNet"`,同时,还需要增加参数`--e2e_pgnet_polygon=True`,**可以执行如下命令:
```
python3 tools/infer/predict_e2e.py --e2e_algorithm="PGNet" --image_dir="./doc/imgs_en/img623.jpg" --e2e_model_dir="./inference/e2e_pgnet_tt/" --e2e_pgnet_polygon=True
```
可视化文本端到端结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'e2e_res'。结果示例如下:

![](../imgs_results/e2e_res_img623_pg.jpg)

**注意**:本代码库中,SAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。


WenmuZhou's avatar
WenmuZhou committed
402
<a name="方向分类模型推理"></a>
Jethong's avatar
Jethong committed
403
## 五、方向分类模型推理
WenmuZhou's avatar
WenmuZhou committed
404
405
406
407
408
409
410
411
412

下面将介绍方向分类模型推理。

<a name="方向分类模型推理"></a>
### 1. 方向分类模型推理

方向分类模型推理,可以执行如下命令:

```
WenmuZhou's avatar
WenmuZhou committed
413
414
415
416
# 下载超轻量中文方向分类器模型:
wget  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
tar xf ch_ppocr_mobile_v2.0_cls_infer.tar
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"
WenmuZhou's avatar
WenmuZhou committed
417
418
```

WenmuZhou's avatar
WenmuZhou committed
419
![](../imgs_words/ch/word_1.jpg)
WenmuZhou's avatar
WenmuZhou committed
420
421
422

执行命令后,上面图像的预测结果(分类的方向和得分)会打印到屏幕上,示例如下:

WenmuZhou's avatar
WenmuZhou committed
423
```
WenmuZhou's avatar
WenmuZhou committed
424
Predicts of ./doc/imgs_words/ch/word_4.jpg:['0', 0.9999982]
WenmuZhou's avatar
WenmuZhou committed
425
```
WenmuZhou's avatar
WenmuZhou committed
426
427

<a name="文本检测、方向分类和文字识别串联推理"></a>
Jethong's avatar
Jethong committed
428
## 六、文本检测、方向分类和文字识别串联推理
429
430
<a name="超轻量中文OCR模型推理"></a>
### 1. 超轻量中文OCR模型推理
dyning's avatar
dyning committed
431

WenmuZhou's avatar
WenmuZhou committed
432
在执行预测时,需要通过参数`image_dir`指定单张图像或者图像集合的路径、参数`det_model_dir`,`cls_model_dir``rec_model_dir`分别指定检测,方向分类和识别的inference模型路径。参数`use_angle_cls`用于控制是否启用方向分类模型。可视化识别结果默认保存到 ./inference_results 文件夹里面。
dyning's avatar
dyning committed
433

434
```
WenmuZhou's avatar
WenmuZhou committed
435
# 使用方向分类器
WenmuZhou's avatar
WenmuZhou committed
436
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/" --cls_model_dir="./inference/cls/" --rec_model_dir="./inference/rec_crnn/" --use_angle_cls=true
WenmuZhou's avatar
WenmuZhou committed
437
438

# 不使用方向分类器
WenmuZhou's avatar
WenmuZhou committed
439
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/" --rec_model_dir="./inference/rec_crnn/" --use_angle_cls=false
440
441
```

WenmuZhou's avatar
WenmuZhou committed
442
443
444
445




dyning's avatar
dyning committed
446
447
执行命令后,识别结果图像如下:

WenmuZhou's avatar
WenmuZhou committed
448
![](../imgs_results/system_res_00018069.jpg)
dyning's avatar
dyning committed
449

450
451
<a name="其他模型推理"></a>
### 2. 其他模型推理
dyning's avatar
dyning committed
452

453
454
如果想尝试使用其他检测算法或者识别算法,请参考上述文本检测模型推理和文本识别模型推理,更新相应配置和模型。

licx's avatar
licx committed
455
**注意:由于检测框矫正逻辑的局限性,暂不支持使用SAST弯曲文本检测模型(即,使用参数`--det_sast_polygon=True`时)进行模型串联。**
456
457

下面给出基于EAST文本检测和STAR-Net文本识别执行命令:
458
459

```
dyning's avatar
dyning committed
460
python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en"
461
```
dyning's avatar
dyning committed
462
463
464

执行命令后,识别结果图像如下:

WenmuZhou's avatar
WenmuZhou committed
465
![](../imgs_results/img_10_east_starnet.jpg)