Ultralytics YOLO27: 加入候补名单。
Get Started

Ultralytics YOLO11 的 Sony IMX500 导出#

本指南介绍如何将 Ultralytics YOLOv8n 和 YOLO11n 模型导出并部署到搭载 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 处理,Sony 称这是智能视觉传感器领域的世界首创。它有助于克服常见的边缘 AI挑战,包括数据处理瓶颈、隐私问题和性能限制。 传统传感器只能传递图像和视频帧,而 IMX500 可以解读捕获的内容,让设备实时生成洞察。

Sony IMX500 对 YOLO11 模型的导出#

IMX500 旨在直接在传感器上处理数据,无需将数据发送到云端处理。

IMX500 可处理量化模型。量化可以缩小模型并提升速度,同时不会显著损失准确率。它适合边缘计算资源有限的特点,可通过降低延迟并在本地快速处理数据来加快应用响应,无需依赖云端。本地处理还可以保护用户数据的隐私和安全,因为数据不会发送到远程服务器。

IMX500 的主要特性:

  • 元数据输出:IMX500 不仅可以传输图像,还可以同时输出图像和元数据(推理结果);也可以仅输出元数据,以尽量减小数据量、降低带宽占用和成本。
  • 解决隐私问题:通过在设备上处理数据,IMX500 能够解决隐私问题,因此非常适合人数统计和占用情况跟踪等以人为中心的应用。
  • 实时处理:快速的传感器端处理可支持自主系统等边缘 AI 应用进行实时决策。

开始之前:为获得最佳效果,请参照我们的模型训练指南、数据集概览和超参数调优指南,确保你的 YOLO11 模型已做好充分准备,可以导出。

支持的任务#

IMX500 导出支持 Ultralytics 七种任务中的四种,且仅适用于 YOLOv8n 和 YOLO11n:不支持其他模型系列、尺寸和架构;导出语义分割、OBB 或深度估计模型会引发错误。

任务YOLOv8YOLO11YOLO26
检测✅✅❌
分割✅✅❌
语义分割❌❌❌
深度估计❌❌❌
分类✅✅❌
姿态✅✅❌
OBB❌❌❌

使用示例#

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

IMX500 格式支持导出、预测和验证模式。Ultralytics 推理和验证会在主机 CPU 上运行导出的 model_imx.onnx。

注意

此处的推理仅用于确认导出的模型运行符合预期,之后再将模型部署到 Raspberry Pi AI Camera。

目标检测
from ultralytics import YOLO

# 加载 YOLO11n PyTorch 模型
model = YOLO("yolo11n.pt")

# 导出模型
model.export(format="imx", data="coco8.yaml")  # 默认使用 PTQ 量化进行导出

# 加载导出的模型
imx_model = YOLO("yolo11n_imx_model")

# 运行推理
results = imx_model("https://ultralytics.com/images/bus.jpg")
姿势估计
from ultralytics import YOLO

# 加载 YOLO11n-pose PyTorch 模型
model = YOLO("yolo11n-pose.pt")

# 导出模型
model.export(format="imx", data="coco8-pose.yaml")  # 默认使用 PTQ 量化进行导出

# 加载导出的模型
imx_model = YOLO("yolo11n-pose_imx_model")

# 运行推理
results = imx_model("https://ultralytics.com/images/bus.jpg")
分类
from ultralytics import YOLO

# 加载 YOLO11n-cls PyTorch 模型
model = YOLO("yolo11n-cls.pt")

# 导出模型
model.export(format="imx", data="imagenet10")  # 默认使用 PTQ 量化进行导出

# 加载导出的模型
imx_model = YOLO("yolo11n-cls_imx_model")

# 运行推理
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
实例分割
from ultralytics import YOLO

# 加载 YOLO11n-seg PyTorch 模型
model = YOLO("yolo11n-seg.pt")

# 导出模型
model.export(format="imx", data="coco8-seg.yaml")  # 默认使用 PTQ 量化进行导出

# 加载导出的模型
imx_model = YOLO("yolo11n-seg_imx_model")

# 运行推理
results = imx_model("https://ultralytics.com/images/bus.jpg")
验证
from ultralytics import YOLO

