本页目录

  • 概述
  • 转换
  • BlobConverter 网页界面
  • BlobConverter Python
  • BlobConverter API
  • 导出示例
  • 将模型导出为 ONNX
  • 使用 BlobConverter 将 ONNX 转换为 .blob

Blobconverter(旧版)

概述

BlobConverter 是我们的开源工具,支持转换为与 RVC2 和 RVC3 Luxonis 设备兼容的 MyriadX.blob)格式。 该工具可通过网页界面和 API 访问。 本节将引导你了解所有转换选项。

转换

BlobConverter 网页界面

  • 访问 BlobConverter 网站
  • 选择你希望使用的 OpenVINO 版本。我们将使用 BlobConverter 支持的最新版本,目前是 2022.1 对于 RAE 及其他搭载 RVC3 的设备,直接选择 RVC3 即可。选择版本后, 指定模型来源。本例中为 ONNX 模型,但也可以上传 IR 格式的模型。然后点击 Continue
Blobconverter 菜单
  • 点击 Choose file 上传 ONNX 文件。
Blobconverter 上传
  • 此外,在继续进行模型转换之前,你可以通过点击 Advanced 自定义 转换参数
Blobconverter 高级设置
  • 最后,点击 Convert,等待转换过程完成。

BlobConverter Python

我们也以 Python 包的形式提供了 BlobConverter(PyPI 链接)。你可以使用 pip 安装:
Command Line
1pip install blobconverter
现在,你可以使用指定的转换参数将 ONNX 模型转换为 blob。
Python
1import blobconverter
2
3blob_path = blobconverter.from_onnx(
4    model="/path/to/model.onnx",
5    data_type="FP16",
6    shaves=6,
7    version="2022.1"
8)
你可以在此处查看更多来自不同模型来源的转换示例。

BlobConverter API

或者,你也可以使用 BlobConverter API,这对于自动化工作流特别有用。 通过向 BlobConverter 服务发送 HTTP 请求,并附带所需的模型和参数即可完成。你可以在网站右上角点击 Use API 按钮,获取更多相关信息。

导出示例

本指南将引导你将 ResNet18(一种广泛用于图像分类的深度神经网络)导出为 .blob 文件,以便在 OAK 设备上部署。我们将使用 torchvision 来获取模型的预训练版本。

将模型导出为 ONNX

首先,我们将 ResNet18 模型从 PyTorch 导出为 ONNX 格式。
Python
1import torch
2import torchvision.models as models
3
4# 加载 torchvision 中的预训练 ResNet18 模型
5resnet18 = models.resnet18(pretrained=True)
6
7# 将模型设置为评估模式
8resnet18.eval()
9
10# 创建一个与模型输入形状匹配的虚拟输入张量
11dummy_input = torch.randn(1, 3, 224, 224)
12
13# 将模型导出为 ONNX 文件
14torch.onnx.export(
15resnet18,
16dummy_input,
17'resnet18.onnx',
18export_params=True,
19opset_version=11,
20input_names=['input'],
21output_names=['output']
22)
参数说明:
  • export_params:此标志确保训练好的参数与模型结构一起导出。
  • opset_version:指定要使用的 ONNX 版本。我们通常使用版本 11 以确保与 ResNet18 的要求兼容,但更高的版本也可能适用。
  • input_namesoutput_names:我们使用这些标志来命名模型的输入和输出节点,以便清晰明了。 在本例中,输入节点命名为 "input",输出节点命名为 "output"。
  • 导出后,你将得到一个名为 "resnet18.onnx" 的文件,如第三个参数所定义。

使用 BlobConverter 将 ONNX 转换为 .blob

我们无需手动将 ONNX 文件转换为 OpenVINO IR 再编译,而是使用 BlobConverter 处理这两个步骤。
  • 访问 BlobConverter 网站
  • 选择合适的 OpenVINO 版本,本例中为 2022.1
  • 上传 .onnx 文件,并在“高级”设置中输入必要的模型优化器参数。
  • --data_type:设置为 'FP16',以与 VPU 处理器的精度兼容。
  • --mean_values:设置为 [123.675, 116.28, 103.53]。这些值对应 ImageNet 数据集(ResNet18 的训练数据)中所有图像红色、绿色和蓝色通道的平均值。
  • --scale_values:设置为 [58.395, 57.12, 57.375],即每个通道的标准差。此缩放确保输入图像的像素值范围与训练数据中的范围匹配,这对模型正确执行至关重要。
  • --reverse_input_channels:使用此标志将 BGR 转换为 RGB, 因为 Camera 节点输出 BGR 格式的帧,而模型需要 RGB 图像。
  • 最后,这些标志应如下所示:
Command Line
1--data_type=FP16 --mean_values=[123.675,116.28,103.53] --scale_values=[58.395,57.12,57.375] --reverse_input_channels
  • 点击 Convert 开始转换,然后等待过程完成后下载 .blob 文件。
ResNet18 转换
按照这些说明操作后,你将得到一个 resnet18.blob 文件,可在 OAK 设备上进行推理。 转换后的模型将期望输入 BGR 格式、像素值范围为 0 到 255 的图像。然后这些值将被缩放到 0 到 1 的范围,并使用我们设置的标志进行归一化。