Skip to content

Latest commit

 

History

History
236 lines (185 loc) · 21.1 KB

inference_quickstart.md

File metadata and controls

236 lines (185 loc) · 21.1 KB

MindOCR原生模型离线推理 - 快速开始

1. MindOCR模型支持列表

1.1 文本检测

模型 骨干网络 语言 数据集 F-score(%) FPS data shape (NCHW) 配置文件 下载
DBNet MobileNetV3 en IC15 76.96 26.19 (1,3,736,1280) yaml ckpt | mindir
ResNet-18 en IC15 81.73 24.04 (1,3,736,1280) yaml ckpt | mindir
ResNet-50 en IC15 85.00 21.69 (1,3,736,1280) yaml ckpt | mindir
ResNet-50 ch + en 12个数据集 83.41 21.69 (1,3,736,1280) yaml ckpt | mindir
DBNet++ ResNet-50 en IC15 86.79 8.46 (1,3,1152,2048) yaml ckpt | mindir
ResNet-50 ch + en 12个数据集 84.30 8.46 (1,3,1152,2048) yaml ckpt | mindir
EAST ResNet-50 en IC15 86.86 6.72 (1,3,720,1280) yaml ckpt | mindir
MobileNetV3 en IC15 75.32 26.77 (1,3,720,1280) yaml ckpt | mindir
PSENet ResNet-152 en IC15 82.50 2.52 (1,3,1472,2624) yaml ckpt | mindir
ResNet-50 en IC15 81.37 10.16 (1,3,736,1312) yaml ckpt | mindir
MobileNetV3 en IC15 70.56 10.38 (1,3,736,1312) yaml ckpt | mindir
FCENet ResNet50 en IC15 78.94 14.59 (1,3,736,1280) yaml ckpt | mindir

1.2 文本识别

模型 骨干网络 字典文件 数据集 Acc(%) FPS data shape (NCHW) 配置文件 下载
CRNN VGG7 Default IC15 66.01 465.64 (1,3,32,100) yaml ckpt | mindir
ResNet34_vd Default IC15 69.67 397.29 (1,3,32,100) yaml ckpt | mindir
ResNet34_vd ch_dict.txt / / / (1,3,32,320) yaml ckpt | mindir
SVTR Tiny Default IC15 79.92 338.04 (1,3,64,256) yaml ckpt | mindir
Rare ResNet34_vd Default IC15 69.47 273.23 (1,3,32,100) yaml ckpt | mindir
ResNet34_vd ch_dict.txt / / / (1,3,32,320) yaml ckpt | mindir
RobustScanner ResNet-31 en_dict90.txt IC15 73.71 22.30 (1,3,48,160) yaml ckpt | mindir
VisionLAN ResNet-45 Default IC15 80.07 321.37 (1,3,64,256) yaml(LA) ckpt(LA) | mindir(LA)

1.3 文本方向分类

模型 骨干网络 数据集 Acc(%) FPS data shape (NCHW) 配置文件 下载
MobileNetV3 MobileNetV3 / / / (1,3,48,192) yaml ckpt

2. MindOCR推理流程

graph LR;
    subgraph Step 1
        A[ckpt] -- export.py --> B[MindIR]
    end

    subgraph Step 2
        B -- converter_lite --> C[MindSpore Lite MindIR];
    end

    subgraph Step 3
        C -- input --> D[infer.py];
    end

    subgraph Step 4
        D -- outputs --> E[eval_rec.py/eval_det.py];
    end

    F[images] -- input --> D;
Loading

如上图所示,推理流程分为以下几步:

  1. 将MindOCR训练完成后的ckpt模型,使用tools/export.py导出成MindIR模型;
  2. 下载并配置模型转换工具(即converter_lite),使用converter_lite工具将MindIR模型导出成MindSpore Lite MindIR模型;
  3. 准备好MindSpore Lite MindIR模型和输入图片后,使用deploy/py_infer/infer.py进行推理;
  4. 根据模型种类不同,使用deploy/eval_utils/eval_det.py对文本检测类模型的推理结果进行评估,或者使用deploy/eval_utils/eval_rec.py对文本识别类模型的推理结果进行评估。

注意:Step 1在Ascend910、GPU或CPU上执行。Step 2,3,4在Ascend310或310P上执行。

3. MindOCR推理方法

3.1 文本检测

