readme.md 7.6 KB
Newer Older
T
tink2123 已提交
1
# Paddle2ONNX model transformation and prediction
T
tink2123 已提交
2

T
tink2123 已提交
3
This chapter describes how the PaddleOCR model is converted into an ONNX model and predicted based on the ONNXRuntime engine.
T
tink2123 已提交
4

T
tink2123 已提交
5
## 1. Environment preparation
T
tink2123 已提交
6

T
tink2123 已提交
7
Need to prepare PaddleOCR, Paddle2ONNX model conversion environment, and ONNXRuntime prediction environment
H
huangshenghui 已提交
8 9 10

###  PaddleOCR

T
tink2123 已提交
11
Clone the PaddleOCR warehouse, use the release/2.6 branch, and install it.
H
huangshenghui 已提交
12 13

```
T
tink2123 已提交
14
git clone  -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
H
huangshenghui 已提交
15 16
cd PaddleOCR && python3.7 setup.py install
```
T
tink2123 已提交
17 18

###  Paddle2ONNX
T
tink2123 已提交
19

T
tink2123 已提交
20 21
Paddle2ONNX supports converting the PaddlePaddle model format to the ONNX model format. The operator currently supports exporting ONNX Opset 9~11 stably, and some Paddle operators support lower ONNX Opset conversion.
For more details, please refer to [Paddle2ONNX](https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_en.md)
T
tink2123 已提交
22

T
tink2123 已提交
23 24

- install Paddle2ONNX
T
tink2123 已提交
25 26 27 28
```
python3.7 -m pip install paddle2onnx
```

T
tink2123 已提交
29
- install ONNXRuntime
T
tink2123 已提交
30
```
T
tink2123 已提交
31
# It is recommended to install version 1.9.0, and the version number can be changed according to the environment
32
python3.7 -m pip install onnxruntime==1.9.0
T
tink2123 已提交
33
```
T
tink2123 已提交
34

T
tink2123 已提交
35
## 2. Model conversion
T
tink2123 已提交
36 37


T
tink2123 已提交
38
- Paddle model download
T
tink2123 已提交
39

