[doc] fixing broken links and updating paddle2onnx usage descriptions (#12749)
* [docs]:添加了对于Paddle2ONNX模型转化中选项--input_shape_dict的解释说明与解决方法 * Update readme_ch.md [docs]:使用onnxsim修改input_shape可以兼容paddlepaddle现版本 * Update readme_ch.md 修改了不恰当的相关描述 * Rename inference_ch.md to inference.md 修改了中文版模型导出说明inference_ch.md命名为inference.md * Update readme_ch.md 修改不恰当表述 * Update readme_ch.md 修改所有python3.7为python3 * update readme --------- Co-authored-by: Wang Xin <xinwang614@gmail.com>pull/12730/head^2
parent
86a447de9f
commit
335c5c247f
|
@ -8,11 +8,11 @@ Need to prepare PaddleOCR, Paddle2ONNX model conversion environment, and ONNXRun
|
|||
|
||||
### PaddleOCR
|
||||
|
||||
Clone the PaddleOCR repository, use the release/2.6 branch, and install it.
|
||||
Clone the PaddleOCR repository, use the main branch, and install it.
|
||||
|
||||
```
|
||||
git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
|
||||
cd PaddleOCR && python3.7 setup.py install
|
||||
git clone -b main https://github.com/PaddlePaddle/PaddleOCR.git
|
||||
cd PaddleOCR && python3 pip install -e .
|
||||
```
|
||||
|
||||
### Paddle2ONNX
|
||||
|
@ -23,13 +23,12 @@ For more details, please refer to [Paddle2ONNX](https://github.com/PaddlePaddle/
|
|||
|
||||
- install Paddle2ONNX
|
||||
```
|
||||
python3.7 -m pip install paddle2onnx
|
||||
python3 -m pip install paddle2onnx
|
||||
```
|
||||
|
||||
- install ONNXRuntime
|
||||
```
|
||||
# It is recommended to install version 1.9.0, and the version number can be changed according to the environment
|
||||
python3.7 -m pip install onnxruntime==1.9.0
|
||||
python3 -m pip install onnxruntime
|
||||
```
|
||||
|
||||
## 2. Model conversion
|
||||
|
@ -62,32 +61,37 @@ paddle2onnx --model_dir ./inference/en_PP-OCRv3_det_infer \
|
|||
--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]}" \
|
||||
--opset_version 11 \
|
||||
--enable_onnx_checker True
|
||||
|
||||
paddle2onnx --model_dir ./inference/en_PP-OCRv3_rec_infer \
|
||||
--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]}" \
|
||||
--opset_version 11 \
|
||||
--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]}" \
|
||||
--model_filename inference.pdmodel \
|
||||
--params_filename inference.pdiparams \
|
||||
--save_file ./inference/cls_onnx/model.onnx \
|
||||
--opset_version 11 \
|
||||
--enable_onnx_checker True
|
||||
```
|
||||
After execution, the ONNX model will be saved in `./inference/det_onnx/`, `./inference/rec_onnx/`, `./inference/cls_onnx/` paths respectively
|
||||
|
||||
* 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.
|
||||
* Note: For the OCR model, the conversion process must be in the form of dynamic shape, 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
|
||||
|
||||
* Note: The current Paddle2ONNX version (v1.2.3) now supports dynamic shapes by default, i.e., float32[p2o.DynamicDimension.0,3,p2o.DynamicDimension.1,p2o.DynamicDimension.2]. The `--input_shape_dict` option has been deprecated. If you need to adjust the shape, you can use the following command to adjust the input shape of the Paddle model.
|
||||
|
||||
```
|
||||
python3 -m paddle2onnx.optimize --input_model inference/det_onnx/model.onnx \
|
||||
--output_model inference/det_onnx/model.onnx \
|
||||
--input_shape_dict "{'x': [-1,3,-1,-1]}"
|
||||
```
|
||||
|
||||
## 3. prediction
|
||||
|
||||
Take the English OCR model as an example, use **ONNXRuntime** to predict and execute the following commands:
|
||||
|
|
|
@ -8,27 +8,26 @@
|
|||
|
||||
### PaddleOCR
|
||||
|
||||
克隆PaddleOCR的仓库,使用release/2.4分支,并进行安装,由于PaddleOCR仓库比较大,git clone速度比较慢,所以本教程已下载
|
||||
克隆PaddleOCR的仓库,使用 main 分支,并进行安装,由于 PaddleOCR 仓库比较大,git clone 速度比较慢,所以本教程已下载
|
||||
|
||||
```
|
||||
git clone -b release/2.4 https://github.com/PaddlePaddle/PaddleOCR.git
|
||||
cd PaddleOCR && python3.7 setup.py install
|
||||
git clone -b main https://github.com/PaddlePaddle/PaddleOCR.git
|
||||
cd PaddleOCR && python3 -m pip install -e .
|
||||
```
|
||||
|
||||
### Paddle2ONNX
|
||||
|
||||
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算子目前稳定支持导出 ONNX Opset 9~11,部分Paddle算子支持更低的ONNX Opset转换。
|
||||
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算子目前稳定支持导出 ONNX Opset 9~18,部分Paddle算子支持更低的ONNX Opset转换。
|
||||
更多细节可参考 [Paddle2ONNX](https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md)
|
||||
|
||||
- 安装 Paddle2ONNX
|
||||
```
|
||||
python3.7 -m pip install paddle2onnx
|
||||
python3 -m pip install paddle2onnx
|
||||
```
|
||||
|
||||
- 安装 ONNXRuntime
|
||||
```
|
||||
# 建议安装 1.9.0 版本,可根据环境更换版本号
|
||||
python3.7 -m pip install onnxruntime==1.9.0
|
||||
python3 -m pip install onnxruntime
|
||||
```
|
||||
|
||||
## 2. 模型转换
|
||||
|
@ -61,39 +60,44 @@ paddle2onnx --model_dir ./inference/ch_PP-OCRv3_det_infer \
|
|||
--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]}" \
|
||||
--opset_version 11 \
|
||||
--enable_onnx_checker True
|
||||
|
||||
paddle2onnx --model_dir ./inference/ch_PP-OCRv3_rec_infer \
|
||||
--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]}" \
|
||||
--opset_version 11 \
|
||||
--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]}" \
|
||||
--model_filename inference.pdmodel \
|
||||
--params_filename inference.pdiparams \
|
||||
--save_file ./inference/cls_onnx/model.onnx \
|
||||
--opset_version 11 \
|
||||
--enable_onnx_checker True
|
||||
```
|
||||
|
||||
执行完毕后,ONNX 模型会被分别保存在 `./inference/det_onnx/`,`./inference/rec_onnx/`,`./inference/cls_onnx/`路径下
|
||||
|
||||
* 注意:对于OCR模型,转化过程中必须采用动态shape的形式,即加入选项--input_shape_dict="{'x': [-1, 3, -1, -1]}",否则预测结果可能与直接使用Paddle预测有细微不同。
|
||||
* 注意:对于OCR模型,转化过程中必须采用动态shape的形式,否则预测结果可能与直接使用Paddle预测有细微不同。
|
||||
另外,以下几个模型暂不支持转换为 ONNX 模型:
|
||||
NRTR、SAR、RARE、SRN
|
||||
|
||||
* 注意:[当前Paddle2ONNX版本(v1.2.3)](https://github.com/PaddlePaddle/Paddle2ONNX/releases/tag/v1.2.3)现已默认支持动态shape,即 `float32[p2o.DynamicDimension.0,3,p2o.DynamicDimension.1,p2o.DynamicDimension.2]`,选项 `--input_shape_dict` 已废弃。如果有shape调整需求可使用如下命令进行Paddle模型输入shape调整。
|
||||
|
||||
```
|
||||
python3 -m paddle2onnx.optimize --input_model inference/det_onnx/model.onnx \
|
||||
--output_model inference/det_onnx/model.onnx \
|
||||
--input_shape_dict "{'x': [-1,3,-1,-1]}"
|
||||
```
|
||||
|
||||
## 3. 推理预测
|
||||
|
||||
以中文OCR模型为例,使用 ONNXRuntime 预测可执行如下命令:
|
||||
|
||||
```
|
||||
python3.7 tools/infer/predict_system.py --use_gpu=False --use_onnx=True \
|
||||
python3 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 \
|
||||
|
@ -103,7 +107,7 @@ python3.7 tools/infer/predict_system.py --use_gpu=False --use_onnx=True \
|
|||
以中文OCR模型为例,使用 Paddle Inference 预测可执行如下命令:
|
||||
|
||||
```
|
||||
python3.7 tools/infer/predict_system.py --use_gpu=False \
|
||||
python3 tools/infer/predict_system.py --use_gpu=False \
|
||||
--cls_model_dir=./inference/ch_ppocr_mobile_v2.0_cls_infer \
|
||||
--rec_model_dir=./inference/ch_PP-OCRv3_rec_infer \
|
||||
--det_model_dir=./inference/ch_PP-OCRv3_det_infer \
|
||||
|
|
|
@ -0,0 +1,405 @@
|
|||
|
||||
# 基于Python预测引擎的推理
|
||||
|
||||
推理模型(通过 paddle.jit.save 保存的模型)一般是模型训练完成后保存的固化模型,多用于部署中的预测。
|
||||
|
||||
训练过程中保存的模型是检查点模型,保存的是模型的参数,多用于恢复训练。
|
||||
|
||||
与检查点模型相比,推理模型会额外保存模型的结构信息。因此,它更容易部署,因为模型结构和模型参数已经固化在推理模型文件中,适合与实际系统集成。更多细节请参考文档[Classification Framework](https://github.com/PaddlePaddle/PaddleClas/blob/release%2F2.0/docs/zh_CN/extension/paddle_mobile_inference.md).
|
||||
|
||||
接下来,我们首先介绍如何将训练好的模型转换为推理模型,然后介绍基于推理模型的文本检测、文本识别、角度分类及其串联。
|
||||
|
||||
- [基于Python预测引擎的推理](#基于python预测引擎的推理)
|
||||
- [1. 将训练模型转换为推理模型](#1-将训练模型转换为推理模型)
|
||||
- [1.1 将检测模型转换为推理模型](#11-将检测模型转换为推理模型)
|
||||
- [1.2 将识别模型转换为推理模型](#12-将识别模型转换为推理模型)
|
||||
- [1.3 将角度分类模型转换为推理模型](#13-将角度分类模型转换为推理模型)
|
||||
- [2. 文本检测模型推理](#2-文本检测模型推理)
|
||||
- [2.1 轻量级中文检测模型推理](#21-轻量级中文检测模型推理)
|
||||
- [2.2 DB文本检测模型推理](#22-db文本检测模型推理)
|
||||
- [2.3 EAST文本检测模型推理](#23-east文本检测模型推理)
|
||||
- [2.4 Sast文本检测模型推理](#24-sast文本检测模型推理)
|
||||
- [(1). 四边形文本检测模型 (ICDAR2015)](#1-四边形文本检测模型-icdar2015)
|
||||
- [(2). 曲线文本检测模型 (Total-Text)](#2-曲线文本检测模型-total-text)
|
||||
- [3. 文本识别模型推理](#3-文本识别模型推理)
|
||||
- [3.1 轻量级中文文本识别模型推理](#31-轻量级中文文本识别模型推理)
|
||||
- [3.2 基于CTC的文本识别模型推理](#32-基于ctc的文本识别模型推理)
|
||||
- [3.3 基于SRN的文本识别模型推理](#33-基于srn的文本识别模型推理)
|
||||
- [3.4 使用自定义字符字典的文本识别模型推理](#34-使用自定义字符字典的文本识别模型推理)
|
||||
- [3.5 多语言模型推理](#35-多语言模型推理)
|
||||
- [4. 角度分类模型推理](#4-角度分类模型推理)
|
||||
- [5. 文本检测、角度分类与识别推理串联](#5-文本检测角度分类与识别推理串联)
|
||||
- [5.1 轻量级中文模型](#51-轻量级中文模型)
|
||||
- [5.2 其他模型](#52-其他模型)
|
||||
|
||||
<a name="CONVERT"></a>
|
||||
## 1. 将训练模型转换为推理模型
|
||||
<a name="Convert_detection_model"></a>
|
||||
|
||||
### 1.1 将检测模型转换为推理模型
|
||||
|
||||
下载轻量级中文检测模型:
|
||||
```
|
||||
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/
|
||||
```
|
||||
|
||||
上述模型是使用 MobileNetV3 作为backbone训练的 DB 算法。要将训练好的模型转换为推理模型,只需运行以下命令:
|
||||
```
|
||||
# -c Set the training algorithm yml configuration file
|
||||
# -o Set optional parameters
|
||||
# Global.pretrained_model parameter Set the training model address to be converted without adding the file suffix .pdmodel, .pdopt or .pdparams.
|
||||
# Global.save_inference_dir Set the address where the converted model will be saved.
|
||||
|
||||
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.save_inference_dir=./inference/det_db/
|
||||
```
|
||||
|
||||
在转换为推理模型时,使用的配置文件与训练时使用的配置文件相同。此外,还需要在配置文件中设置 `Global.pretrained_model` 参数。
|
||||
转换成功后,模型保存目录中会有三个文件:
|
||||
```
|
||||
inference/det_db/
|
||||
├── inference.pdiparams # 检测推理模型的参数文件
|
||||
├── inference.pdiparams.info # 检测推理模型的参数信息文件,可以忽略
|
||||
└── inference.pdmodel # 检测推理模型的程序文件
|
||||
```
|
||||
|
||||
<a name="Convert_recognition_model"></a>
|
||||
### 1.2 将识别模型转换为推理模型
|
||||
|
||||
下载轻量级中文识别模型:
|
||||
```
|
||||
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/
|
||||
```
|
||||
|
||||
识别模型的转换方式与检测模型相同,如下所示:
|
||||
```
|
||||
# -c 设置训练算法的 yml 配置文件
|
||||
# -o 设置可选参数
|
||||
# Global.pretrained_model 参数设置要转换的训练模型地址,不需要添加文件后缀 .pdmodel, .pdopt 或 .pdparams。
|
||||
# Global.save_inference_dir 设置转换后模型保存的地址。
|
||||
|
||||
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.save_inference_dir=./inference/rec_crnn/
|
||||
```
|
||||
|
||||
如果您使用自己的数据集训练了一个模型,并且使用了不同的字典文件,请确保在配置文件中将 `character_dict_path` 修改为您的字典文件路径。
|
||||
|
||||
转换成功后,模型保存目录中会有三个文件:
|
||||
```
|
||||
inference/det_db/
|
||||
├── inference.pdiparams # The parameter file of recognition inference model
|
||||
├── inference.pdiparams.info # The parameter information of recognition inference model, which can be ignored
|
||||
└── inference.pdmodel # The program file of recognition model
|
||||
```
|
||||
|
||||
<a name="Convert_angle_class_model"></a>
|
||||
### 1.3 将角度分类模型转换为推理模型
|
||||
|
||||
下载角度分类模型:
|
||||
```
|
||||
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/
|
||||
```
|
||||
|
||||
角度分类模型的转换方式与检测模型相同,如下所示:
|
||||
```
|
||||
# -c Set the training algorithm yml configuration file
|
||||
# -o Set optional parameters
|
||||
# Global.pretrained_model parameter Set the training model address to be converted without adding the file suffix .pdmodel, .pdopt or .pdparams.
|
||||
# Global.save_inference_dir Set the address where the converted model will be saved.
|
||||
|
||||
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.save_inference_dir=./inference/cls/
|
||||
```
|
||||
|
||||
转换成功后,目录中会有两个文件:
|
||||
```
|
||||
inference/det_db/
|
||||
├── inference.pdiparams # The parameter file of angle class inference model
|
||||
├── inference.pdiparams.info # The parameter information of angle class inference model, which can be ignored
|
||||
└── inference.pdmodel # The program file of angle class model
|
||||
```
|
||||
|
||||
|
||||
<a name="DETECTION_MODEL_INFERENCE"></a>
|
||||
## 2. 文本检测模型推理
|
||||
|
||||
以下将介绍轻量级中文检测模型推理、DB文本检测模型推理和EAST文本检测模型推理。默认配置基于DB文本检测模型的推理设置。
|
||||
由于EAST和DB算法有很大的不同,在推理时,需要**通过传入相应的参数来适配EAST文本检测算法**。
|
||||
|
||||
<a name="LIGHTWEIGHT_DETECTION"></a>
|
||||
### 2.1 轻量级中文检测模型推理
|
||||
|
||||
对于轻量级中文检测模型推理,可以执行以下命令:
|
||||
|
||||
```
|
||||
# download DB text detection inference model
|
||||
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
|
||||
# predict
|
||||
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/"
|
||||
```
|
||||
|
||||
可视化的文本检测结果默认保存在 `./inference_results` 文件夹中,结果文件的名称以 `det_res` 为前缀。结果示例如下:
|
||||
|
||||

|
||||
|
||||
可以使用参数 `limit_type` 和 `det_limit_side_len` 来限制输入图像的大小,
|
||||
`limit_type` 的可选参数是 [`max`, `min`],
|
||||
而 `det_limit_side_len` 是一个正整数,通常设置为32的倍数,例如960。
|
||||
|
||||
这些参数的默认设置是 `limit_type='max', det_limit_side_len=960`。表示网络输入图像的最长边不能超过960,
|
||||
如果超过这个值,图像将按相同比例调整尺寸,以确保最长边为 `det_limit_side_len`。
|
||||
设置为 `limit_type='min', det_limit_side_len=960`,则表示图像的最短边被限制为960。
|
||||
|
||||
如果输入图片的分辨率较大,并且希望使用更大的分辨率进行预测,可以将 `det_limit_side_len` 设置为所需的值,例如1216:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/det_db/" --det_limit_type=max --det_limit_side_len=1216
|
||||
```
|
||||
|
||||
如果希望使用CPU进行预测,请执行以下命令:
|
||||
```
|
||||
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/det_db/" --use_gpu=False
|
||||
```
|
||||
|
||||
<a name="DB_DETECTION"></a>
|
||||
### 2.2 DB文本检测模型推理
|
||||
|
||||
首先,将DB文本检测训练过程中保存的模型转换为推理模型。以基于Resnet50_vd骨干网络并在ICDAR2015英文数据集上训练的模型为例([模型下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_db_v2.0_train.tar)),可以使用以下命令进行转换:
|
||||
|
||||
```
|
||||
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.save_inference_dir=./inference/det_db
|
||||
```
|
||||
|
||||
DB文本检测模型推理,可以执行以下命令:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_db/"
|
||||
```
|
||||
|
||||
可视化的文本检测结果默认保存在 `./inference_results` 文件夹中,结果文件的名称以 `det_res` 为前缀。结果示例如下:
|
||||
|
||||

|
||||
|
||||
**注意**:由于ICDAR2015数据集只有1000张训练图像,主要针对英文场景,上述模型在中文文本图像上的检测结果非常差。
|
||||
|
||||
<a name="EAST_DETECTION"></a>
|
||||
|
||||
### 2.3 EAST文本检测模型推理
|
||||
|
||||
首先,将EAST文本检测训练过程中保存的模型转换为推理模型。以基于Resnet50_vd骨干网络并在ICDAR2015英文数据集上训练的模型为例([模型下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_east_v2.0_train.tar)),可以使用以下命令进行转换:
|
||||
|
||||
```
|
||||
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.save_inference_dir=./inference/det_east
|
||||
```
|
||||
**对于EAST文本检测模型推理,需要设置参数 `--det_algorithm="EAST"`**,运行以下命令:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST"
|
||||
```
|
||||
|
||||
可视化的文本检测结果默认保存在 `./inference_results` 文件夹中,结果文件的名称以 `det_res` 为前缀。结果示例如下:
|
||||
|
||||

|
||||
|
||||
**注意**:EAST后处理的局部感知NMS有两个版本:Python和C++。C++版本的速度明显快于Python版本。由于C++版本NMS的编译版本问题,只有在Python 3.5环境中才会调用C++版本NMS,在其他情况下将调用Python版本NMS。
|
||||
|
||||
<a name="SAST_DETECTION"></a>
|
||||
### 2.4 Sast文本检测模型推理
|
||||
|
||||
#### (1). 四边形文本检测模型(ICDAR2015)
|
||||
|
||||
首先,将SAST文本检测训练过程中保存的模型转换为推理模型。以基于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/det/det_r50_vd_sast_icdar15.yml -o Global.pretrained_model=./det_r50_vd_sast_icdar15_v2.0_train/best_accuracy Global.save_inference_dir=./inference/det_sast_ic15
|
||||
```
|
||||
|
||||
**对于SAST四边形文本检测模型推理,需要设置参数 `--det_algorithm="SAST"`**,运行以下命令:
|
||||
|
||||
```
|
||||
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` 为前缀。结果示例如下:
|
||||
|
||||

|
||||
|
||||
#### (2). 曲线文本检测模型(Total-Text)
|
||||
|
||||
首先,将SAST文本检测训练过程中保存的模型转换为推理模型。以基于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/det/det_r50_vd_sast_totaltext.yml -o Global.pretrained_model=./det_r50_vd_sast_totaltext_v2.0_train/best_accuracy Global.save_inference_dir=./inference/det_sast_tt
|
||||
```
|
||||
|
||||
对于SAST曲线文本检测模型推理,需要设置参数 `--det_algorithm="SAST"` 和 `--det_sast_polygon=True`,运行以下命令:
|
||||
|
||||
```
|
||||
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` 为前缀。结果示例如下:
|
||||
|
||||

|
||||
|
||||
**注意**:SAST后处理的局部感知NMS有两个版本:Python和C++。C++版本的速度明显快于Python版本。由于C++版本NMS的编译版本问题,只有在Python 3.5环境中才会调用C++版本NMS,在其他情况下将调用Python版本NMS。
|
||||
|
||||
<a name="RECOGNITION_MODEL_INFERENCE"></a>
|
||||
## 3. 文本识别模型推理
|
||||
|
||||
以下将介绍轻量级中文识别模型推理、其他基于CTC和Attention的文本识别模型推理。对于中文文本识别,建议选择基于CTC损失的识别模型。实践中也发现,基于Attention损失的模型效果不如基于CTC损失的模型。此外,如果在训练过程中修改了字符字典,请确保在推理过程中使用相同的字符集。详情请见下文。
|
||||
|
||||
<a name="LIGHTWEIGHT_RECOGNITION"></a>
|
||||
### 3.1 轻量级中文文本识别模型推理
|
||||
|
||||
对于轻量级中文识别模型推理,可以执行以下命令:
|
||||
|
||||
```
|
||||
# download CRNN text recognition inference model
|
||||
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_en/word_10.png" --rec_model_dir="ch_ppocr_mobile_v2.0_rec_infer"
|
||||
```
|
||||
|
||||

|
||||
|
||||
执行命令后,上述图像的预测结果(识别的文本和分数)将打印在屏幕上。
|
||||
|
||||
```bash
|
||||
Predicts of ./doc/imgs_words_en/word_10.png:('PAIN', 0.9897658)
|
||||
```
|
||||
|
||||
<a name="CTC-BASED_RECOGNITION"></a>
|
||||
### 3.2 基于CTC的文本识别模型推理
|
||||
|
||||
以CRNN为例,介绍基于CTC损失的识别模型推理。Rosetta和Star-Net的使用方式类似,无需设置识别算法参数 `rec_algorithm`。
|
||||
|
||||
首先,将CRNN文本识别训练过程中保存的模型转换为推理模型。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText(两个英文文本识别合成数据集)进行训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar))。可以按如下方式进行转换:
|
||||
|
||||
```
|
||||
python3 tools/export_model.py -c configs/det/rec_r34_vd_none_bilstm_ctc.yml -o Global.pretrained_model=./rec_r34_vd_none_bilstm_ctc_v2.0_train/best_accuracy Global.save_inference_dir=./inference/rec_crnn
|
||||
```
|
||||
|
||||
对于CRNN文本识别模型推理,执行以下命令:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_dict_path="./ppocr/utils/ic15_dict.txt"
|
||||
```
|
||||
|
||||

|
||||
|
||||
执行命令后,上述图像的识别结果如下:
|
||||
|
||||
```bash
|
||||
Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073)
|
||||
```
|
||||
|
||||
**注意**:由于上述模型参考了 [DTRB](https://arxiv.org/abs/1904.01906) 文本识别的训练和评估过程,与轻量级中文识别模型的训练在两个方面有所不同:
|
||||
|
||||
- **训练时使用的图像分辨率不同**:上述模型训练时使用的图像分辨率为 [3,32,100],而我们的中文模型训练时,为了确保对长文本的识别效果,使用的图像分辨率为 [3, 32, 320]。推理阶段的默认形状参数是训练阶段使用的图像分辨率,即 [3, 32, 320]。因此,在此处运行上述英文模型的推理时,需要通过参数 `rec_image_shape` 设置识别图像的形状。
|
||||
|
||||
- **字符列表**:DTRB 论文中的实验仅针对 26 个小写英文字母和 10 个数字,共 36 个字符。所有大写和小写字符都转换为小写字符,不在上述列表中的字符被忽略并视为空格。因此,这里不使用字符字典文件,而是通过以下命令生成字典。
|
||||
|
||||
```
|
||||
self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz"
|
||||
dict_character = list(self.character_str)
|
||||
```
|
||||
|
||||
<a name="SRN-BASED_RECOGNITION"></a>
|
||||
### 3.3 基于SRN的文本识别模型推理
|
||||
|
||||
基于SRN的识别模型需要额外设置识别算法参数 `--rec_algorithm="SRN"`。同时,需要确保预测形状与训练一致,例如:`--rec_image_shape="1, 64, 256"`。
|
||||
|
||||
```
|
||||
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_dict_path="./ppocr/utils/ic15_dict.txt" \
|
||||
--rec_algorithm="SRN"
|
||||
```
|
||||
|
||||
<a name="USING_CUSTOM_CHARACTERS"></a>
|
||||
### 3.4 使用自定义字符字典的文本识别模型推理
|
||||
|
||||
如果在训练过程中修改了文本字典,在使用推理模型进行预测时,需要通过 `--rec_char_dict_path` 指定字典路径。
|
||||
|
||||
```
|
||||
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_dict_path="your text dict path"
|
||||
```
|
||||
|
||||
<a name="MULTILINGUAL_MODEL_INFERENCE"></a>
|
||||
|
||||
### 3.5 多语言模型推理
|
||||
|
||||
如果需要预测其他语言的模型,在使用推理模型进行预测时,需要通过 `--rec_char_dict_path` 指定字典路径。同时,为了获得正确的可视化结果,需要通过 `--vis_font_path` 指定可视化字体路径。在 `doc/fonts` 路径下默认提供了一些小语种字体,例如韩文识别:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your inference model" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/fonts/korean.ttf"
|
||||
```
|
||||

|
||||
|
||||
执行命令后,上述图像的预测结果是:
|
||||
|
||||
``` text
|
||||
Predicts of ./doc/imgs_words/korean/1.jpg:('바탕으로', 0.9948904)
|
||||
```
|
||||
|
||||
<a name="ANGLE_CLASSIFICATION_MODEL_INFERENCE"></a>
|
||||
## 4. 角度分类模型推理
|
||||
|
||||
对于角度分类模型推理,可以执行以下命令:
|
||||
|
||||
```
|
||||
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words_en/word_10.png" --cls_model_dir="./inference/cls/"
|
||||
```
|
||||
```
|
||||
# download text angle class inference model:
|
||||
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_en/word_10.png" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"
|
||||
```
|
||||

|
||||
|
||||
执行命令后,上述图像的预测结果(分类角度和分数)将打印在屏幕上。
|
||||
|
||||
```
|
||||
Predicts of ./doc/imgs_words_en/word_10.png:['0', 0.9999995]
|
||||
```
|
||||
<a name="CONCATENATION"></a>
|
||||
## 5. 文本检测、角度分类和识别推理串联
|
||||
|
||||
<a name="LIGHTWEIGHT_CHINESE_MODEL"></a>
|
||||
### 5.1 轻量级中文模型
|
||||
|
||||
在进行预测时,需要通过参数 `image_dir` 指定单张图像或图像文件夹的路径,参数 `det_model_dir` 指定检测推理模型的路径,参数 `cls_model_dir` 指定角度分类推理模型的路径,参数 `rec_model_dir` 指定识别推理模型的路径。参数 `use_angle_cls` 用于控制是否启用角度分类模型。参数 `use_mp` 指定是否使用多进程推理,`total_process_num` 指定使用多进程时的进程数量(Paddle Inference 不是线程安全的,建议使用多进程)。可视化的识别结果默认保存在 `./inference_results` 文件夹中。
|
||||
|
||||
```shell
|
||||
# use direction classifier
|
||||
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
|
||||
|
||||
# not use use direction classifier
|
||||
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 multi-process
|
||||
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 --use_mp=True --total_process_num=6
|
||||
```
|
||||
|
||||
|
||||
执行命令后,识别结果图像如下:
|
||||
|
||||

|
||||
|
||||
<a name="OTHER_MODELS"></a>
|
||||
### 5.2 其他模型
|
||||
|
||||
如果你想尝试其他检测算法或识别算法,请参考上述文本检测模型推理和文本识别模型推理,更新相应的配置和模型。
|
||||
|
||||
**注意:由于检测框旋转逻辑的限制,目前不支持将 SAST 曲线文本检测模型(使用参数 `det_sast_polygon=True`)与其他模型组合使用。**
|
||||
|
||||
以下命令使用 EAST 文本检测和 STAR-Net 文本识别的组合:
|
||||
|
||||
```
|
||||
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_dict_path="./ppocr/utils/ic15_dict.txt"
|
||||
```
|
||||
|
||||
执行命令后,识别结果图像如下:
|
||||
|
||||

|
Loading…
Reference in New Issue