下面以模型表格中的DBNet ResNet-50 en为例介绍推理方法:

  • 下载模型表格中的ckpt文件并使用以下命令导出为MindIR,或者直接从模型表格下载已经导出完成的MindIR文件:

    # 使用本地ckpt文件,导出`DBNet ResNet-50 en` 模型的MindIR
    # 更多参数使用详情,请执行 `python tools/export.py -h`
    python tools/export.py --model_name_or_config dbnet_resnet50 --data_shape 736 1280 --local_ckpt_path /path/to/dbnet.ckpt

    上述命令中--model_name_or_config为MindOCR中的模型名称或传入yaml目录(例如--model_name_or_config configs/rec/crnn/crnn_resnet34.yaml);

    --data_shape 736 1280参数表明模型输入图片的大小为[736, 1280],每个MindOCR模型都对应着一个固定导出data shape,详细请见模型支持列表中的data shape列;

    --local_ckpt_path /path/to/dbnet.ckpt参数表明需要导出的模型文件为/path/to/dbnet.ckpt

  • 在Ascend310或310P上使用converter_lite工具将MindIR转换为MindSpore Lite MindIR:

    执行以下命令:

    converter_lite \
        --saveType=MINDIR \
        --fmk=MINDIR \
        --optimize=ascend_oriented \
        --modelFile=dbnet_resnet50-c3a4aa24-fbf95c82.mindir \
        --outputFile=dbnet_resnet50_lite

    上述命令中:

    --fmk=MINDIR表明输入模型的原始格式为MindIR,同时—fmk参数还支持ONNX等;

    --saveType=MINDIR表明输出模型格式为MindIR格式;

    --optimize=ascend_oriented表明针对Ascend设备做优化;

    --modelFile=dbnet_resnet50-c3a4aa24-fbf95c82.mindir表明当前需要转换的模型路径为dbnet_resnet50-c3a4aa24-fbf95c82.mindir

    --outputFile=dbnet_resnet50_lite表明输出模型的路径为dbnet_resnet50_lite,不需要加.mindir后缀,可自动生成;

    上述命令执行完成后会生成dbnet_resnet50_lite.mindir模型文件;

    了解更多converter_lite

    了解更多模型转换教程

  • 使用deploy/py_infer/infer.py脚本和dbnet_resnet50_lite.mindir文件执行推理:

    python deploy/py_infer/infer.py \
        --input_images_dir=/path/to/ic15/ch4_test_images \
        --det_model_path=/path/to/mindir/dbnet_resnet50_lite.mindir \
        --det_model_name_or_config=en_ms_det_dbnet_resnet50 \
        --res_save_dir=/path/to/dbnet_resnet50_results

    执行完成后,在参数--res_save_dir所指目录下生成预测文件det_results.txt

    在进行推理时,可使用--vis_det_save_dir参数进行结果可视化。

    了解更多infer.py推理参数

  • 使用以下命令评估结果:

    python deploy/eval_utils/eval_det.py \
            --gt_path=/path/to/ic15/test_det_gt.txt \
            --pred_path=/path/to/dbnet_resnet50_results/det_results.txt

3.2 文本识别

下面以模型表格中的CRNN ResNet34_vd en为例介绍推理方法:

  • 下载模型表格中的MindIR文件

  • 在Ascend310或310P上使用converter_lite工具将MindIR转换为MindSpore Lite MindIR:

    执行以下命令:

    converter_lite \
        --saveType=MINDIR \
        --fmk=MINDIR \
        --optimize=ascend_oriented \
        --modelFile=crnn_resnet34-83f37f07-eb10a0c9.mindir \
        --outputFile=crnn_resnet34vd_lite

    上述命令执行完成后会生成crnn_resnet34vd_lite.mindir模型文件;

    converter_lite参数简要说明请见上述文本检测样例。

    了解更多converter_lite

    了解更多模型转换教程

  • 使用deploy/py_infer/infer.py脚本和crnn_resnet34vd_lite.mindir文件执行推理:

    python deploy/py_infer/infer.py \
        --input_images_dir=/path/to/ic15/ch4_test_word_images \
        --rec_model_path=/path/to/mindir/crnn_resnet34vd_lite.mindir \
        --rec_model_name_or_config=configs/rec/crnn/crnn_resnet34.yaml \
        --res_save_dir=/path/to/rec_infer_results

    执行完成后,在参数--res_save_dir所指目录下生成预测文件rec_results.txt

    了解更多infer.py推理参数

  • 使用以下命令评估结果:

    python deploy/eval_utils/eval_rec.py \
        --gt_path=/path/to/ic15/rec_gt.txt \
        --pred_path=/path/to/rec_infer_results/rec_results.txt

3.3 文本方向分类

下面以模型表格中的MobileNet为例介绍推理方法:

  • 下载模型表格中的ckpt文件
  • 使用export.py工具将ckpt转换为mindIR
    • 转换为动态mindIR
      python tools/export.py \
          --model_name_or_config configs/cls/mobilenetv3/cls_mv3.yaml \
          --save_dir /path/to/save/cls_mv3 \
          --is_dynamic_shape True \
          --model_type cls
    • 转换为静态mindIR
      python tools/export.py \
          --model_name_or_config configs/cls/mobilenetv3/cls_mv3.yaml \
          --save_dir /path/to/save/cls_mv3 \
          --is_dynamic_shape False \
          --data_shape 48 192
  • 在Ascend310或310P上使用converter_lite工具将MindIR转换为MindSpore Lite MindIR:

执行以下命令:

converter_lite \
    --saveType=MINDIR \
    --fmk=MINDIR \
    --optimize=ascend_oriented \
    --modelFile=/path/to/save/cls_mv3.mindir \
    --outputFile=cls_mv3_lite

上述命令执行完成后会生成cls_mv3_lite.mindir模型文件;

了解更多converter_lite

了解更多模型转换教程

3.4 端到端推理

根据文本检测, 文本识别, 文字方向识别, 准备好用于推理的mindIR文件。执行下列命令进行端到端推理

python deploy/py_infer/infer.py \
    --input_images_dir=/path/to/ic15/ch4_test_images \
    --det_model_path=/path/to/mindir/dbnet_resnet50_lite.mindir \
    --det_model_name_or_config=en_ms_det_dbnet_resnet50 \
    --cls_model_path=/path/to/mindir/cls_mv3_lite.mindir \
    --cls_model_name_or_config=configs/cls/mobilenetv3/cls_mv3.yaml \
    --rec_model_path=/path/to/mindir/crnn_resnet34vd_lite.mindir \
    --rec_model_name_or_config=configs/rec/crnn/crnn_resnet34.yaml \
    --res_save_dir=/path/to/infer_results

4.转换、推理常见问题

转换与推理相关问题可参考FAQ