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

本页目录

  • 概述
  • 快速入门
  • Python API
  • 通用参数
  • YOLO 参数
  • RVC4 参数
  • HubAI 资源参数
  • CLI 参考
  • 从 BlobConverter 迁移
  • 简单转换
  • 从 OpenVINO IR 转换
  • 从 TFLite 转换
  • 高级参数
  • 从 tools.luxonis.com 迁移

HubAI

概述

HubAI 在云端利用 ModelConverter 这是一种将模型转换为 Luxonis 设备部署格式的便捷方式。 有关更多信息,请参阅 HubAI 转换 指南。要使用 Python 和 HubAI SDK 包直接执行转换,请参阅以下说明。有关 HubAI SDK 的安装和更多信息,请参阅 HubAI SDK 文档。

快速入门

要使用在线转换,您首先需要从 HubAI 获取 API 密钥。您可以通过注册免费帐户并在 团队设置 中生成 API 密钥来完成此操作。获得 API 密钥后,您可以使用以下代码运行转换:
Python
1import os
2
3from hubai_sdk import HubAIClient
4
5api_key = os.getenv("HUBAI_API_KEY")
6client = HubAIClient(api_key=api_key)
7
8converted_model = client.convert.RVC2(
9    path="path/to/model.onnx",
10    name="my-converted-model",
11)

Python API

在线转换的 Python API 在 HubAIClient.convert 命名空间下可用。针对各个目标的特定转换函数可以在目标名称下访问,例如 convert.RVC2convert.RVC4还有一个通用的转换入口点,如果您想以编程方式选择目标:
Python
1from hubai_sdk.utils.types import Target
2
3response = client.convert.convert(
4    target=Target.RVC2,
5    path="path/to/model.onnx",
6    name="my-converted-model",
7)
转换函数接受多个参数来指定模型和转换选项。此处列出了主要参数以供您开始使用,但请考虑查看 完整的 API 文档

通用参数

适用于所有转换函数的通用参数。
参数类型描述
pathstr模型文件的路径。
tool_versionstr | None转换工具的版本。
quantization_modeLiteral["INT8_STANDARD", "INT8_ACCURACY_FOCUSED", "INT8_INT16_MIXED", "FP16_STANDARD", "FP32_STANDARD"]目标支持的量化或精度预设,例如 INT8_STANDARDFP16_STANDARD
output_dirstr | None保存转换后模型的目录。如果未指定,模型将保存在当前工作目录中。

YOLO 参数

这些参数仅在转换 YOLO 模型时相关。
参数类型描述
yolo_input_shapelist[int] | NoneYOLO 模型的输入形状。
yolo_versionstr | NoneYOLO 版本(例如 "yolov8")。

RVC4 参数

RVC4 转换特有的参数。
参数类型描述
snpe_onnx_to_dlc_argslist[str] | None要传递给 snpe-onnx-to-dlc 工具的参数。
snpe_dlc_quant_argslist[str] | None要传递给 snpe-dlc-quant 工具的参数。
snpe_dlc_graph_prepare_argslist[str] | None要传递给 snpe-dlc-graph-prepare 工具的参数。
use_per_channel_quantizationbool是否使用逐通道量化。默认为 True
use_per_row_quantizationbool是否使用逐行量化。默认为 False
htp_socslist[str] | None要使用的 HTP SoC 列表。

HubAI 资源参数

转换 API 还可以在转换过程中创建或附加 HubAI 资源。常用参数包括:
参数类型描述
model_idstr | None使用现有模型,而不是创建新模型。
namestr | None要创建的模型名称。如果省略,SDK 将使用模型文件的基本名称。
license_typestr | NoneHubAI 模型资源的许可证元数据。
taskslist[str] | NoneHubAI 模型资源的任务元数据。
variant_idstr | None使用现有模型变体,而不是创建新变体。
variant_versionstr | None要创建的变体的版本标识符。
input_shapelist[int] | None要创建的模型实例的输入形状元数据。
有关模型、变体和模型实例参数的详细概述,请参阅完整 API 文档

CLI 参考

也可以使用命令行界面进行转换。 开始于:
Command Line
1hubai login
2hubai convert RVC2 --path /path/to/model.onnx --name "my-model"
有关选项的完整列表,请参阅 hubai convert --help

从 BlobConverter 迁移

