MMOCR / docs /zh_cn /deployment.md
tomofi's picture
Add application file
2366e36
|
raw
history blame
17 kB

部署

我们在 tools/deployment 目录下提供了一些部署工具。

转换至 ONNX (试验性的)

我们提供了将模型转换至 ONNX 格式的脚本。转换后的模型可以使用诸如 Netron 的工具可视化。 此外,我们也支持比较 PyTorch 和 ONNX 模型的输出结果。

python tools/deployment/pytorch2onnx.py
    ${MODEL_CONFIG_PATH} \
    ${MODEL_CKPT_PATH} \
    ${MODEL_TYPE} \
    ${IMAGE_PATH} \
    --output-file ${OUTPUT_FILE} \
    --device-id ${DEVICE_ID} \
    --opset-version ${OPSET_VERSION} \
    --verify \
    --verbose \
    --show \
    --dynamic-export

参数说明:

参数 类型 描述
model_config str 模型配置文件的路径。
model_ckpt str 模型权重文件的路径。
model_type 'recog', 'det' 配置文件对应的模型类型。
image_path str 输入图片的路径。
--output-file str 输出的 ONNX 模型路径。 默认为 tmp.onnx
--device-id int 使用哪块 GPU。默认为0。
--opset-version int ONNX 操作集版本。默认为11。
--verify bool 决定是否验证输出模型的正确性。默认为 False
--verbose bool 决定是否打印导出模型的结构,默认为 False
--show bool 决定是否可视化 ONNXRuntime 和 PyTorch 的输出。默认为 False
--dynamic-export bool 决定是否导出有动态输入和输出尺寸的 ONNX 模型。默认为 False

:::{note} 这个工具仍然是试验性的。一些定制的操作没有被支持,并且我们目前仅支持一部分的文本检测和文本识别算法。 :::

支持导出到 ONNX 的模型列表

下表列出的模型可以保证导出到 ONNX 并且可以在 ONNX Runtime 下运行。

模型 配置 动态尺寸 批推理
DBNet dbnet_r18_fpnc_1200e_icdar2015.py Y N
PSENet psenet_r50_fpnf_600e_ctw1500.py Y Y
PSENet psenet_r50_fpnf_600e_icdar2015.py Y Y
PANet panet_r18_fpem_ffm_600e_ctw1500.py Y Y
PANet panet_r18_fpem_ffm_600e_icdar2015.py Y Y
CRNN crnn_academic_dataset.py Y Y CRNN 仅接受高度为32的输入

:::{note}

  • 以上所有模型测试基于 PyTorch==1.8.1,onnxruntime==1.7.0 进行
  • 如果你在上述模型中遇到问题,请创建一个issue,我们会尽快处理。
  • 因为这个特性是试验性的,可能变动很快,请尽量使用最新版的 mmcvmmocr 尝试。 :::

ONNX 转 TensorRT (试验性的)

我们也提供了从 ONNX 模型转换至 TensorRT 格式的脚本。另外,我们支持比较 ONNX 和 TensorRT 模型的输出结果。

python tools/deployment/onnx2tensorrt.py
    ${MODEL_CONFIG_PATH} \
    ${MODEL_TYPE} \
    ${IMAGE_PATH} \
    ${ONNX_FILE} \
    --trt-file ${OUT_TENSORRT} \
    --max-shape INT INT INT INT \
    --min-shape INT INT INT INT \
    --workspace-size INT \
    --fp16 \
    --verify \
    --show \
    --verbose

参数说明:

参数 类型 描述
model_config str 模型配置文件的路径。
model_type 'recog', 'det' 配置文件对应的模型类型。
image_path str 输入图片的路径。
onnx_file str 输入的 ONNX 文件路径。
--trt-file str 输出的 TensorRT 模型路径。默认为 tmp.trt
--max-shape int * 4 模型输入的最大尺寸。
--min-shape int * 4 模型输入的最小尺寸。
--workspace-size int 最大工作空间大小,单位为 GiB。默认为1。
--fp16 bool 决定是否输出 fp16 模式的 TensorRT 模型。默认为 False
--verify bool 决定是否验证输出模型的正确性。默认为 False
--show bool 决定是否可视化 ONNX 和 TensorRT 的输出。默认为 False
--verbose bool 决定是否在创建 TensorRT 引擎时打印日志信息。默认为 False

:::{note} 这个工具仍然是试验性的。一些定制的操作模型没有被支持。我们目前仅支持一部的文本检测和文本识别算法。 :::

支持导出到 TensorRT 的模型列表

