模型优化器用法

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

要使用该优化器,您需要采用以下支持格式之一的预训练深度学习模型:TensorFlow、PyTorch、PaddlePaddle、MXNet、Caffe、Kaldi 或 ONNX。模型优化器将模型转换为 OpenVINO™ 中间表示 (IR) 格式,您之后可以通过 OpenVINO™ 运行时 对其进行推理。

请注意,模型优化器不对模型进行推理。

下图展示了部署已训练深度学习模型的典型工作流程:

../../_images/BASIC_FLOW_MO_simplified.svg

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

  • .xml - 描述网络拓扑。

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

还可通过应用于训练后量化方法的 训练后优化 对 OpenVINO IR 进行针对推理的进一步优化。

如何运行模型优化器

要将模型转换为 IR,您可以通过以下命令运行优化器:

mo --input_model INPUT_MODEL

如果开箱即用的转换(仅指定 --input_model 参数)未成功,请使用下文提到的参数覆盖输入形状并切割模型:

  • 模型优化器提供两个参数来覆盖原始输入形状以便转换模型: --input--input_shape 。有关这些参数的更多信息,请参阅 设置输入形状 指南。

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

您还可以通过使用 --mean_valuesscales_values--layout嵌入式预处理计算 一文中所述的其他参数在转换的模型中插入其他输入预处理子图。

模型优化器中的 --compress_to_fp16 压缩参数支持生成压缩到 FP16 数据类型且包含常数(如卷积权重和矩阵乘法)的中间表示。有关更多详细信息,请参阅 将模型压缩为 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 模型 指南。

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

mo --input_model ocr.onnx --output probabilities

有关更多信息,请参阅 转换 ONNX 模型 指南。

Note

在将 PyTorch 模型转换为 IR 之前,必须将其导出为 ONNX 格式。请参阅 转换 PyTorch 模型 了解更多信息。

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

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

有关更多信息,请参阅 转换 PaddlePaddle 模型 指南。

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

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

有关更多信息,请参阅 转换 Apache MXNet 模型 指南。

  1. 为 Caffe AlexNet 模型启动模型优化器,输入通道采用需要逆向转换的 RGB 格式:

mo --input_model alexnet.caffemodel --reverse_input_channels

有关更多信息,请参阅 转换 Caffe 模型 指南。

  1. 为 Kaldi LibriSpeech nnet2 模型启动模型优化器:

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

有关更多信息,请参阅 转换 Kaldi 模型 指南。