BlobConverter 是我们之前用于将模型转换为 BLOB 格式以用于早期 OAK 转换工作流的库。该库正被 modelconverterHubAI SDK 取代,未来它们将成为唯一支持的转换方式。blobconverter 仍然可用,可用于转换,但我们建议在新项目中使用 HubAI SDKHubAI SDK 的 API 与 blobconverter 类似,但在参数和转换方式上存在一些差异。blobconverter 提供了几个用于从不同框架转换模型的函数,例如 from_onnxfrom_openvinofrom_tf。这些函数现在被 HubAI SDK 中的 convert.RVC2 函数取代,该函数接受一个参数 path,用于指定模型文件的路径。下表显示了 blobconverterHubAI SDK 参数之间的映射。参数按其目的分组。第一列显示 blobconverter 的参数,第二列显示 HubAI SDK 中的等效参数,第三列包含其他说明。
blobconverterHubAI SDK说明
modelpath模型文件路径。
xmlpathXML 文件路径。仅用于从 OpenVINO IR 转换。
binopts["input_bin"]BIN 文件路径。仅用于从 OpenVINO IR 转换。
versiontool_version转换工具的版本。
data_typequantization_mode模型的量化模式。
shavesnumber_of_shaves要使用的 shave 数量。
optimizer_paramsmo_args要传递给模型优化器的参数。
compile_paramscompile_tool_args要传递给 BLOB 编译器的参数。
默认情况下,HubAI SDK 启用了 superblob,这仅在 DepthAI v3 上受支持。如果要将模型转换为旧版 RVC2 格式 (blob),可以将 superblob=False 传递给 convert.RVC2 函数。

简单转换

使用 blobconverter 进行简单的 ONNX 转换
Python
1import blobconverter
2
3blob = blobconverter.from_onnx(
4    model="resnet18.onnx",
5)
使用 HubAI SDK 的等效代码
Python
1response = client.convert.RVC2(
2    path="resnet18.onnx",
3)
4
5blob = response.downloaded_path

从 OpenVINO IR 转换

blobconverter 示例
Python
1import blobconverter
2
3blob = blobconverter.from_openvino(
4    xml="resnet18.xml",
5    bin="resnet18.bin",
6)
HubAI SDK 示例
Python
1# 当 XML 和 BIN 文件位于同一位置时,
2# 仅需指定 XML
3response = client.convert.RVC2("resnet18.xml")
4blob = response.downloaded_path
5
6# 否则,可以使用
7# `opts` 参数指定 BIN 文件
8response = client.convert.RVC2(
9    path="resnet18.xml",
10    opts={
11        "input_bin": "resnet18.bin",
12    }
13)
14blob = response.downloaded_path

从 TFLite 转换

blobconverter
Python
1import blobconverter
2
3blob = blobconverter.from_tf(
4    frozen_pb="resnet18.tflite",
5)
使用 HubAI SDK 的等效代码
Python
1response = client.convert.RVC2(
2    path="resnet18.tflite",
3
4)
5
6blob = response.downloaded_path

高级参数

带高级参数的 blobconverter.from_onnx
Python
1import blobconverter
2
3blob = blobconverter.from_onnx(
4    model="resnet18.onnx",
5    data_type="FP16",
6    version="2021.4",
7    shaves=6,
8    optimizer_params=[
9        "--mean_values=[127.5,127.5,127.5]",
10        "--scale_values=[255,255,255]",
11    ],
12    compile_params=["-ip U8"],
13
14)
使用 HubAI SDK 的等效代码
Python
1response = client.convert.RVC2(
2    path="resnet18.onnx",
3    quantization_mode="FP16_STANDARD",
4    tool_version="2021.4.0",
5    number_of_shaves=6,
6    mo_args=[
7        "mean_values=[127.5,127.5,127.5]",
8        "scale_values=[255,255,255]"
9    ],
10    compile_tool_args=["-ip", "U8"],
11)
12
13blob = response.downloaded_path

Caffe 转换

不支持从 Caffe 框架进行转换。

从 tools.luxonis.com 迁移

托管在 tools.luxonis.com 上的 Tools Web 应用是我们用于轻松转换 YOLO 对象检测模型的旧版应用程序。现在,它正被 HubAI 在线转换所取代,未来它将成为唯一支持的转换方式。与 Web 应用程序相比,HubAI 在线转换还增加了对实例分割、姿态、定向检测和分类 YOLO 模型转换的支持。有关当前的转换功能,请参阅 HubAI 转换 文档。下面是一个如何轻松将现有的 .pth 文件转换为 RVC2 兼容的 .superblob 格式的示例。
Python
1from hubai_sdk import HubAIClient
2
3client = HubAIClient(api_key=api_key)
4
5converted_model = client.convert.RVC2(
6    path="yolov6n.pt",
7    yolo_version="yolov6r4",
8)
这将使用我们的 Hub 云服务进行转换,并在转换完成后,您将获得一个包含所有相关文件的 .tar.xz 文件。请考虑查看 YOLO 参数 部分,了解其他可用标志。