下表列出的模型可以保证导出到 TensorRT 引擎并且可以在 TensorRT 下运行。

模型 配置 动态尺寸 批推理
DBNet dbnet_r18_fpnc_1200e_icdar2015.py Y N
PSENet psenet_r50_fpnf_600e_ctw1500.py Y Y
PSENet psenet_r50_fpnf_600e_icdar2015.py Y Y
PANet panet_r18_fpem_ffm_600e_ctw1500.py Y Y
PANet panet_r18_fpem_ffm_600e_icdar2015.py Y Y
CRNN crnn_academic_dataset.py Y Y CRNN 仅接受高度为32的输入

:::{note}

  • 以上所有模型测试基于 PyTorch==1.8.1,onnxruntime==1.7.0,tensorrt==7.2.1.6 进行
  • 如果你在上述模型中遇到问题,请创建一个 issue,我们会尽快处理。
  • 因为这个特性是试验性的,可能变动很快,请尽量使用最新版的 mmcvmmocr 尝试。 :::

评估 ONNX 和 TensorRT 模型(试验性的)

我们在 tools/deployment/deploy_test.py 中提供了评估 TensorRT 和 ONNX 模型的方法。

前提条件

在评估 ONNX 和 TensorRT 模型之前,首先需要安装 ONNX,ONNXRuntime 和 TensorRT。根据 ONNXRuntime in mmcvTensorRT plugin in mmcv 安装 ONNXRuntime 定制操作和 TensorRT 插件。

使用

python tools/deploy_test.py \
    ${CONFIG_FILE} \
    ${MODEL_PATH} \
    ${MODEL_TYPE} \
    ${BACKEND} \
    --eval ${METRICS} \
    --device ${DEVICE}

参数说明

参数 类型 描述
model_config str 模型配置文件的路径。
model_file str TensorRT 或 ONNX 模型路径。
model_type 'recog', 'det' 部署检测还是识别模型。
backend 'TensorRT', 'ONNXRuntime' 测试后端。
--eval 'acc', 'hmean-iou' 评估指标。“acc”用于识别模型,“hmean-iou”用于检测模型。
--device str 评估使用的设备。默认为 cuda:0

结果和模型

模型 配置 数据集 指标 PyTorch ONNX Runtime TensorRT FP32 TensorRT FP16
DBNet dbnet_r18_fpnc_1200e_icdar2015.py
icdar2015 Recall
0.731 0.731 0.678 0.679
Precision 0.871 0.871 0.844 0.842
Hmean 0.795 0.795 0.752 0.752
DBNet* dbnet_r18_fpnc_1200e_icdar2015.py
icdar2015 Recall
0.720 0.720 0.720 0.718
Precision 0.868 0.868 0.868 0.868
Hmean 0.787 0.787 0.787 0.786
PSENet psenet_r50_fpnf_600e_icdar2015.py
icdar2015 Recall
0.753 0.753 0.753 0.752
Precision 0.867 0.867 0.867 0.867
Hmean 0.806 0.806 0.806 0.805
PANet panet_r18_fpem_ffm_600e_icdar2015.py
icdar2015 Recall
0.740 0.740 0.687 N/A
Precision 0.860 0.860 0.815 N/A
Hmean 0.796 0.796 0.746 N/A
PANet* panet_r18_fpem_ffm_600e_icdar2015.py
icdar2015 Recall
0.736 0.736 0.736 N/A
Precision 0.857 0.857 0.857 N/A
Hmean 0.792 0.792 0.792 N/A
CRNN crnn_academic_dataset.py
IIIT5K Acc 0.806 0.806 0.806 0.806

:::{note}

  • TensorRT 上采样(upsample)操作和 PyTorch 有一点不同。对于 DBNet 和 PANet,我们建议把上采样的最近邻 (nearest) 模式代替成双线性 (bilinear) 模式。 PANet 的替换处在这里 ,DBNet 的替换处在这里这里。如在上表中显示的,带有标记*的网络的上采样模式均被改变了。
  • 注意到,相比最近邻模式,使用更改后的上采样模式会降低性能。然而,默认网络的权重是通过最近邻模式训练的。为了保持在部署中的最佳性能,建议在训练和 TensorRT 部署中使用双线性模式。
  • 所有 ONNX 和 TensorRT 模型都使用数据集上的动态尺寸进行评估,图像根据原始配置文件进行预处理。
  • 这个工具仍然是试验性的。一些定制的操作模型没有被支持。并且我们目前仅支持一部分的文本检测和文本识别算法。 :::