Skip to main content

用于 Ultralytics YOLO11 的 Sony IMX500 导出

本指南涵盖了将 Ultralytics YOLO11 模型导出并部署到配备 Sony IMX500 传感器的 Raspberry Pi AI Camera 的过程。

在计算能力受限的设备上部署计算机视觉模型,例如 Raspberry Pi AI Camera,可能会比较棘手。使用针对更高性能优化的模型格式会带来巨大的差异。

IMX500 模型格式旨在以极低的功耗为神经网络提供高性能。它允许你优化你的 Ultralytics YOLO11 模型,以实现高速和低功耗推理。在本指南中,我们将引导你完成导出模型并将其部署为 IMX500 格式的过程,同时让你的模型更容易在 Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

为什么要导出到 IMX500?

Sony 的 IMX500 智能视觉传感器 是边缘 AI 处理领域的一款颠覆性硬件。它是世界上首款具有片上 AI 功能的智能视觉传感器。该传感器有助于克服边缘 AI 中的许多挑战,包括数据处理瓶颈、隐私问题和性能限制。虽然其他传感器仅仅是传递图像和帧,但 IMX500 能叙述整个故事。它直接在传感器上处理数据,使设备能够实时生成见解。

用于 YOLO11 模型的 Sony IMX500 导出

IMX500 旨在改变设备处理数据的方式,使其能够直接在传感器上完成处理,而无需将其发送到云端进行处理。

IMX500 支持量化模型。量化使模型更小、更快,同时不会损失太多的 Ultralytics YOLO26 中 benchmark 模式的用途是什么?。它非常适合边缘计算的有限资源,通过减少延迟和允许在本地快速处理数据来使应用程序快速响应,且无需依赖云端。本地处理还能保持用户数据的私密性和安全性,因为数据不会发送到远程服务器。

IMX500 主要功能:

  • 元数据输出: 与其仅传输图像,IMX500 可以同时输出图像和元数据(推理结果),也可以仅输出元数据,以最大限度地减小数据大小、减少带宽并降低成本。
  • 解决隐私问题: 通过在设备上处理数据,IMX500 解决了隐私问题,非常适合以人为中心的应用程序,如人数统计和占用情况跟踪。
  • 实时处理: 快速的传感器端处理支持实时决策,非常适合自动驾驶系统等边缘 AI 应用程序。

开始之前: 为了获得最佳结果,请确保你的 YOLO11 模型已通过遵循我们的以下指南为导出做好充分准备:模型训练指南, 数据准备指南,以及 超参数调整指南.

中引入变异,帮助模型更好地泛化到未见数据。下表概述了每个增强参数的目的和效果:

目前,你只能将包含以下任务的模型导出为 IMX500 格式。

支持的模型变体

IMX 导出专为 YOLOv8nYOLO11n (nano) 设计并进行了基准测试。不支持其他架构和模型规模。

使用示例

将 Ultralytics YOLO11 模型导出为 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")
警告

Ultralytics 包会在运行时安装额外的导出依赖项。首次运行导出命令时,你可能需要重启控制台以确保其正常工作。

导出参数

参数类型默认值描述
formatstr'imx'导出模型的目标格式,定义了与各种部署环境的兼容性。
imgszinttuple640模型输入的所需图像尺寸。可以是正方形图像的整数,也可以是一个元组(height, width) 对应 640×640)或用于指定维度的元组
int8boolTrue启用 FP16(半精度)量化,减小模型大小,并可能在支持的硬件上加速推理。不兼容 INT8 量化或仅 CPU 导出。仅适用于特定格式,如 ONNX(见下文)。Ultralytics YOLO26 中 benchmark 模式的用途是什么? 损失,主要用于边缘设备。
datastr'coco8.yaml')。TensorRT 导出自动使用 GPU。指向 配置文件(默认:coco8.yaml),这对于量化至关重要。
fractionfloat1.0进行校准。
nmsboolFalse将 NMS (Non-Maximum Suppression) 添加到导出模型中。当 True, conf, iou,以及 agnostic_nms 也被接受时。
devicestrNone模式下同时处理的最大图像数量。对于 Edge TPU 导出,此值自动设置为 1。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 以进行推理。

硬件先决条件

确保你拥有以下硬件:

  1. Raspberry Pi 5 或 Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

将 Raspberry Pi AI Camera 连接到 Raspberry Pi 上的 15 针 MIPI CSI 连接器,然后开启 Raspberry Pi

软件先决条件

注意

本指南已在运行 Raspberry Pi OS Bookworm 的 Raspberry Pi 5 上进行了测试

第 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_filelabels.txt 目录。

