此页面由 AI 自动翻译。查看英文原版

本页目录

  • 概述
  • 安装
  • 准备
  • 模型来源
  • 校准数据(可选)
  • 共享文件夹
  • 转换
  • 通用 CLI 选项
  • 多阶段转换
  • 交互式 Shell
  • 参数
  • 顶层
  • 输入
  • Outputs
  • Calibration
  • Platform-Specific
  • 配置文件

ModelConverter

概述

ModelConverter 是我们用于在本地将神经网络模型转换为 Luxonis 设备部署格式的 开源 工具。 它包含:
  • ModelConverter Docker 镜像 - 特定目标平台的容器镜像,其中捆绑了所需的转换工具链。
  • ModelConverter CLI - 用于运行转换、打开交互式 shell 以及访问推理、基准测试和分析实用程序的 modelconverter 命令。

安装

ModelConverter 需要在您的系统上安装 Docker 建议使用 Ubuntu OS 以获得最佳兼容性。 在 Windows 或 macOS 上,建议使用 Docker Desktop 进行安装。 否则,请按照 官方网站 上的说明为您的操作系统进行安装。ModelConverter CLI 可以通过 Python 包索引 (PyPI) 安装,命令如下:
Command Line
1pip install modelconv
运行 modelconverter --help 以查看可用命令和选项。高级工作流程可用的可选附加组件:
  • pip install "modelconv[bench]" 用于 modelconverter benchmark
  • pip install "modelconv[analysis]" 用于 RVC4 DLC 分析和可视化
当本地镜像尚未提供时,CLI 可以在可能的情况下自动构建它们。有关特定目标平台的镜像可用性和先决条件,请参阅 仓库构建说明

准备

模型来源

您感兴趣的模型应为以下格式之一:
  • ONNX (.onnx)、
  • OpenVINO IR (.xml.bin) 或
  • TensorFlow Lite (.tflite)。
模型文件可以是独立的,也可以打包为 NN Archive

校准数据(可选)

如果您不打算在转换过程中量化模型,则可以跳过此步骤。 否则,请准备一个包含图像文件(.jpg.png.jpeg)的目录,用于指导量化。 ModelConverter 将自动将它们处理为适当的格式。 请确保用于校准的图像与用于训练模型的图像不同。 通常,验证数据集用于此目的。 您还可以选择提供 .npy.raw 格式的校准数据。 但是请注意,这些文件不会进行自动处理,因此请确保正确准备它们(例如,对于 RVC4 转换,请使用 NHWC 布局)。

共享文件夹

使用 CLI 时,请在当前工作目录中保留一个 shared_with_container 目录。它将在转换容器内挂载为 /app/shared_with_container/推荐的目录结构如下:
  • archives 用于存储 NN Archive,
  • calibration_data 用于存储校准数据,
  • configs 用于存储配置文件,
  • models 用于存储模型文件,
  • outputs 用于存储转换输出。
运行以下命令创建文件夹:
Command Line
1mkdir shared_with_container
2cd shared_with_container
3mkdir archives calibration_data configs models outputs
只要文件在容器内可见,此结构不是强制性的,但它有助于组织本地和下载的资产。ModelConverter 首先按提供的路径精确检查,然后相对于 /app/shared_with_container/ 解析该路径。output_dir 可以使用 --output-dir 设置;否则,它将根据模型名称、目标平台和时间戳自动生成。

转换

转换使用 ModelConverter CLI 进行。 该过程通过 转换参数 进行指导。 您可以在 配置文件 中定义它们,或者将模型来源提供为 NN Archive,ModelConverter 将自动为您填充转换参数。 此外,您可以在 CLI 上传递键值覆盖来更改单次运行的转换参数。要运行转换:
  1. 为您感兴趣的模型准备一个配置文件或 NN Archive。
  2. 如果使用本地文件,请将相关的模型文件、配置文件、NN Archive 文件和校准数据放在 shared_with_container 的相应子目录中。 在转换 NN Archive 时,无需提供模型文件。 校准数据是可选的,仅在计划在转换过程中量化模型时才应提供。
  3. 使用指向挂载文件夹内配置文件或 NN Archive 的 --path 参数运行转换。 或者,也可以提供 s3://gcs:// URL。
