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 Intelligent Vision Sensor 是一款在边缘 AI 处理领域具有革命意义的硬件。它是世界上第一个具有片上 AI 功能的智能视觉传感器。该传感器有助于克服边缘 AI 中的许多挑战,包括数据处理瓶颈、隐私问题和性能限制。 虽然其他传感器仅仅是传递图像和帧,但 IMX500 能够讲述完整的故事。它直接在传感器上处理数据,使设备能够实时生成洞察。

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

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

IMX500 与量化模型配合使用。量化可以在不损失太多 accuracy 的情况下使模型变得更小、更快。它非常适合边缘计算的有限资源,通过减少延迟和允许在本地快速处理数据(无需依赖云端)来使应用能够快速响应。本地处理还可以保持用户数据的私密和安全,因为数据不会发送到远程服务器。

IMX500 关键特性:

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

开始之前: 为获得最佳结果,请确保你的 YOLO11 模型已为导出做好充分准备,请遵循我们的 Model Training GuideData Preparation GuideHyperparameter Tuning Guide

Link to this section支持的任务#

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

支持的模型变体

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

Link to this section使用示例#

将 Ultralytics YOLO11 模型导出为 IMX500 格式,并使用导出的模型进行推理。

IMX500 格式支持 ExportPredictValidate 模式。推理和验证在 Raspberry Pi AI Camera (IMX500) 上运行。

注意

在这里我们执行推理只是为了确保模型按预期工作。但是,对于在 Raspberry Pi AI Camera 上的部署和推理,请跳转到 Using IMX500 Export in Deployment 部分。

目标检测
 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 量化,进一步压缩模型并加速推理,且 accuracy 损失极小,主要用于边缘设备。
datastr'coco8.yaml'dataset 配置文件的路径(默认: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 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 application module library

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

第 5 步:使用 aitrios-rpi-application-module-library examples 中提供的以下脚本运行 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's Model Compression Toolkit (MCT) 是一款通过量化和剪枝来优化深度学习模型的强大工具。它支持各种量化方法,并提供先进的算法来减小模型大小和计算复杂度,而不会显著牺牲准确性。MCT 对于在资源受限的设备上部署模型特别有用,可确保高效的推理并减少延迟。

Link to this sectionMCT 支持的功能#

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

  1. 图优化:通过将批归一化 (Batch Normalization) 等层折叠到前面的层中,将模型转换为更高效的版本。
  2. 量化参数搜索:使用均方误差 (Mean-Square-Error)、无剪辑 (No-Clipping) 和平均绝对误差 (Mean-Average-Error) 等指标最小化量化噪声。
  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 的幂 (Power-of-Two)(硬件友好型)
  2. 对称 (Symmetric)
  3. 均匀 (Uniform)

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 模型导出为 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

Link to this section使用 IMX500 格式进行边缘 AI 部署有哪些主要优势?#

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

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

Link to this section进行 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)

Link to this sectionYOLO11 模型在 IMX500 上可以达到什么样的性能?#

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

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

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

评论