Python 脚本
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 DPS 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/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
参数浏览器上导出,无需任何本地设置。大小(像素)大小 packerOut.zip (MB)acc (top1)acc (top5)推理时间 (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
注意

上述基准测试的验证是使用用于检测模型的 COCO128 数据集、用于姿态估计模型的 COCO8-Pose 数据集和用于分类模型的 ImageNet10 完成的。

其内部原理是什么?

Sony IMX500 YOLO model deployment workflow

Sony 模型压缩工具包 (MCT)

Sony 的模型压缩工具包 (MCT) 是一个功能强大的工具,用于通过量化和剪枝来优化深度学习模型。它支持多种量化方法,并提供先进的算法来减小模型大小和计算复杂度,而不会显著牺牲精度。MCT 对于在资源受限的设备上部署模型特别有用,可确保高效的推理并减少延迟。

MCT 的支持功能

Sony 的 MCT 提供了一系列旨在优化神经网络模型的功能:

  1. 图优化: 通过将批归一化 (batch normalization) 等层折叠到前层中,将模型转换为更高效的版本。
  2. 量化参数搜索: 使用均方误差 (Mean-Square-Error)、不裁剪 (No-Clipping) 和平均绝对误差 (Mean-Average-Error) 等指标最小化量化噪声。
  3. 高级量化算法:
    • 负值偏移校正 (Shift Negative Correction): 解决对称激活量化带来的性能问题。
    • 离群值过滤 (Outliers Filtering): 使用 z-score 检测并移除离群值。
    • 聚类 (Clustering): 利用非均匀量化网格以实现更好的分布匹配。
    • 混合精度搜索 (Mixed-Precision Search): 根据灵敏度为每一层分配不同的量化位宽。
  4. 可视化: 使用 TensorBoard 观察模型性能指标、量化阶段和位宽配置。

量化

MCT 支持多种量化方法,以减小模型大小并提高推理速度:

  1. 训练后量化 (PTQ):
    • 可通过 Keras 和 PyTorch API 获取。
    • 复杂度:低
    • 计算成本:低(CPU 分钟级)
  2. 基于梯度的训练后量化 (GPTQ):
    • 可通过 Keras 和 PyTorch API 获取。
    • 复杂度:中
    • 计算成本:中等(2-3 个 GPU 小时)
  3. 量化感知训练 (QAT):
    • 复杂度:高
    • 计算成本:高(12-36 个 GPU 小时)

MCT 还支持针对权重和激活的各种量化方案:

  1. 2 的幂次方(硬件友好)
  2. 对称量化
  3. 均匀量化

结构化剪枝

MCT 引入了针对特定硬件架构设计的结构化、感知硬件的模型剪枝技术。此技术通过剪枝 SIMD 组来利用目标平台的单指令多数据 (SIMD) 能力。这在优化通道利用率的同时减小了模型大小和复杂度,并与 SIMD 架构对齐,从而实现了针对性的权重内存占用资源优化。可通过 Keras 和 PyTorch API 获取。

IMX500 转换工具(编译器)

IMX500 转换工具是 IMX500 工具集的重要组成部分,允许编译模型以部署在 Sony 的 IMX500 传感器上(例如 Raspberry Pi AI Camera)。此工具促进了通过 Ultralytics 软件处理后的 Ultralytics YOLO11 模型的转换,确保它们在指定硬件上兼容且运行高效。模型量化后的导出过程涉及生成封装基本数据和设备特定配置的二进制文件,从而简化了在 Raspberry Pi AI Camera 上的部署过程。

实际应用案例

导出为 IMX500 格式在各行各业具有广泛的应用。以下是一些示例:

  • 边缘 AI 和物联网: 在无人机或监控摄像头上实现目标检测,在低功耗设备上进行实时处理至关重要。
  • 可穿戴设备: 部署针对健康监测可穿戴设备进行小型 AI 处理优化的模型。
  • Smart Cities: 使用导出为 IMX500 的 YOLO11 模型进行交通监控和安全分析,处理速度更快且延迟极低。
  • 零售分析: 通过在销售点系统或智能货架中部署优化模型,增强店内监控。

document processing

将 Ultralytics YOLO11 模型导出为 Sony 的 IMX500 格式,让你能够部署模型以在基于 IMX500 的摄像头上进行高效推理。通过利用先进的量化技术,你可以在不显著牺牲准确性的前提下减小模型大小并提高推理速度。

如需更多信息和详细指南,请参考 Sony 的 IMX500 网站.

FAQ

如何将 YOLO11 模型导出为适用于 Raspberry Pi AI Camera 的 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 格式为边缘部署提供了几个重要优势:

  • 片上 AI 处理减少了延迟和功耗
  • 输出图像和元数据(推理结果)而不仅仅是图像
  • 通过在本地处理数据而无需依赖云,增强了隐私保护
  • 实时处理能力,非常适合时间敏感型应用
  • 优化的量化技术,可在资源受限的设备上实现高效的模型部署

进行 IMX500 部署需要哪些硬件和软件先决条件?

部署 IMX500 模型,你需要:

硬件:

  • Raspberry Pi 5 或 Raspberry Pi 4 Model B
  • 配备 IMX500 传感器的 Raspberry Pi AI Camera

软件:

  • Raspberry Pi OS Bookworm
  • IMX500 固件和工具(sudo apt install imx500-all)

YOLO11 模型在 IMX500 上能达到什么性能?

基于 Ultralytics 在 Raspberry Pi AI Camera 上的基准测试:

  • YOLO11n 每张图像的推理时间为 62.50ms
  • 在 COCO128 数据集上的 mAP50-95 为 0.492
  • 量化后模型大小仅为 3.2MB

这表明 IMX500 格式提供了高效的实时推理,同时为边缘 AI 应用保持了良好的准确性。

评论