Sony IMX500 导出,适用于 Ultralytics YOLO11#
本指南介绍如何将 Ultralytics YOLO11 模型导出并部署到配备 Sony IMX500 传感器的 Raspberry Pi AI Cameras。
在计算能力有限的设备(例如 Raspberry Pi AI Camera)上部署计算机视觉模型可能颇具挑战。使用针对更快性能优化的模型格式会带来显著改善。
IMX500 模型格式旨在以最低功耗为神经网络提供快速性能。它支持你优化 Ultralytics YOLO11 模型,以实现高速、低功耗推理。在本指南中,我们将带你完成模型导出和部署到 IMX500 格式的流程,同时帮助模型在 Raspberry Pi AI Camera 上实现良好性能。
为什么要导出为 IMX500?#
Sony 的 IMX500 Intelligent Vision Sensor 是边缘 AI 处理领域的一项突破性硬件。它是全球首款具备片上 AI 能力的智能视觉传感器。该传感器有助于解决边缘 AI 中的许多挑战,包括数据处理瓶颈、隐私问题和性能限制。 其他传感器只能传输图像和帧,而 IMX500 能够提供完整的信息。它直接在传感器上处理数据,使设备能够实时生成洞察。
Sony IMX500 导出 YOLO11 模型#
IMX500 旨在改变设备直接在传感器上处理数据的方式,无需将数据发送到云端进行处理。
IMX500 支持量化模型。量化可以在几乎不损失 准确率 的情况下缩小模型并提升速度。它非常适合边缘计算的有限资源,通过降低延迟并支持在本地快速处理数据,使应用能够快速响应,而无需依赖云端。本地处理还可以保护用户数据的隐私和安全,因为数据不会发送到远程服务器。
IMX500 主要特性:
- 元数据输出: IMX500 不仅可以传输图像,还可以同时输出图像和元数据(推理结果);还可以仅输出元数据,以最小化数据量、减少带宽占用并降低成本。
- 解决隐私问题: 通过在设备上处理数据,IMX500 可以解决隐私问题,非常适合人数统计和占用率跟踪等以人为中心的应用。
- 实时处理: 快速的传感器端处理支持实时决策,非常适合自动驾驶系统等边缘 AI 应用。
开始之前: 为获得最佳结果,请按照我们的 模型训练指南、数据准备指南 和 超参数调优指南 操作,确保你的 YOLO11 模型已为导出做好充分准备。
支持的任务#
IMX500 导出支持 Ultralytics 七项任务中的四项,且仅支持 YOLOv8n 和 YOLO11n:不支持其他模型系列、规模和架构;导出语义分割、OBB 或深度估计模型时会引发错误。
使用示例#
将 Ultralytics YOLO11 模型导出为 IMX500 格式,并使用导出的模型运行推理。
IMX500 格式支持 导出、预测 和 验证 模式。推理和验证在 Raspberry Pi AI Camera(IMX500)上运行。
这里运行推理只是为了确认模型按预期工作。不过,如需在 Raspberry Pi AI Camera 上进行部署和推理,请跳转到在部署中使用 IMX500 导出部分。
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model
model.export(format="imx", data="coco8.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")
# Export the model
model.export(format="imx", data="coco8-pose.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-cls PyTorch model
model = YOLO("yolo11n-cls.pt")
# Export the model
model.export(format="imx", data="imagenet10") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-cls_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Load a YOLO11n-seg PyTorch model
model = YOLO("yolo11n-seg.pt")
# Export the model
model.export(format="imx", data="coco8-seg.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-seg_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Ultralytics 软件包会在运行时安装额外的导出依赖项。首次运行导出命令时,可能需要重启控制台,以确保其正常工作。
导出参数#
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'imx' | 导出模型的目标格式,用于定义其与各种部署环境的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像尺寸。可以使用表示正方形图像的整数,也可以使用元组 (height, width) 指定具体尺寸。 |
quantize | int 或 str | 8/auto | 量化精度。8(INT8/PTQ)会针对 IMX500 自动启用;"w8a16" 会导出使用 INT8 权重和 FP16 激活值的模型。不支持仅使用 FP32 和 FP16 的导出。该选项取代已弃用的 half/int8 标志。 |
data | str | None | 数据集 YAML 的路径,是量化所必需的;分类任务则需要数据集目录或内置数据集名称。如果在使用 quantize=8 或 'w8a16' 时省略该参数,Ultralytics 会为相应模型任务选择默认校准数据集。 |
fraction | float、int 或 list | 1.0 | 校准子集可以按比例、图像数量或 [train, val, test] 的比例/数量指定。包含两个项目的列表会保留 test 的完整内容,同时跳过 0。 |
nms | bool,可选 | None | 选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 的检测头(False)。IMX 针对检测、分割和姿态估计需要 nms=True,并且会自动进行选择。 |
device | str | None | 指定导出设备:GPU(device=0)、CPU(device=cpu)。 |
如果你在支持 CUDA 的 GPU 上进行导出,请传入参数 device=0 以加快导出速度。
如需详细了解导出流程,请访问 Ultralytics 导出文档页面。
导出过程会创建一个用于量化验证的 ONNX 模型,以及一个名为 <model-name>_imx_model 的目录。该目录将包含 packerOut.zip 文件,这是将模型打包并部署到 IMX500 硬件所必需的。此外,<model-name>_imx_model 文件夹将包含一个文本文件(labels.txt),其中列出了与模型关联的所有标签。
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt在部署中使用 IMX500 导出#
将 Ultralytics YOLO11n 模型导出为 IMX500 格式后,即可将其部署到 Raspberry Pi AI Camera 上运行推理。
硬件前提条件#
请确保你拥有以下硬件:
- Raspberry Pi 5 或 Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
将 Raspberry Pi AI camera 连接到 Raspberry Pi 上的 15 针 MIPI CSI 接口,然后为 Raspberry Pi 接通电源
软件前提条件#
本指南已在 Raspberry Pi 5 上运行的 Raspberry Pi OS Bookworm 中完成测试
步骤 1:打开终端窗口,执行以下命令,将 Raspberry Pi 软件更新到最新版本。
sudo apt update && sudo apt full-upgrade步骤 2:安装运行 IMX500 传感器所需的 IMX500 固件。
sudo apt install imx500-all步骤 3:重启 Raspberry Pi,使更改生效
sudo reboot步骤 4:安装 Aitrios Raspberry Pi 应用模块库
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git步骤 5:使用以下脚本运行 YOLO11 目标检测、姿态估计、分类和分割任务;这些脚本位于 aitrios-rpi-application-module-library 示例中。
运行这些脚本前,请根据你的环境替换 model_file 和 labels.txt 目录。
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics
class YOLO(Model):
"""YOLO model for IMX500 deployment."""
def __init__(self):
"""Initialize the YOLO model for IMX500 deployment."""
super().__init__(
model_file="yolo11n_imx_model/packerOut.zip", # replace with proper directory
model_type=MODEL_TYPE.CONVERTED,
color_format=COLOR_FORMAT.RGB,
preserve_aspect_ratio=False,
)
self.labels = np.genfromtxt(
"yolo11n_imx_model/labels.txt", # replace with proper directory
dtype=str,
delimiter="\n",
)
def post_process(self, output_tensors):
"""Post-process the output tensors for object detection."""
return pp_od_yolo_ultralytics(output_tensors)
device = AiCamera(frame_rate=16) # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)
annotator = Annotator()
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.55]
labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]
annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
frame.display()基准测试#
以下 YOLOv8n、YOLO11n、YOLOv8n-pose、YOLO11n-pose、YOLOv8n-cls 和 YOLO11n-cls 基准测试由 Ultralytics 团队在 Raspberry Pi AI Camera 上运行,使用 imx 模型格式测量速度和准确率。
| 模型 | 格式 | 尺寸(像素) | packerOut.zip 的大小(MB) | mAP50-95(B) | 推理时间(ms/图像) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| 模型 | 格式 | 尺寸(像素) | packerOut.zip 的大小(MB) | acc (top1) | acc (top5) | 推理时间(ms/图像) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
上述基准测试的验证使用的是 COCO128 数据集用于检测模型、COCO8-Pose 数据集用于姿态估计模型以及 ImageNet10 用于分类模型。
工作原理是什么?#
Sony 模型压缩工具包 (MCT)#
Sony 的模型压缩工具包 (MCT) 是一个强大的工具,可通过量化和剪枝优化深度学习模型。它支持多种量化方法,并提供高级算法,在不显著牺牲准确率的情况下减小模型大小和计算复杂度。MCT 尤其适合在资源受限的设备上部署模型,确保高效推理并降低延迟。
MCT 支持的特性#
Sony 的 MCT 提供了一系列用于优化神经网络模型的特性:
- 图优化:将批归一化等层折叠到前置层中,把模型转换为更高效的版本。
- 量化参数搜索:使用均方误差、无裁剪误差和平均绝对误差等指标,最大限度地减少量化噪声。
- 高级量化算法:
- 负向偏移校正:解决对称激活量化造成的性能问题。
- 异常值过滤:使用 z-score 检测并移除异常值。
- 聚类:使用非均匀量化网格,以更好地匹配分布。
- 混合精度搜索:根据敏感度为每层分配不同的量化位宽。
- 可视化:使用 TensorBoard 查看模型性能洞察、量化阶段和位宽配置。
量化#
MCT 支持多种量化方法,可减小模型大小并提升推理速度:
- 训练后量化 (PTQ):
- 可通过 Keras 和 PyTorch API 使用。
- 复杂度:低
- 计算成本:低(CPU 分钟级)
- 基于梯度的训练后量化 (GPTQ):
- 可通过 Keras 和 PyTorch API 使用。
- 复杂度:中等
- 计算成本:中等(2–3 个 GPU 小时)
- 量化感知训练 (QAT):
- 复杂度:高
- 计算成本:高(12–36 个 GPU 小时)
MCT 还支持多种用于权重和激活值的量化方案:
- 二的幂次方(硬件友好)
- 对称
- 均匀
结构化剪枝#
MCT 引入了面向特定硬件架构的结构化、硬件感知模型剪枝。该技术通过剪枝 SIMD 组,利用目标平台的单指令多数据 (SIMD) 能力。它可以减小模型大小和复杂度,同时优化通道利用率,并结合 SIMD 架构实现目标资源利用率下的权重内存占用。可通过 Keras 和 PyTorch API 使用。
IMX500 转换工具(编译器)#
IMX500 转换工具是 IMX500 工具集的重要组成部分,可将模型编译为部署到 Sony IMX500 传感器(例如 Raspberry Pi AI Cameras)上的格式。该工具支持将经过 Ultralytics 软件处理的 Ultralytics YOLO11 模型转换为兼容指定硬件并高效运行的形式。模型量化后的导出过程会生成包含必要数据和设备特定配置的二进制文件,从而简化在 Raspberry Pi AI Camera 上的部署流程。
实际应用场景#
导出为 IMX500 格式可广泛应用于各个行业。以下是一些示例:
- 边缘 AI 和物联网:在无人机或安全摄像头上启用目标检测,这类场景需要低功耗设备进行实时处理。
- 可穿戴设备:在健康监测类可穿戴设备上部署针对小规模 AI 处理优化的模型。
- 智慧城市:使用导出为 IMX500 格式的 YOLO11 模型进行交通监控和安全分析,以实现更快的处理速度和更低的延迟。
- 零售分析:在销售点系统或智能货架中部署优化后的模型,增强店内监控能力。
结论#
将 Ultralytics YOLO11 模型导出为 Sony IMX500 格式后,你可以在基于 IMX500 的摄像头上部署模型,实现高效推理。借助先进的量化技术,你可以减小模型大小并提升推理速度,同时不会显著影响准确率。
如需更多信息和详细指南,请参阅 Sony 的 IMX500 网站。
常见问题#
要将 YOLO11 模型导出为 IMX500 格式,请使用 Python API 或 CLI 命令:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # Exports with PTQ quantization by default导出过程会创建一个包含部署所需文件的目录,其中包括
packerOut.zip。IMX500 格式为边缘部署带来多项重要优势:
- 片上 AI 处理可降低延迟和功耗
- 不仅输出图像,还输出图像和元数据(推理结果)
- 在本地处理数据,无需依赖云端,从而增强隐私保护
- 具备实时处理能力,非常适合对时效性要求高的应用
- 经过优化的量化方案,可在资源受限的设备上高效部署模型
要部署 IMX500 模型,你需要:
硬件:
- Raspberry Pi 5 或 Raspberry Pi 4 Model B
- 配备 IMX500 传感器的 Raspberry Pi AI Camera
软件:
- Raspberry Pi OS Bookworm
- IMX500 固件和工具(
sudo apt install imx500-all)
根据 Ultralytics 在 Raspberry Pi AI Camera 上的基准测试:
- YOLO11n 的单张图像推理时间为 58.82ms
- 在 COCO128 数据集上的 mAP50-95 为 0.517
- 量化后的模型大小仅为 2.2MB
这表明,IMX500 格式能够在保持良好精度的同时,实现高效的实时推理,适用于边缘 AI 应用。