跳转至

推理第三方模型

第三方模型离线推理 - 快速开始

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
使用该工具,将推理模型转换成onnx文件:

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]
- 若要转化为动态shape分档模型,则可参考以下配置
[ascend_context]
input_format=NCHW
input_shape=x:[1,3,-1,-1]
dynamic_dims=[736,1280],[768,1280],[896,1280],[1024,1280]
- 若要转化为动态shape模型,则可参考以下配置
[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
使用该工具,将推理模型转换成onnx文件:

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.0infer model,下载并解压即可得到以下目录

ch_ppocr_mobile_v2.0_cls_infer/
├── inference.pdmodel
├── inference.pdiparams
├── inference.pdiparams.info

3.3.2 三方推理模型转换为onnx文件

下载并使用paddle2onnx工具

pip install paddle2onnx
使用该工具,将推理模型转换成onnx文件:

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