Command Line
1modelconverter convert <platform> --path <url_or_path> [ 转换参数覆盖 ]

通用 CLI 选项

选项描述
--tool-version选择底层转换工具的版本。
--image使用特定的 Docker 镜像,而不是默认的标签查找。
--output-dir设置 shared_with_container/outputs 下的输出目录名称。
--to选择输出打包格式,例如 nativenn_archive
--archive-preprocess将预处理存储在 NN Archive 中,而不是将其烘焙到模型中。
或者,您也可以通过使用 docker run 命令在没有 ModelConverter CLI 的情况下运行转换:
Command Line
1docker run --rm -it \
2    -v $(pwd)/shared_with_container:/app/shared_with_container/ \
3    luxonis/modelconverter-<platform>:<tool-version>-latest \
4    convert <platform> \
5    --path <s3_url_or_path> [ 转换参数覆盖 ]

多阶段转换

ModelConverter 还支持多阶段转换,其中一个模型的输出成为另一个模型的输入。这通过配置文件中的 stages 部分进行配置。有关当前示例,请参阅 defaults.yaml示例配置文件目录

交互式 Shell

如果您需要检查工具链或在容器内手动运行供应商工具,请打开一个交互式 Shell:
Command Line
1modelconverter shell rvc4

参数

以下各节总结了最常用的转换参数及其默认值。有关完整的当前选项集,请参阅 defaults.yaml当前示例配置文件

顶层

参数描述默认值
input_model模型源文件的路径。可以是本地路径或 s3 或 gcs URL。必需。-
inputs模型的输入列表。-
outputs模型的输出列表。-
disable_onnx_simplification禁用 ONNX 简化。False
disable_onnx_optimization禁用 ONNX 优化。False
keep_intermediate_outputs不删除中间文件。True

输入

inputs 是模型每个输入的参数列表。每个输入可以具有以下参数:
参数描述默认值示例
name输入的名称。-"input_0"
shape输入的形状。-[1, 3, 224, 224]
layout输入的布局。-"NCHW"
data_type输入的数据类型。-"float32"
encoding输入的编码。可以是以下之一:RGBBGRGRAYNONE-"RGB"
encoding.from 模型输入期望的编码。"RGB""RGB"
encoding.to导出的 模型应期望的编码。"BGR""BGR"
mean_values用于归一化输入的均值,遵循原始模型的通道顺序。可以是单个数字、数字列表或用于 ImageNet 归一化的 "imagenet" 字符串。-[ 123.675, 116.28, 103.53 ]
scale_values用于归一化输入的缩放值,遵循原始模型的通道顺序。可以是单个数字、数字列表或用于 ImageNet 归一化的 "imagenet" 字符串。-[ 58.395, 57.12, 57.375 ]
calibration指定如何校准输入。有关详细信息,请参阅 校准参数--

Outputs

ParameterDescriptionDefaultExample
name输出的名称。-"output_0"
shape输出的形状。-[1, 1000]
layout输出的布局。-"NC"
data_type输出的数据类型。-"float32"
如果未指定输出,它们将从模型中推断。

Calibration

校准数据可以通过两种方式指定:

Random

如果未提供校准数据,工具将生成随机数据进行校准。 不建议使用随机校准数据,因为它可能导致次优的量化结果。 此选项提供了一种快速测试转换过程的方法。
ParameterDescriptionDefault
max_images用于校准的图像数量。20
min_value输入数据的最小值。0.0
max_value输入数据的最大值。255.0
mean输入数据的平均值。127.5
std输入数据的标准差。35.0
data_type输入数据的数据类型。"float32"

Guided