# 加载导出的 IMX500 模型
model = YOLO("yolo11n_imx_model")

# 在 COCO8 数据集上验证准确率
metrics = model.val(data="coco8.yaml")
警告

IMX 导出仅支持在 Linux 上使用 Python 3.10–3.12,且需要 Java 17 或更高版本。Ultralytics 包会在运行时安装额外的导出依赖。首次运行导出命令后,你可能需要重启控制台,以确保其正常工作。

导出参数#

参数类型默认值说明
formatstr'imx'导出模型的目标格式,用于定义与各种部署环境的兼容性。
imgszint 或 tuple640模型输入所需的图像尺寸。正方形图像可使用整数;若要指定具体尺寸,则可使用元组 (height, width)。
quantizeint 或 str8/自动量化精度。IMX500 要求使用 8 (INT8/PTQ),并会自动启用。不支持仅使用 FP32 或 FP16 导出。此设置取代已弃用的 half/int8 标志。
datastrNone数据集 YAML 文件的路径,是量化所必需的;分类任务则需要数据集目录或内置数据集名称。如果未指定,Ultralytics 会根据模型任务选择默认校准数据集。
fractionfloat、int 或 list1.0校准子集,可按比例、图像数量或 [train, val, test] 比例/数量指定。包含两个项目的列表会让 test 保持完整,而 0 会跳过它。
nmsbool,可选None选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 检测头(False)。对于检测、分割和姿态任务,IMX 要求使用 nms=True,并会自动选择该选项。
devicestrNone指定导出设备:GPU(device=0)、CPU(device=cpu)。

有关导出流程的更多详情,请访问 Ultralytics 导出文档页面。

导出过程会创建一个名为 <model-name>_imx_model 的目录。该目录包含用于量化验证的 model_imx.onnx,以及用于将模型打包并部署到 IMX500 硬件的必需文件 packerOut.zip。此外,<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_file 和 labels.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()

基准测试#

以下 YOLOv8n、YOLO11n、YOLOv8n-pose、YOLO11n-pose、YOLOv8n-cls 和 YOLO11n-cls 基准测试由 Ultralytics 团队在 Raspberry Pi AI 摄像头上使用 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。

底层原理#

Sony IMX500 YOLO model deployment workflow

Sony 模型压缩工具包 (MCT)#

Sony 模型压缩工具包(MCT)是一款通过量化和剪枝优化深度学习模型的工具包。它支持多种量化方法,并提供高级算法,在不显著牺牲准确率的情况下缩小模型尺寸、降低计算复杂度。MCT 特别适合在资源受限的设备上部署模型,可实现高效推理并降低延迟。

MCT 支持的功能#

Sony 的 MCT 提供了多种功能,用于优化神经网络模型:

  1. 计算图优化:通过将批量归一化等层折叠到前序层中,把模型转换为更高效的版本。
  2. 量化参数搜索:使用均方误差、无裁剪和平均绝对误差等指标,将量化噪声降至最低。
  3. 高级量化算法:
    • 负向偏移校正:解决对称激活量化导致的性能问题。
    • 离群值过滤:使用 z 分数检测并移除离群值。
    • 聚类:使用非均匀量化网格,以更好地匹配分布。
    • 混合精度搜索:根据敏感度为每一层分配不同的量化位宽。
  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. 对称
  3. 均匀

结构化剪枝#

MCT 引入了结构化、硬件感知的模型剪枝,专为特定硬件架构设计。该技术通过剪除 SIMD 组,利用目标平台的单指令多数据(SIMD)能力。它可以缩小模型尺寸并降低复杂度,同时优化通道利用率,使其与 SIMD 架构相匹配,从而有针对性地利用权重内存。可通过 Keras 和 PyTorch API 使用。

IMX500 转换工具(编译器)#

IMX500 Converter Tool 是 IMX500 工具集的重要组成部分,可编译模型并部署到 Sony 的 IMX500 传感器(例如 Raspberry Pi AI Camera)。它会将量化后的 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")  # 默认使用 PTQ 量化导出

    导出过程会创建一个目录,其中包含部署所需的文件,包括 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 应用保持良好的精度。

评论