推理第三方模型
第三方模型离线推理 - 快速开始¶
1. 第三方模型支持列表¶
MindOCR可以支持第三方模型(如PaddleOCR、MMOCR等)的推理,本文档展示了已适配的模型列表。 性能测试基于Ascend310P,部分模型暂无测试数据集。
1.1 文本检测¶
名称 | 模型 | 骨干网络 | 数据集 | F-score(%) | FPS | 来源 | 配置文件 | 下载 | 参考链接 |
---|---|---|---|---|---|---|---|---|---|
ch_pp_det_OCRv4 | DBNet | MobileNetV3 | / | / | / | PaddleOCR | yaml | infer model | ch_PP-OCRv4_det |
ch_pp_server_det_v2.0 | DBNet | ResNet18_vd | MLT17 | 46.22 | 21.65 | PaddleOCR | yaml | infer model | ch_ppocr_server_v2.0_det |
ch_pp_det_OCRv3 | DBNet | MobileNetV3 | MLT17 | 33.89 | 22.40 | PaddleOCR | yaml | infer model | ch_PP-OCRv3_det |
ch_pp_det_OCRv2 | DBNet | MobileNetV3 | MLT17 | 42.99 | 21.90 | PaddleOCR | yaml | infer model | ch_PP-OCRv2_det |
ch_pp_mobile_det_v2.0_slim | DBNet | MobileNetV3 | MLT17 | 31.66 | 19.88 | PaddleOCR | yaml | infer model | ch_ppocr_mobile_slim_v2.0_det |
ch_pp_mobile_det_v2.0 | DBNet | MobileNetV3 | MLT17 | 31.56 | 21.96 | PaddleOCR | yaml | infer model | ch_ppocr_mobile_v2.0_det |
en_pp_det_OCRv3 | DBNet | MobileNetV3 | IC15 | 42.14 | 55.55 | PaddleOCR | yaml | infer model | en_PP-OCRv3_det |
ml_pp_det_OCRv3 | DBNet | MobileNetV3 | MLT17 | 66.01 | 22.48 | PaddleOCR | yaml | infer model | ml_PP-OCRv3_det |
en_pp_det_dbnet_resnet50vd | DBNet | ResNet50_vd | IC15 | 79.89 | 21.17 | PaddleOCR | yaml | infer model | DBNet |
en_pp_det_psenet_resnet50vd | PSE | ResNet50_vd | IC15 | 80.44 | 7.75 | PaddleOCR | yaml | train model | PSE |
en_pp_det_east_resnet50vd | EAST | ResNet50_vd | IC15 | 85.58 | 20.70 | PaddleOCR | yaml | train model | EAST |
en_pp_det_sast_resnet50vd | SAST | ResNet50_vd | IC15 | 81.77 | 22.14 | PaddleOCR | yaml | train model | SAST |
en_mm_det_dbnetpp_resnet50 | DBNet++ | ResNet50 | IC15 | 81.36 | 10.66 | MMOCR | yaml | train model | DBNetpp |
en_mm_det_fcenet_resnet50 | FCENet | ResNet50 | IC15 | 83.67 | 3.34 | MMOCR | yaml | train model | FCENet |
注意:在使用en_pp_det_psenet_resnet50vd模型进行推理时,需要使用以下命令修改onnx文件
python deploy/models_utils/onnx_optim/insert_pse_postprocess.py \
--model_path=./pse_r50vd.onnx \
--binary_thresh=0.0 \
--scale=1.0
1.2 文本识别¶
名称 | 模型 | 骨干网络 | 数据集 | Acc(%) | FPS | 来源 | 字典文件 | 配置文件 | 下载 | 参考链接 |
---|---|---|---|---|---|---|---|---|---|---|
ch_pp_rec_OCRv4 | CRNN | MobileNetV1Enhance | / | / | / | PaddleOCR | ppocr_keys_v1.txt | yaml | infer model | ch_PP-OCRv4_rec |
ch_pp_server_rec_v2.0 | CRNN | ResNet34 | MLT17 (ch) | 49.91 | 154.16 | PaddleOCR | ppocr_keys_v1.txt | yaml | infer model | ch_ppocr_server_v2.0_rec |
ch_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | MLT17 (ch) | 49.91 | 408.38 | PaddleOCR | ppocr_keys_v1.txt | yaml | infer model | ch_PP-OCRv3_rec |
ch_pp_rec_OCRv2 | CRNN | MobileNetV1Enhance | MLT17 (ch) | 44.59 | 203.34 | PaddleOCR | ppocr_keys_v1.txt | yaml | infer model | ch_PP-OCRv2_rec |
ch_pp_mobile_rec_v2.0 | CRNN | MobileNetV3 | MLT17 (ch) | 24.59 | 167.67 | PaddleOCR | ppocr_keys_v1.txt | yaml | infer model | ch_ppocr_mobile_v2.0_rec |
en_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | MLT17 (en) | 79.79 | 917.01 | PaddleOCR | en_dict.txt | yaml | infer model | en_PP-OCRv3_rec |
en_pp_mobile_rec_number_v2.0_slim | CRNN | MobileNetV3 | / | / | / | PaddleOCR | en_dict.txt | yaml | infer model | en_number_mobile_slim_v2.0_rec |
en_pp_mobile_rec_number_v2.0 | CRNN | MobileNetV3 | / | / | / | PaddleOCR | en_dict.txt | yaml | infer model | en_number_mobile_v2.0_rec |
korean_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | korean_dict.txt | yaml | infer model | korean_PP-OCRv3_rec |
japan_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | japan_dict.txt | yaml | infer model | japan_PP-OCRv3_rec |
chinese_cht_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | chinese_cht_dict.txt | yaml | infer model | chinese_cht_PP-OCRv3_rec |
te_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | te_dict.txt | yaml | infer model | te_PP-OCRv3_rec |
ka_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | ka_dict.txt | yaml | infer model | ka_PP-OCRv3_rec |
ta_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | ta_dict.txt | yaml | infer model | ta_PP-OCRv3_rec |
latin_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | latin_dict.txt | yaml | infer model | latin_PP-OCRv3_rec |
arabic_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | arabic_dict.txt | yaml | infer model | arabic_PP-OCRv3_rec |
cyrillic_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | cyrillic_dict.txt | yaml | infer model | cyrillic_PP-OCRv3_rec |
devanagari_pp_rec_OCRv3 | SVTR | MobileNetV1Enhance | / | / | / | PaddleOCR | devanagari_dict.txt | yaml | infer model | devanagari_PP-OCRv3_rec |
en_pp_rec_crnn_resnet34vd | CRNN | ResNet34_vd | IC15 | 66.35 | 420.80 | PaddleOCR | ic15_dict.txt | yaml | infer model | CRNN |
en_pp_rec_rosetta_resnet34vd | Rosetta | Resnet34_vd | IC15 | 64.28 | 552.40 | PaddleOCR | ic15_dict.txt | yaml | infer model | Rosetta |
en_pp_rec_vitstr_vitstr | ViTSTR | ViTSTR | IC15 | 68.42 | 364.67 | PaddleOCR | EN_symbol_dict.txt | yaml | train model | ViTSTR |
en_mm_rec_nrtr_resnet31 | NRTR | ResNet31 | IC15 | 67.26 | 32.63 | MMOCR | english_digits_symbols.txt | yaml | train model | NRTR |
en_mm_rec_satrn_shallowcnn | SATRN | ShallowCNN | IC15 | 73.52 | 32.14 | MMOCR | english_digits_symbols.txt | yaml | train model | SATRN |
1.3 文本方向分类¶
名称 | 模型 | 数据集 | Acc(%) | FPS | 来源 | 配置文件 | 下载 | 参考链接 |
---|---|---|---|---|---|---|---|---|
ch_pp_mobile_cls_v2.0 | MobileNetV3 | / | / | / | PaddleOCR | yaml | infer model | ch_ppocr_mobile_v2.0_cls |
2. 第三方推理流程总览¶
graph LR;
A[ThirdParty models] -- xx2onnx --> B[ONNX] -- converter_lite --> C[MindIR];
C --input --> D[infer.py] -- outputs --> eval_rec.py/eval_det.py;
H[images] --input --> D[infer.py];
3. 第三方模型推理方法¶
对于ppocrv4
模型,这里提供了快速转换工具,供用户快速将paddle模型转换为MindIR模型。
3.1 文本检测¶
下面主要以第三方模型支持列表中的ch_pp_det_OCRv4
为例介绍推理方法:
3.1.1 下载第三方模型文件¶
- 下载第三方模型支持列表中,
infer model
表示该模型为推理模型文件;train model
表示该模型为训练模型文件,需要先转换为推理模型 - 当模型为推理模型文件,以
ch_pp_det_OCRv4
为例,从infer model下载并解压,得到以下目录ch_PP-OCRv4_det_infer/ ├── inference.pdmodel ├── inference.pdiparams ├── inference.pdiparams.info
- 当模型为训练模型文件,以
en_pp_det_psenet_resnet50vd
为例, 从train model下载后解压,得到以下目录需要先转换为推理模型:det_r50_vd_pse_v2.0_train/ ├── train.log ├── best_accuracy.pdopt ├── best_accuracy.states ├── best_accuracy.pdparams
执行完成后会生成以下内容:git clone https://github.com/PaddlePaddle/PaddleOCR.git cd PaddleOCR python tools/export_model.py \ -c configs/det/det_r50_vd_pse.yml \ -o Global.pretrained_model=./det_r50_vd_pse_v2.0_train/best_accuracy \ Global.save_inference_dir=./det_db
det_db/ ├── inference.pdmodel ├── inference.pdiparams ├── inference.pdiparams.info
3.1.2 三方推理模型转换为onnx文件¶
下载并使用paddle2onnx
工具
pip install paddle2onnx
paddle2onnx \
--model_dir det_db \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file det_db.onnx \
--opset_version 11 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True
paddle2onnx
参数简要说明如下:
参数 | 参数说明 |
---|---|
--model_dir | 配置包含Paddle模型的目录路径 |
--model_filename | [可选] 配置位于 --model_dir 下存储网络结构的文件名 |
--params_filename | [可选] 配置位于 --model_dir 下存储模型参数的文件名称 |
--save_file | 指定转换后的模型保存目录路径 |
--opset_version | [可选] 配置转换为ONNX的OpSet版本,目前支持 7~16 等多个版本,默认为 9 |
--input_shape_dict | 输入Tensor的形状,用于生成动态ONNX模型,格式为 "{'x':[N,C,H,W]}",-1表示动态shape |
--enable_onnx_checker | [可选] 配置是否检查导出为 ONNX 模型的正确性, 建议打开此开关, 默认为 False |
参数中--input_shape_dict
的值,可以通过Netron工具打开推理模型查看。
了解更多paddle2onnx
上述命令执行完成后会生成det_db.onnx
文件;
3.1.3 将onnx文件转换为Lite MindIR文件¶
在Ascend310/310P上使用converter_lite
工具将onnx文件转换为MindIR:
创建转换配置文件config.txt
- 若要转化为静态shape模型,例如固定输入shape为[1,3,736,1280]
,则可参考以下配置
[ascend_context]
input_format=NCHW
input_shape=x:[1,3,736,1280]
[ascend_context]
input_format=NCHW
input_shape=x:[1,3,-1,-1]
dynamic_dims=[736,1280],[768,1280],[896,1280],[1024,1280]
[acl_build_options]
input_format=NCHW
input_shape_range=x:[-1,3,-1,-1]
配置文件参数简要说明如下:
参数 | 属性 | 功能描述 | 参数类型 | 取值说明 |
---|---|---|---|---|
input_format | 可选 | 指定模型输入format | String | 可选有"NCHW"、"NHWC"、"ND" |
input_shape | 可选 | 指定模型输入Shape,input_name必须是转换前的网络模型中的输入名称,按输入次序排列,用;隔开 | String | 例如:"input1:[1,64,64,3];input2:[1,256,256,3]" |
dynamic_dims | 可选 | 在动态batch分档时使用,指定batchsize和分辨率档位 | String | 例如:"dynamic_dims=[48,520],[48,320],[48,384]" |
了解更多配置参数
执行以下命令:
converter_lite \
--saveType=MINDIR \
--fmk=ONNX \
--optimize=ascend_oriented \
--modelFile=det_db.onnx \
--outputFile=det_db_lite \
--configFile=config.txt
det_db_lite.mindir
模型文件;
converter_lite
参数简要说明如下:
参数 | 是否必选 | 参数说明 | 取值范围 | 默认值 | 备注 |
---|---|---|---|---|---|
fmk | 是 | 输入模型的原始格式 | MINDIR、CAFFE、TFLITE、TF、ONNX | - | - |
saveType | 否 | 设定导出的模型为MindIR模型或者ms模型 | MINDIR、MINDIR_LITE | MINDIR | 云侧推理版本只有设置为MINDIR转出的模型才可以推理 |
modelFile | 是 | 输入模型的路径 | - | - | - |
outputFile | 是 | 输出模型的路径,不需加后缀,可自动生成.mindir后缀 | - | - | - |
configFile | 否 | 1)可作为训练后量化配置文件路径;2)可作为扩展功能配置文件路径 | - | - | - |
optimize | 否 | 设置针对设备的模型优化类型。若未设置,则不做优化 | none、general、gpu_oriented、ascend_oriented | - | - |
了解更多converter_lite
了解更多模型转换教程
3.1.4 用Lite MindIR进行推理¶
使用deploy/py_infer/infer.py
脚本和det_db_lite.mindir
文件执行推理:
python deploy/py_infer/infer.py \
--input_images_dir=/path/to/ic15/ch4_test_images \
--det_model_path=/path/to/mindir/det_db_lite.mindir \
--det_model_name_or_config=ch_pp_det_OCRv4 \
--res_save_dir=/path/to/ch_pp_det_OCRv4_results
--res_save_dir
所指目录下生成预测文件det_results.txt
;
在进行推理时,可使用--vis_det_save_dir
参数进行结果可视化
了解更多infer.py推理参数
3.1.5 评估检测结果¶
python deploy/eval_utils/eval_det.py \
--gt_path=/path/to/ic15/test_det_gt.txt \
--pred_path=/path/to/ch_pp_det_OCRv4_results/det_results.txt
3.2 文本识别¶
下面主要以第三方模型支持列表中的ch_pp_rec_OCRv4
为例介绍推理方法:
3.2.1 下载第三方模型文件¶
- 下载第三方模型支持列表中,
infer model
表示该模型为推理模型文件;train model
表示该模型为训练模型文件,需要先转换为推理模型 -
当模型为推理模型文件,以
ch_pp_rec_OCRv4
为例,从infer model下载并解压,得到以下目录ch_PP-OCRv4_det_infer/ ├── inference.pdmodel ├── inference.pdiparams ├── inference.pdiparams.info
-
当模型为训练模型文件,以
en_pp_rec_vitstr_vitstr
为例, 从train model下载后解压,得到以下目录需要先转换为推理模型:rec_vitstr_none_ce_train/ ├── train.log ├── best_accuracy.pdopt ├── best_accuracy.states ├── best_accuracy.pdparams
执行完成后会生成以下内容:git clone https://github.com/PaddlePaddle/PaddleOCR.git cd PaddleOCR python tools/export_model.py \ -c configs/rec/rec_vitstr_none_ce.yml \ -o Global.pretrained_model=./rec_vitstr_none_ce_train/best_accuracy \ Global.save_inference_dir=./rec_vitstr
rec_vitstr/ ├── inference.pdmodel ├── inference.pdiparams ├── inference.pdiparams.info
3.2.2 三方推理模型转换为onnx文件¶
下载并使用paddle2onnx
工具
pip install paddle2onnx
paddle2onnx \
--model_dir ch_PP-OCRv4_rec_infer \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file rec_crnn.onnx \
--opset_version 11 \
--input_shape_dict="{'x':[-1,3,48,-1]}" \
--enable_onnx_checker True
上述命令执行完成后会生成rec_crnn.onnx
文件
paddle2onnx
参数简要说明请见上述文本检测样例
3.2.3 将onnx文件转换为Lite MindIR文件¶
在Ascend310/310P上使用converter_lite
工具将onnx文件转换为MindIR:
创建转换配置文件config.txt
- 若要转化为**静态shape**模型,例如固定输入shape为
[1,3,48,320]
,则可参考以下配置[ascend_context] input_format=NCHW input_shape=x:[1,3,48,320]
- 若要转化为**动态shape分档**模型,则可参考以下配置
[ascend_context] input_format=NCHW input_shape=x:[1,3,-1,-1] dynamic_dims=[48,520],[48,320],[48,384],[48,360],[48,394],[48,321],[48,336],[48,368],[48,328],[48,685],[48,347]
- 若要转化为**动态shape**模型,则可参考以下配置
[acl_build_options] input_format=NCHW input_shape_range=x:[-1,3,-1,-1]
配置参数简要说明请见上述文本检测样例。
执行以下命令:
converter_lite \
--saveType=MINDIR \
--fmk=ONNX \
--optimize=ascend_oriented \
--modelFile=rec_crnn.onnx \
--outputFile=rec_crnn_lite \
--configFile=config.txt
rec_crnn_lite.mindir
模型文件;
converter_lite
参数简要说明请见上述文本检测样例。
了解更多converter_lite
了解更多模型转换教程
3.2.4 下载识别字典文件¶
根据上面的表格,下载ch_pp_rec_OCRv4
对应的字典文件ppocr_keys_v1.txt
3.2.5 用Lite MindIR进行推理¶
使用deploy/py_infer/infer.py
脚本和rec_crnn_lite.mindir
文件执行推理:
python deploy/py_infer/infer.py \
--input_images_dir=/path/to/mlt17_ch \
--rec_model_path=/path/to/mindir/rec_crnn_lite.mindir \
--rec_model_name_or_config=ch_pp_rec_OCRv4 \
--character_dict_path=/path/to/ppocr_keys_v1.txt \
--res_save_dir=/path/to/ch_rec_infer_results
执行完成后,在参数--res_save_dir
所指目录下生成预测文件rec_results.txt
。
了解更多infer.py推理参数
3.2.6 评估检测结果¶
使用以下命令评估结果:
python deploy/eval_utils/eval_rec.py \
--gt_path=/path/to/mlt17_ch/chinese_gt.txt \
--pred_path=/path/to/en_rec_infer_results/rec_results.txt
3.3 文本方向分类¶
下面主要以第三方模型支持列表中的ch_pp_mobile_cls_v2
为例介绍推理方法
3.3.1 下载第三方模型文件¶
参照上述文本检测样例,由于ch_pp_mobile_cls_v2.0
为infer model,下载并解压即可得到以下目录
ch_ppocr_mobile_v2.0_cls_infer/
├── inference.pdmodel
├── inference.pdiparams
├── inference.pdiparams.info
3.3.2 三方推理模型转换为onnx文件¶
下载并使用paddle2onnx
工具
pip install paddle2onnx
paddle2onnx \
--model_dir cls_mv3 \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file cls_mv3.onnx \
--opset_version 11 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True
3.3.3 将onnx文件转换为Lite MindIR文件¶
参考上述文本检测样例,创建转换配置文件config.txt
。以动态shape模型为例
[acl_build_options]
input_format=NCHW
input_shape_range=x:[-1,3,-1,-1]
执行以下命令:
converter_lite \
--saveType=MINDIR \
--fmk=ONNX \
--optimize=ascend_oriented \
--modelFile=cls_mv3.onnx \
--outputFile=cls_mv3_lite \
--configFile=config.txt
cls_mv3_lite.mindir
模型文件
3.4 端到端推理¶
根据文本检测, 文本识别, 文字方向识别, 准备用于推理的MindIR文件。执行下列命令进行端到端推理
python deploy/py_infer/infer.py \
--input_images_dir=/path/to/ic15/ch4_test_images \
--det_model_path=/path/to/mindir/det_db_lite.mindir \
--det_model_name_or_config=ch_pp_det_OCRv4 \
--cls_model_path=/path/to/mindir/cls_mv3_lite.mindir \
--cls_model_name_or_config=ch_pp_mobile_cls_v2.0 \
--rec_model_path=/path/to/mindir/rec_crnn_lite.mindir \
--rec_model_name_or_config=ch_pp_rec_OCRv4 \
--character_dict_path=/path/to/ppocr_keys_v1.txt \
--res_save_dir=/path/to/infer_results
3.5 快速转换工具¶
对于ppocrv4,我们提供了快速转换工具,方便用户将ppocrv4的paddle模型转换为MindIR模型,使用方法如下
- 确认MindSpore Lite
已成功下载并配置,详见MindSpore Lite,且converter_lite
已加入环境变量
- 执行以下命令开始转换
cd tools
bash paddle2mindir.sh -m=${ppocr_model_name} -p=${save_dir}
$ppocr_model_name
: 进行转换的ppocr模型,支持ch_PP-OCRv4
, ch_PP-OCRv4_server
- $save_dir
: 保存模型下载与转换的路径
转换过程将执行较久,请等待。执行后,将得到以下转换后的MindIR文件
ppocr_models
├── ${PPOCR_MODEL_NAME}_det_db_dynamic_output.mindir
├── ${PPOCR_MODEL_NAME}_rec_crnn_static_output.mindir
├── ${PPOCR_MODEL_NAME}_cls_mv4_static_output.mindir
├── ...
4 FAQ¶
转换与推理相关问题可参考FAQ