T
tink2123 已提交
40 41
There are two ways to obtain the Paddle model: Download the prediction model provided by PaddleOCR in [model_list](../../doc/doc_en/models_list_en.md);
Refer to [Model Export Instructions](../../doc/doc_en/inference_en.md#1-convert-training-model-to-inference-model) to convert the trained weights to inference_model.
T
tink2123 已提交
42

T
tink2123 已提交
43
Take the PP-OCRv3 detection, recognition, and classification model as an example:
T
tink2123 已提交
44 45

```
T
tink2123 已提交
46 47
wget -nc -P ./inference https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar
cd ./inference && tar xf en_PP-OCRv3_det_infer.tar && cd ..
H
huangshenghui 已提交
48

T
tink2123 已提交
49 50
wget -nc  -P ./inference https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tar
cd ./inference && tar xf en_PP-OCRv3_rec_infer.tar && cd ..
H
huangshenghui 已提交
51 52 53

wget -nc  -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
cd ./inference && tar xf ch_ppocr_mobile_v2.0_cls_infer.tar && cd ..
T
tink2123 已提交
54 55
```

T
tink2123 已提交
56
- convert model
T
tink2123 已提交
57

T
tink2123 已提交
58
Convert Paddle inference model to ONNX model format using Paddle2ONNX:
T
tink2123 已提交
59 60

```
T
tink2123 已提交
61
paddle2onnx --model_dir ./inference/en_PP-OCRv3_det_infer \
H
huangshenghui 已提交
62 63 64 65 66 67 68
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ./inference/det_onnx/model.onnx \
--opset_version 10 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True

T
tink2123 已提交
69
paddle2onnx --model_dir ./inference/en_PP-OCRv3_rec_infer \
H
huangshenghui 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ./inference/rec_onnx/model.onnx \
--opset_version 10 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True

paddle2onnx --model_dir ./inference/ch_ppocr_mobile_v2.0_cls_infer \
--model_filename ch_ppocr_mobile_v2.0_cls_infer/inference.pdmodel \
--params_filename ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams \
--save_file ./inferencecls_onnx/model.onnx \
--opset_version 10 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True
T
tink2123 已提交
84
```
T
tink2123 已提交
85
After execution, the ONNX model will be saved in `./inference/det_onnx/`, `./inference/rec_onnx/`, `./inference/cls_onnx/` paths respectively
T
tink2123 已提交
86

T
tink2123 已提交
87 88 89
* Note: For the OCR model, the conversion process must be in the form of dynamic shape, that is, add the option --input_shape_dict="{'x': [-1, 3, -1, -1]}", otherwise the prediction result may be the same as Predicting directly with Paddle is slightly different.
  In addition, the following models do not currently support conversion to ONNX models:
  NRTR, SAR, RARE, SRN
T
tink2123 已提交
90

T
tink2123 已提交
91
## 3. prediction
H
huangshenghui 已提交
92

T
tink2123 已提交
93
Take the English OCR model as an example, use **ONNXRuntime** to predict and execute the following commands:
H
huangshenghui 已提交
94 95 96 97 98 99

```
python3.7 tools/infer/predict_system.py --use_gpu=False --use_onnx=True \
--det_model_dir=./inference/det_onnx/model.onnx  \
--rec_model_dir=./inference/rec_onnx/model.onnx  \
--cls_model_dir=./inference/cls_onnx/model.onnx  \
T
tink2123 已提交
100 101
--image_dir=doc/imgs_en/img_12.jpg \
--rec_char_dict_path=ppocr/utils/en_dict.txt
H
huangshenghui 已提交
102 103
```

T
tink2123 已提交
104
Taking the English OCR model as an example, use **Paddle Inference** to predict and execute the following commands:
H
huangshenghui 已提交
105 106 107 108

```
python3.7 tools/infer/predict_system.py --use_gpu=False \
--cls_model_dir=./inference/ch_ppocr_mobile_v2.0_cls_infer \
T
tink2123 已提交
109 110 111 112
--rec_model_dir=./inference/en_PP-OCRv3_rec_infer \
--det_model_dir=./inference/en_PP-OCRv3_det_infer \
--image_dir=doc/imgs_en/img_12.jpg \
--rec_char_dict_path=ppocr/utils/en_dict.txt
H
huangshenghui 已提交
113 114 115
```


T
tink2123 已提交
116
After executing the command, the predicted identification information will be printed out in the terminal, and the visualization results will be saved under `./inference_results/`.
H
huangshenghui 已提交
117

T
tink2123 已提交
118
ONNXRuntime result:
H
huangshenghui 已提交
119 120

<div align="center">
T
tink2123 已提交
121
    <img src="../../doc/imgs_results/multi_lang/img_12.jpg" width=800">
H
huangshenghui 已提交
122 123
</div>

T
tink2123 已提交
124
Paddle Inference result:
H
huangshenghui 已提交
125 126

<div align="center">
T
tink2123 已提交
127
    <img src="../../doc/imgs_results/multi_lang/img_12.jpg" width=800">
H
huangshenghui 已提交
128
</div>
T
tink2123 已提交
129 130


T
tink2123 已提交
131
Using ONNXRuntime to predict, terminal output:
T
tink2123 已提交
132
```
T
tink2123 已提交
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
[2022/10/10 12:06:28] ppocr DEBUG: dt_boxes num : 11, elapse : 0.3568880558013916
[2022/10/10 12:06:31] ppocr DEBUG: rec_res num  : 11, elapse : 2.6445000171661377
[2022/10/10 12:06:31] ppocr DEBUG: 0  Predict time of doc/imgs_en/img_12.jpg: 3.021s
[2022/10/10 12:06:31] ppocr DEBUG: ACKNOWLEDGEMENTS, 0.997
[2022/10/10 12:06:31] ppocr DEBUG: We would like to thank all the designers and, 0.976
[2022/10/10 12:06:31] ppocr DEBUG: contributors who have been involved in the, 0.979
[2022/10/10 12:06:31] ppocr DEBUG: production of this book; their contributions, 0.989
[2022/10/10 12:06:31] ppocr DEBUG: have been indispensable to its creation. We, 0.956
[2022/10/10 12:06:31] ppocr DEBUG: would also like to express our gratitude to all, 0.991
[2022/10/10 12:06:31] ppocr DEBUG: the producers for their invaluable opinions, 0.978
[2022/10/10 12:06:31] ppocr DEBUG: and assistance throughout this project. And to, 0.988
[2022/10/10 12:06:31] ppocr DEBUG: the many others whose names are not credited, 0.958
[2022/10/10 12:06:31] ppocr DEBUG: but have made specific input in this book, we, 0.970
[2022/10/10 12:06:31] ppocr DEBUG: thank you for your continuous support., 0.998
[2022/10/10 12:06:31] ppocr DEBUG: The visualized image saved in ./inference_results/img_12.jpg
[2022/10/10 12:06:31] ppocr INFO: The predict total time is 3.2482550144195557
T
tink2123 已提交
149 150
```

T
tink2123 已提交
151
Using Paddle Inference to predict, terminal output:
T
tink2123 已提交
152 153

```
T
tink2123 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
[2022/10/10 12:06:28] ppocr DEBUG: dt_boxes num : 11, elapse : 0.3568880558013916
[2022/10/10 12:06:31] ppocr DEBUG: rec_res num  : 11, elapse : 2.6445000171661377
[2022/10/10 12:06:31] ppocr DEBUG: 0  Predict time of doc/imgs_en/img_12.jpg: 3.021s
[2022/10/10 12:06:31] ppocr DEBUG: ACKNOWLEDGEMENTS, 0.997
[2022/10/10 12:06:31] ppocr DEBUG: We would like to thank all the designers and, 0.976
[2022/10/10 12:06:31] ppocr DEBUG: contributors who have been involved in the, 0.979
[2022/10/10 12:06:31] ppocr DEBUG: production of this book; their contributions, 0.989
[2022/10/10 12:06:31] ppocr DEBUG: have been indispensable to its creation. We, 0.956
[2022/10/10 12:06:31] ppocr DEBUG: would also like to express our gratitude to all, 0.991
[2022/10/10 12:06:31] ppocr DEBUG: the producers for their invaluable opinions, 0.978
[2022/10/10 12:06:31] ppocr DEBUG: and assistance throughout this project. And to, 0.988
[2022/10/10 12:06:31] ppocr DEBUG: the many others whose names are not credited, 0.958
[2022/10/10 12:06:31] ppocr DEBUG: but have made specific input in this book, we, 0.970
[2022/10/10 12:06:31] ppocr DEBUG: thank you for your continuous support., 0.998
[2022/10/10 12:06:31] ppocr DEBUG: The visualized image saved in ./inference_results/img_12.jpg
[2022/10/10 12:06:31] ppocr INFO: The predict total time is 3.2482550144195557
T
tink2123 已提交
170
```