Meet YOLO26: next-gen vision AI.

Link to this section适用于 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

Link to this section为什么要导出为 IMX500 格式?#

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

Link to this section用于 YOLO11 模型的 Sony IMX500 导出#

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

IMX500 可与量化模型配合使用。量化可以在不损失太多 准确性 的前提下,使模型更小、更快。这非常适合资源有限的边缘计算环境,通过减少延迟和本地快速数据处理(无需依赖云端)来实现应用程序的快速响应。本地处理还能在数据不发送到远程服务器的情况下,保护用户隐私和安全。

IMX500 关键特性:

  • 元数据输出: IMX500 不仅能传输图像,还能输出图像和元数据(推理结果),或者仅输出元数据,从而最小化数据大小、减少带宽并降低成本。
  • 解决隐私问题: 通过在设备上处理数据,IMX500 解决了隐私问题,非常适合以人为中心的应用程序,如人员计数和占用追踪。
  • 实时处理: 快速的传感器内处理支持实时决策,非常适合自动驾驶系统等边缘 AI 应用。

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

Link to this section支持的任务#

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

支持的模型变体

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

Link to this section使用示例#

将 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 软件包会在运行时安装额外的导出依赖项。首次运行导出命令时,你可能需要重启控制台以确保其正常工作。

Link to this section导出参数#

参数类型默认值描述
formatstr'imx'导出模型的目标格式,定义了与各种部署环境的兼容性。
imgszinttuple640模型输入的期望图像尺寸。可以是一个用于正方形图像的整数,或者是一个用于特定尺寸的元组 (height, width)
int8boolTrue激活 INT8 量化,进一步压缩模型并加速推理,同时保持最小的 准确性 损失,主要针对边缘设备。
datastr'coco8.yaml'数据集 配置文件的路径(默认:coco8.yaml),这对量化至关重要。
fractionfloat1.0指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,这对于实验或资源受限时非常有用。如果启用 INT8 时未指定,将使用完整数据集。
nmsboolFalse向导出的模型添加非极大值抑制 (NMS)。当设为 True 时,还支持 confiouagnostic_nms
devicestrNone指定用于导出的设备: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

Link to this section在部署中使用 IMX500 导出#

将 Ultralytics YOLO11n 模型导出为 IMX500 格式后,即可将其部署到 Raspberry Pi AI Camera 上进行推理。

Link to this section硬件先决条件#

确保你拥有以下硬件:

  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。

Link to this section软件先决条件#

注意

本指南已在运行 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 步:使用 aitrios-rpi-application-module-library 示例 中提供的脚本来运行 YOLO11 目标检测、姿态估计、分类和分割。

注意

在运行这些脚本之前,请确保根据你的环境替换 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 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()

Link to this section基准测试#

以下 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)准确率 (top1)准确率 (top5)推理时间 (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
注意

上述基准测试的验证均使用了用于检测模型的 COCO128 数据集、用于姿态估计模型的 COCO8-Pose 数据集以及用于分类模型的 ImageNet10 数据集。

Link to this section底层原理是什么?#

Sony IMX500 YOLO model deployment workflow

Link to this sectionSony 模型压缩工具包 (MCT)#

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

Link to this sectionMCT 的支持功能#

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

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

Link to this section量化#

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. 均匀

Link to this section结构化剪枝#

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

Link to this sectionIMX500 转换工具 (编译器)#

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

Link to this section实际应用案例#

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

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

Link to this section结论#

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

有关更多信息和详细指南,请参阅 Sony 的 IMX500 网站

Link to this section常见问题解答#

Link to this section如何将 YOLO11 模型导出为 IMX500 格式以供 Raspberry Pi AI Camera 使用?#

要将 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

Link to this section使用 IMX500 格式进行边缘 AI 部署的主要优势是什么?#

IMX500 格式为边缘部署提供了几个重要优势:

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

Link to this sectionIMX500 部署需要哪些硬件和软件先决条件?#

部署 IMX500 模型时,你需要:

硬件:

  • Raspberry Pi 5 或 Raspberry Pi 4 Model B
  • 带有 IMX500 传感器的 Raspberry Pi AI Camera

软件:

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

Link to this section在 IMX500 上运行 YOLO11 模型可以获得什么样的性能?#

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

  • YOLO11n 每张图像实现 58.82ms 的推理时间
  • 在 COCO128 数据集上达到 0.517 的 mAP50-95
  • 量化后模型大小仅为 2.2MB

这表明 IMX500 格式在为边缘 AI 应用保持良好精度的同时,提供了高效的实时推理能力。

评论