此校准方法使用真实图像来校准模型。
ParameterDescriptionDefault
path校准数据的路径。可以是本地路径或 s3 或 gcs URL。-
max_images用于校准的图像数量。默认情况下,将使用整个数据集。-1
resize_method如何调整图像大小以适应模型输入形状。可以是以下之一:“resize”、“pad”或“crop”。"resize"

Platform-Specific

以下参数特定于各个目标平台:

RVC2

ParameterDescriptionDefaultExample
superblob将模型编译为 superblob 格式。True-
compress_to_fp16将模型权重压缩为 FP16 精度。True-
number_of_shaves要使用的 SHAVE 的数量。仅在禁用 superblob 转换时使用。8-
number_of_cmx_slices要使用的 CMX 切片数量。仅在禁用 superblob 转换时使用。8-
mo_argsModel Optimizer 的其他参数列表。此处提供的参数将 始终 优先于 ModelConverter 内部逻辑将要指定的参数。[]["--use_legacy_frontend"]
compile_tool_argsCompile Tool 的其他参数列表。此处提供的参数将 始终 优先于 ModelConverter 内部逻辑将要指定的参数。[]["-ov_api_1_0"]

RVC4

ParameterDescriptionDefaultExample
snpe_onnx_to_dlc_argsSNPE ONNX 到 DLC 工具的其他参数列表。-["--batch", "6"]
snpe_dlc_quant_argsSNPE DLC 量化工具的其他参数列表。-["--weights_bitwidth=16"]
snpe_dlc_graph_prepare_argsSNPE DLC 图准备工具的其他参数列表。-["--htp_archs=v73"]
keep_raw_images在中间数据中保留用于校准的原始图像。False-
use_per_channel_quantization为卷积、反卷积和全连接运算中的权重和偏置启用每通道量化。True-
use_per_row_quantization为 Matmul 和全连接运算启用行量化。False-
htp_socs要定位的 HTP SoC 列表。["sm8550"]["sm8550", "sm8650", "qcs6490"]
optimization_levelDLC 图准备的优化级别。可用选项为 1232-
quantization_mode预定义的量化模式。INT8_STANDARD-
Quantization Modes从 CLI 覆盖时,使用 rvc4.quantization_mode 在 RVC4 转换的各种预定义量化模式之间进行选择。可用模式为:
  • INT8_STANDARD: 标准 INT8 量化 带校准(默认),以获得最佳性能(FPS)和模型大小。
  • INT8_ACCURACY_FOCUSED: INT8 量化 带校准。此模式利用更高级的量化技术,在不降低性能或增加模型大小的情况下可能提高精度,具体取决于模型。
  • INT8_INT16_MIXED: 混合 INT8 和 INT16 量化 带校准。此模式在所有层中使用 8 位权重和 16 位激活,以提高数值稳定性和精度,但会降低性能(FPS)并增加模型大小。
  • INT8_INT16_MIXED_ACCURACY_FOCUSED: 混合 INT8 和 INT16 量化 带校准,使用更高级的量化技术,可能在降低性能(FPS)和增加模型大小的情况下提高精度。
  • FP16_STANDARD: FP16 量化 不带校准,适用于需要更高精度和数值稳定性的模型,但会降低性能(FPS)并增加模型大小。
  • CUSTOM: 自定义量化模式,用户可以在配置文件或通过命令行参数指定更高级的选项。

配置文件

转换参数可以在 .yaml 配置文件中定义。 请参阅下图或查阅其他 示例 以获取更多信息。
Yaml
1# 相对于 `shared_with_container` 目录的本地路径
2input_model: models/model.onnx
3
4mean_values: imagenet
5scale_values: imagenet
6data_type: float32
7shape: [ 1, 3, 256, 256 ]
8
9# ONNX 模型期望 RGB 输入,
10# 导出的模型将期望 BGR 输入
11encoding:
12  from: RGB
13  to: BGR
14
15calibration:
16  # 校准路径可以是 s3 url
17  path: s3://url/to/calibration_data.zip
18  max_images: 20