serving_inference.md 9.0 KB
Newer Older
G
grasswolfs 已提交
1 2 3 4
PaddleOCR提供2种服务部署方式:
- 基于PaddleServing的部署:代码路径为"`./deploy/pdserving`",按照本教程使用。。
- 基于PaddleHub Serving的部署:代码路径为"`./deploy/hubserving`",使用方法参考[文档](../../deploy/hubserving/readme.md)

W
wangjiawei04 已提交
5 6 7 8 9 10 11 12
# 使用Paddle Serving预测推理

阅读本文档之前,请先阅读文档 [基于Python预测引擎推理](./inference.md)

同本地执行预测一样,我们需要保存一份可以用于Paddle Serving的模型。

接下来首先介绍如何将训练的模型转换成Paddle Serving模型,然后将依次介绍文本检测、文本识别以及两者串联基于预测引擎推理。

J
Jiawei Wang 已提交
13 14
### 一、 准备环境
我们先安装Paddle Serving相关组件
G
grasswolfs 已提交
15
我们推荐用户使用GPU来做Paddle Serving的OCR服务部署
W
wangjiawei04 已提交
16

J
Jiawei Wang 已提交
17
**CUDA版本:9.X/10.X**
W
wangjiawei04 已提交
18

J
Jiawei Wang 已提交
19
**CUDNN版本:7.X**
J
Jiawei Wang 已提交
20 21 22

**操作系统版本:Linux/Windows**

W
wangjiawei04 已提交
23
**Python版本: 2.7/3.5/3.6/3.7**
J
Jiawei Wang 已提交
24 25

**Python操作指南:**
W
wangjiawei04 已提交
26 27 28

