ModelConverter
有关在线使用 ModelConverter 工具的指南,请参考 HubAI 转换。
概述
- ModelConverter Docker 镜像 - 针对特定目标的容器镜像,捆绑了所需的转换工具链。
- ModelConverter CLI -
modelconverter命令,用于运行转换、打开交互式 shell 以及访问推理、基准测试和分析工具。
安装
Command Line
1pip install modelconvmodelconverter --help 查看可用的命令和选项。高级工作流可使用可选扩展:pip install "modelconv[bench]"用于modelconverter benchmarkpip install "modelconv[analysis]"用于 RVC4 DLC 分析与可视化
准备工作
模型来源
- ONNX (
.onnx), - OpenVINO IR (
.xml和.bin),或 - TensorFlow Lite (
.tflite)。
校准数据(可选)
.jpg、.png 或 .jpeg)的目录。 ModelConverter 会自动将它们处理为合适的格式。 请确保用于校准的图像与用于训练模型的图像不同。 通常,验证数据集用于此目的。 此外,您也可以提供 .npy 或 .raw 文件作为校准数据。 但请注意,这些文件不会进行自动处理,因此请确保正确准备它们 (例如,对于 RVC4 转换,布局需为 NHWC)。共享文件夹
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/app/shared_with_container/ 进行解析。可使用 --output-dir 设置 output_dir;否则,它将根据模型名称、目标名称和时间戳自动生成。转换
- 为目标模型准备一个配置文件或 NN Archive。
- 如果使用本地文件,请将相关的模型文件、配置文件、NN Archive 文件和校准数据放入
shared_with_container的子目录中。 如果从 NN Archive 进行转换,则无需提供模型文件。 校准数据为可选,仅当您计划在转换过程中量化模型时才需提供。 - 使用
--path参数指向挂载文件夹内的配置文件或 NN Archive 来运行转换。 或者,也可以提供s3://和gcs://URL。
Command Line
1modelconverter convert <platform> --path <url_or_path> [ conversion parameter overrides ]常用 CLI 选项
| 选项 | 描述 |
|---|---|
--tool-version | 选择底层转换工具版本。 |
--image | 使用特定的 Docker 镜像,而不是默认的标签查找。 |
--output-dir | 在 shared_with_container/outputs 下设置输出目录名称。 |
--to | 选择输出打包格式,例如 native 或 nn_archive。 |
--archive-preprocess | 将预处理步骤存储在 NN Archive 中,而不是嵌入到模型中。 |
对于本地构建的镜像,CLI 期望标签格式为
luxonis/modelconverter-rvc4:<tool-version>-latest。如果您使用自定义标签,请使用 --image 明确传递。对于
RVC4,完整的 SNPE 构建版本(例如 2.32.6.250402)允许 CLI 在首次构建时自动下载归档,前提是该版本存在于高通的目录中。短版本(如 2.32.6)则假定归档或镜像已本地可用。要为您的部署目标选择合适的 SNPE 版本,请参阅 转换疑难解答中的 SNPE 兼容性表。对于超过 2 GB 的 ONNX 模型,外部数据 文件必须与模型位于同一目录,且命名为
<model>.onnx_data。如果从 NN Archive 转换,请在归档中同时包含 .onnx 文件和对应的 .onnx_data 文件。请注意,NN Archive 不包含任何校准数据信息,因此您必须通过设置 overrides 中的
calibration 参数来手动提供校准数据。使用量化转换为 RVC4 的示例:Command Line
1modelconverter convert rvc4 --path archives/<nn_archive>.tar.xz \
2 calibration.path calibration_data/<calibration_data_dir>请注意,如果使用配置文件进行转换,并且您修改了 默认阶段名称(
stages.stage_name),则必须在 overrides 中提供每个阶段的完整路径。例如,如果阶段名称改为 stage1,则使用 stages.stage1.calibration.path 而不是仅仅 calibration.path。Command Line
1modelconverter convert rvc4 --path configs/<config_file>.yaml \
2 stages.stage1.calibration.path calibration_data/<calibration_data_dir>docker run 命令运行转换: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> [ conversion parameter overrides ]多阶段转换
stages 部分进行配置。当前示例请参阅 defaults.yaml 和 示例配置目录。交互式 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 | 输入编码。可选值:RGB、BGR、GRAY 或 NONE | - | "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 | 指定如何校准输入。详情请参阅 校准参数。 | - | - |
inputs 列表的参数也可以在 顶层 全局配置,省略 name 参数,此时这些参数将应用于所有模型输入。如果这些参数也在 inputs 列表内定义,则会覆盖针对 name 参数指定输入的全局配置。如果未指定任何输入,则将从模型推断得出。当
encoding 设置为单个值时,该值会自动同时应用于 encoding.from 和 encoding.to。如需使用不同的值,可以分别显式设置 encoding.from 和 encoding.to。输出
| 参数 | 描述 | 默认值 | 示例 |
|---|---|---|---|
name | 输出名称。 | - | "output_0" |
shape | 输出形状。 | - | [1, 1000] |
layout | 输出布局。 | - | "NC" |
data_type | 输出的数据类型。 | - | "float32" |
校准
随机
| 参数 | 描述 | 默认值 |
|---|---|---|
max_images | 用于校准的图像数量。 | 20 |
min_value | 输入数据的最小值。 | 0.0 |
max_value | 输入数据的最大值。 | 255.0 |
mean | 输入数据的均值。 | 127.5 |
std | 输入数据的标准差。 | 35.0 |
data_type | 输入数据的数据类型。 | "float32" |
引导式
| 参数 | 描述 | 默认值 |
|---|---|---|
path | 校准数据的路径。可以是本地路径、s3 或 gcs 网址。 | - |
max_images | 用于校准的图像数量。默认使用全部图像。 | -1 |
resize_method | 如何调整图像大小以匹配模型输入形状。可选值:"resize"、"pad" 或 "crop"。 | "resize" |
平台特定参数
RVC2
| 参数 | 描述 | 默认值 | 示例 |
|---|---|---|---|
superblob | 将模型编译为超 blob 格式。 | True | - |
compress_to_fp16 | 将模型权重压缩为 FP16 精度。 | True | - |
number_of_shaves | 使用 的 SHAVE 数量。仅当超 blob 转换禁用时使用。 | 8 | - |
number_of_cmx_slices | 使用的 CMX 切片数量。仅当超 blob 转换禁用时使用。 | 8 | - |
mo_args | 模型优化器的附加参数列表。以此方式提供的参数将始终优先于 ModelConverter 内部逻辑所指定的参数。 | [] | ["--use_legacy_frontend"] |
compile_tool_args | 编译工具的附加参数列表。以此方式提供的参数将始终优先于 ModelConverter 内部逻辑所指定的参数。 | [] | ["-ov_api_1_0"] |
RVC4
| 参数 | 描述 | 默认值 | 示例 |
|---|---|---|---|
snpe_onnx_to_dlc_args | SNPE ONNX 转 DLC 工具的附加参数列表。 | - | ["--batch", "6"] |
snpe_dlc_quant_args | SNPE DLC 量化工具的附加参数列表。 | - | ["--weights_bitwidth=16"] |
snpe_dlc_graph_prepare_args | SNPE DLC 图准备工具的附加参数列表。 | - | ["--htp_archs=v73"] |
keep_raw_images | 在中间数据中保留用于校准的原始图像。 | False | - |
use_per_channel_quantization | 对卷积、反卷积和全连接运算中的权重和偏置启用逐轴元素量化。 | True | - |
use_per_row_quantization | 对矩阵乘法和全连接运算启用逐行量化。 | False | - |
htp_socs | 目标 HTP SoC 列表。 | ["sm8550"] | ["sm8550", "sm8650", "qcs6490"] |
optimization_level | DLC 图准备的优化级别。可用选项为 1、2 和 3。 | 2 | - |
quantization_mode | 预定义的量化模式。 | INT8_STANDARD | - |
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:自定义量化模式,用户可以在配置文件或命令行参数中指定更高级的选项。
当
quantization_mode 设置为 CUSTOM 以外的任何值时,该模式的默认设置将覆盖配置文件或命令行参数中提供的任何自定义设置(通过 rvc4.snpe_onnx_to_dlc_args、rvc4.snpe_dlc_quant_args 或 rvc4.snpe_dlc_graph_prepare_args 覆盖选项)。配置文件
.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