使用模型优化器转换模型

简介

模型优化器是一个跨平台命令行工具,有助于在训练与部署环境之间进行迁移,执行静态模型分析,并调整深度学习模型,以在端点目标设备上优化执行。

如果使用模型优化器工具,则假定您已经有一个深度学习模型,该模型已使用其中一个支持框架(TensorFlow、PyTorch、PaddlePaddle、MXNet、Caffe、Kaldi)进行了训练,或以 ONNX* 格式表示。模型优化器生成模型的中间表示 (IR),可使用 OpenVINO™ 运行时对其进行推理。

备注

模型优化器不对模型进行推理。模型优化器是一个离线工具,用于将模型转换为 IR 并在推理之前对其进行优化。

下面的方案展示了部署经过训练的深度学习模型的典型工作流程:

_images/BASIC_FLOW_MO_simplified.svg

IR 是一对描述模型的文件:

  • .xml- 描述网络拓扑结构

  • .bin- 包含权重和偏移的二进制数据。

备注

生成的 IR 可通过采用训练后量化方法的训练后优化进行额外优化,以进行推理。

提示

您还可以在 OpenVINO™ 深度学习工作台 (DL Workbench) 中使用模型优化器。深度学习工作台是一个基于 Web 的图形环境,使您能够对深度学习模型的性能进行优化、微调、分析、可视化和比较。

运行模型优化器

要将模型转换为 IR,请运行模型优化器:

mo --input_model INPUT_MODEL

如果开箱即用的转换(仅指定了 --input_model 参数)不成功,请尝试使用覆盖输入形状和切割模型的参数,如下所述。

要在模型转换中覆盖原始输入形态,模型优化器提供了两个参数:--input--input_shape。有关这些参数的更多信息,请参阅设置输入形状

要切除模型中不需要的部分,如不支持的操作和训练子图,可以使用 --input--output 参数,定义已转换模型的新输入和输出。有关更详细的说明,请参阅切除模型的一些部分

此外,您还可以使用嵌入式预处理计算中所述的 --mean_valuesscales_values--layout 以及其他参数将额外的输入预处理子图插入已转换模型中。

模型优化器的压缩参数 --data_type 允许生成 FP16 数据类型的 IR。有关详细信息,请参阅将模型压缩为 FP16

要获取模型优化器中可用的转换参数的完整列表,请运行以下命令:

mo --help

CLI 命令示例

下面是不同框架和模型优化器参数的单独示例列表。

  1. 为二进制 protobuf 格式的 TensorFlow MobileNet 模型启动模型优化器。

    mo --input_model MobileNet.pb

    为 SavedModel 格式的 TensorFlow BERT 模型启动模型优化器(三个输入)。以显式方法指定批次大小和序列长度分别等于 2 和 30 的输入形状。

    mo --saved_model_dir BERT --input mask,word_ids,type_ids --input_shape [2,30],[2,30],[2,30]

    有关 TensorFlow 模型转换的更多信息,请参阅转换 TensorFlow 模型

  2. 为 ONNX OCR 模型启动模型优化器,并以显式方法指定新输出。

    mo --input_model ocr.onnx --output probabilities

    有关 ONNX 模型转换的更多信息,请参阅转换 ONNX 模型。请注意,在将 PyTorch 模型转换为 IR 之前,必须将其导出为 ONNX 格式。有关更多详细信息,请参阅转换 PyTorch 模型

  3. 为 PaddlePaddle UNet 模型启动模型优化器,并为其输入应用均值/标度值归一化。

    mo --input_model unet.pdmodel --mean_values [123,117,104] --scale 255

    有关 PaddlePaddle 模型转换的更多信息,请参阅转换 PaddlePaddle 模型

  4. 为 MXNet SSD Inception V3 模型启动模型优化器,并为输入指定第一通道布局。

    mo --input_model ssd_inception_v3-0000.params --layout NCHW

    有关 MXNet 模型转换的更多信息,请参阅转换 MXNet 模型

  5. 为 Caffe AlexNet 模型启动模型优化器,输入通道采用需要反转的 RGB 格式。

    mo --input_model alexnet.caffemodel --reverse_input_channels

    有关 Caffe 模型转换的更多信息,请参阅转换 Caffe 模型

  6. 为 Kaldi LibriSpeech nnet2 模型启动模型优化器。

    mo --input_model librispeech_nnet2.mdl --input_shape [1,140]

    有关 Kaldi 模型转换的更多信息,请参阅转换 Kaldi 模型

要获取特定 TensorFlow、ONNX、PyTorch、MXNet 和 Kaldi 模型的转换方法,请参阅模型转换教程