目前Serving用于OCR的部分功能还在测试当中,因此在这里我们给出[Servnig latest package](https://github.com/PaddlePaddle/Serving/blob/develop/doc/LATEST_PACKAGES.md)
大家根据自己的环境选择需要安装的whl包即可,例如以Python 3.5为例,执行下列命令
J
Jiawei Wang 已提交
29 30 31
```
#CPU/GPU版本选择一个
#GPU版本服务端
W
wangjiawei04 已提交
32
#CUDA 9
G
grasswolfs 已提交
33
python -m pip install -U https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.0.0.post9-py3-none-any.whl
W
wangjiawei04 已提交
34 35
#CUDA 10
python -m pip install -U https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.0.0.post10-py3-none-any.whl
J
Jiawei Wang 已提交
36
#CPU版本服务端
W
wangjiawei04 已提交
37
python -m pip install -U https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server-0.0.0-py3-none-any.whl
J
Jiawei Wang 已提交
38
#客户端和App包使用以下链接(CPU,GPU通用)
W
wangjiawei04 已提交
39
python -m pip install -U https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.0.0-cp36-none-any.whl https://paddle-serving.bj.bcebos.com/whl/paddle_serving_app-0.0.0-py3-none-any.whl
J
Jiawei Wang 已提交
40 41 42
```

## 二、训练模型转Serving模型
W
wangjiawei04 已提交
43

44
在前序文档 [基于Python预测引擎推理](./inference.md) 中,我们提供了如何把训练的checkpoint转换成Paddle模型。Paddle模型通常由一个文件夹构成,内含模型结构描述文件`model`和模型参数文件`params`。Serving模型由两个文件夹构成,用于存放客户端和服务端的配置。
W
wangjiawei04 已提交
45

46
我们以`ch_rec_r34_vd_crnn`模型作为例子,下载链接在:
W
wangjiawei04 已提交
47 48

```
49 50
wget --no-check-certificate https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar
tar xf ch_rec_r34_vd_crnn_infer.tar
W
wangjiawei04 已提交
51
```
52
因此我们按照Serving模型转换教程,运行下列python文件。
W
wangjiawei04 已提交
53
```
54
python tools/inference_to_serving.py --model_dir ch_rec_r34_vd_crnn
W
wangjiawei04 已提交
55
```
56
最终会在`serving_client_dir``serving_server_dir`生成客户端和服务端的模型配置。其中`serving_server_dir``serving_client_dir`的名字可以自定义。最终文件结构如下
W
wangjiawei04 已提交
57 58

```
59
/ch_rec_r34_vd_crnn/
W
wangjiawei04 已提交
60 61 62 63
├── serving_client_dir # 客户端配置文件夹
└── serving_server_dir # 服务端配置文件夹
```

J
Jiawei Wang 已提交
64
## 三、文本检测模型Serving推理
W
wangjiawei04 已提交
65

66
启动服务可以根据实际需求选择启动`标准版`或者`快速版`,两种方式的对比如下表:  
W
wangjiawei04 已提交
67

68 69 70 71
|版本|特点|适用场景|
|-|-|-|
|标准版|稳定性高,分布式部署|适用于吞吐量大,需要跨机房部署的情况|
|快速版|部署方便,预测速度快|适用于对预测速度要求高,迭代速度快的场景,Windows用户只能选择快速版|
W
wangjiawei04 已提交
72

73 74
接下来的命令中,我们会指定快速版和标准版的命令。需要说明的是,标准版只能用Linux平台,快速版可以支持Linux/Windows。
文本检测模型推理,默认使用DB模型的配置参数,识别默认为CRNN。
W
wangjiawei04 已提交
75

76
配置文件在`params.py`中,我们贴出配置部分,如果需要做改动,也在这个文件内部进行修改。
W
wangjiawei04 已提交
77 78

```
79 80 81 82 83
def read_params():
    cfg = Config()
    #use gpu
    cfg.use_gpu = False # 是否使用GPU
    cfg.use_pdserving = True # 是否使用paddleserving,必须为True
W
wangjiawei04 已提交
84

85 86 87
    #params for text detector
    cfg.det_algorithm = "DB" # 检测算法, DB/EAST等
    cfg.det_model_dir = "./det_mv_server/" # 检测算法模型路径
G
grasswolfs 已提交
88
    cfg.det_max_side_len = 960
W
wangjiawei04 已提交
89

90 91 92 93
    #DB params
    cfg.det_db_thresh =0.3
    cfg.det_db_box_thresh =0.5
    cfg.det_db_unclip_ratio =2.0
W
wangjiawei04 已提交
94

95 96 97 98
    #EAST params
    cfg.det_east_score_thresh = 0.8
    cfg.det_east_cover_thresh = 0.1
    cfg.det_east_nms_thresh = 0.2
W
wangjiawei04 已提交
99

100 101 102
    #params for text recognizer
    cfg.rec_algorithm = "CRNN" # 识别算法, CRNN/RARE等
    cfg.rec_model_dir = "./ocr_rec_server/" # 识别算法模型路径
W
wangjiawei04 已提交
103

104 105 106 107
    cfg.rec_image_shape = "3, 32, 320"
    cfg.rec_char_type = 'ch'
    cfg.rec_batch_num = 30
    cfg.max_text_length = 25
W
wangjiawei04 已提交
108

109 110
    cfg.rec_char_dict_path = "./ppocr_keys_v1.txt" # 识别算法字典文件
    cfg.use_space_char = True
W
wangjiawei04 已提交
111

112 113 114 115 116 117 118
    #params for text classifier
    cfg.use_angle_cls = True # 是否启用分类算法
    cfg.cls_model_dir = "./ocr_clas_server/" # 分类算法模型路径
    cfg.cls_image_shape = "3, 48, 192"
    cfg.label_list = ['0', '180']
    cfg.cls_batch_num = 30
    cfg.cls_thresh = 0.9
W
wangjiawei04 已提交
119

120
    return cfg
W
wangjiawei04 已提交
121
```
122
与本地预测不同的是,Serving预测需要一个客户端和一个服务端,因此接下来的教程都是两行代码。
W
wangjiawei04 已提交
123

124
在正式执行服务端启动命令之前,先export PYTHONPATH到工程主目录下。
W
wangjiawei04 已提交
125
```
126 127
export PYTHONPATH=$PWD:$PYTHONPATH
cd deploy/pdserving
W
wangjiawei04 已提交
128
```
J
Jiawei Wang 已提交
129 130 131 132 133 134
为了方便用户复现Demo程序,我们提供了Chinese and English ultra-lightweight OCR model (8.1M)版本的Serving模型
```
wget --no-check-certificate https://paddleocr.bj.bcebos.com/deploy/pdserving/ocr_pdserving_suite.tar.gz
tar xf ocr_pdserving_suite.tar.gz
```

W
wangjiawei04 已提交
135 136 137 138 139 140
### 1. 超轻量中文检测模型推理

超轻量中文检测模型推理,可以执行如下命令启动服务端:

```
#根据环境只需要启动其中一个就可以
141 142
python det_rpc_server.py #标准版,Linux用户
python det_local_server.py #快速版,Windows/Linux用户
W
wangjiawei04 已提交
143 144 145 146 147 148 149 150 151 152 153
```

客户端

```
python det_web_client.py
```


Serving的推测和本地预测不同点在于,客户端发送请求到服务端,服务端需要检测到文字框之后返回框的坐标,此处没有后处理的图片,只能看到坐标值。

J
Jiawei Wang 已提交
154
## 四、文本识别模型Serving推理
W
wangjiawei04 已提交
155 156 157 158 159 160

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

### 1. 超轻量中文识别模型推理

超轻量中文识别模型推理,可以执行如下命令启动服务端:
161
需要注意params.py中的`--use_gpu`的值
W
wangjiawei04 已提交
162 163
```
#根据环境只需要启动其中一个就可以
164 165
python rec_rpc_server.py #标准版,Linux用户
python rec_local_server.py #快速版,Windows/Linux用户
W
wangjiawei04 已提交
166
```
W
fix doc  
wangjiawei04 已提交
167
如果需要使用CPU版本,还需增加 `--use_gpu False`
W
wangjiawei04 已提交
168 169 170 171 172 173 174

客户端

```
python rec_web_client.py
```

W
fix doc  
wangjiawei04 已提交
175
![](../imgs_words/ch/word_4.jpg)
W
wangjiawei04 已提交
176 177 178 179 180 181 182 183 184

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

```
{u'result': {u'score': [u'0.89547354'], u'pred_text': ['实力活力']}}
```



J
Jiawei Wang 已提交
185
## 五、方向分类模型推理
W
wangjiawei04 已提交
186 187 188 189 190 191 192 193

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



### 1. 方向分类模型推理

方向分类模型推理, 可以执行如下命令启动服务端:
194
需要注意params.py中的`--use_gpu`的值
W
wangjiawei04 已提交
195 196
```
#根据环境只需要启动其中一个就可以
197 198
python clas_rpc_server.py #标准版,Linux用户
python clas_local_server.py #快速版,Windows/Linux用户
W
wangjiawei04 已提交
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
```

客户端

```
python rec_web_client.py
```

![](../imgs_words/ch/word_4.jpg)

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

```
{u'result': {u'direction': [u'0'], u'score': [u'0.9999963']}}
```


J
Jiawei Wang 已提交
216
## 六、文本检测、方向分类和文字识别串联Serving推理
W
wangjiawei04 已提交
217 218 219 220 221 222

### 1. 超轻量中文OCR模型推理

在执行预测时,需要通过参数`image_dir`指定单张图像或者图像集合的路径、参数`det_model_dir`,`cls_model_dir``rec_model_dir`分别指定检测,方向分类和识别的inference模型路径。参数`use_angle_cls`用于控制是否启用方向分类模型。与本地预测不同的是,为了减少网络传输耗时,可视化识别结果目前不做处理,用户收到的是推理得到的文字字段。

执行如下命令启动服务端:
223
需要注意params.py中的`--use_gpu`的值
W
wangjiawei04 已提交
224 225 226
```
#标准版,Linux用户
#GPU用户
W
wangjiawei04 已提交
227 228
python -m paddle_serving_server_gpu.serve --model det_infer_server --port 9293 --gpu_id 0
python -m paddle_serving_server_gpu.serve --model cls_infer_server --port 9294 --gpu_id 0
G
grasswolfs 已提交
229
python ocr_rpc_server.py
W
wangjiawei04 已提交
230
#CPU用户
W
wangjiawei04 已提交
231 232
python -m paddle_serving_server.serve --model det_infer_server --port 9293
python -m paddle_serving_server.serve --model cls_infer_server --port 9294
233
python ocr_rpc_server.py
W
wangjiawei04 已提交
234 235

#快速版,Windows/Linux用户
G
grasswolfs 已提交
236
python ocr_local_server.py
W
wangjiawei04 已提交
237 238 239 240 241 242 243
```

客户端

```
python rec_web_client.py
```