适用于 Ultralytics YOLO11 的 Sony IMX500 导出
本指南介绍了如何将 Ultralytics YOLO11 模型导出和部署到配备 Sony IMX500 传感器的 Raspberry Pi AI 摄像头。
在计算能力有限的设备(如 Raspberry Pi AI Camera)上部署计算机视觉模型可能很棘手。使用针对更快性能优化的模型格式会产生巨大的差异。
IMX500 模型格式旨在以最小的功耗提供快速的神经网络性能。它允许您优化 Ultralytics YOLO11 模型,以实现高速和低功耗的推理。在本指南中,我们将引导您完成将模型导出和部署到 IMX500 格式的过程,同时使您的模型更容易在 Raspberry Pi AI 摄像头上表现良好。
为什么要导出到 IMX500
Sony 的 IMX500 智能视觉传感器是边缘 AI 处理领域中具有变革意义的硬件。它是世界上首款具有片上 AI 功能的智能视觉传感器。该传感器有助于克服边缘 AI 中的许多挑战,包括数据处理瓶颈、隐私问题和性能限制。
其他传感器仅仅传递图像和帧,而 IMX500 则讲述了一个完整的故事。它直接在传感器上处理数据,使设备能够实时生成见解。
用于 YOLO11 模型的 Sony IMX500 导出
IMX500 旨在改变设备直接在传感器上处理数据的方式,而无需将其发送到云端进行处理。
IMX500 适用于量化模型。量化使模型更小、更快,而不会损失太多准确性。它非常适合边缘计算的有限资源,通过减少延迟并允许在本地快速处理数据(无需云依赖)来使应用程序快速响应。本地处理还可以保护用户数据的隐私和安全,因为它不会发送到远程服务器。
IMX500 主要特性:
- 元数据输出: IMX500 不仅可以传输图像,还可以输出图像和元数据(推理结果),并且可以仅输出元数据以最大限度地减小数据大小、减少带宽并降低成本。
- 解决隐私问题: 通过在设备上处理数据,IMX500 解决了隐私问题,非常适合以人为本的应用,如人数统计和占用跟踪。
- 实时处理: 快速的传感器上处理支持实时决策,非常适合边缘 AI 应用,例如自动驾驶系统。
Before You Begin(开始之前): 为了获得最佳结果,请按照我们的模型训练指南、数据准备指南和超参数调整指南,确保您的 YOLO11 模型已为导出做好充分准备。
支持的任务
目前,您只能将包含以下任务的模型导出为 IMX500 格式。
使用示例
导出 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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml
# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='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")
# Export a YOLO11n-pose PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n-pose.pt format=imx data=coco8-pose.yaml
# Run inference with the exported model
yolo predict model=yolo11n-pose_imx_model source='https://ultralytics.com/images/bus.jpg'
警告
Ultralytics 软件包在运行时安装额外的导出依赖项。首次运行导出命令时,您可能需要重新启动控制台,以确保其正常工作。
导出参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
format |
str |
'imx' |
导出模型的目标格式,定义与各种部署环境的兼容性。 |
imgsz |
int 或 tuple |
640 |
模型输入的所需图像大小。 可以是正方形图像的整数或元组 (height, width) 用于指定特定维度。 |
int8 |
bool |
True |
激活 INT8 量化,进一步压缩模型并以最小的精度损失加快推理速度,主要用于边缘设备。 |
data |
str |
'coco8.yaml' |
路径指向 数据集 配置文件(默认: coco8.yaml ),这对于量化至关重要。 |
fraction |
float |
1.0 |
指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,这对于实验或资源有限时非常有用。如果未在使用 INT8 启用时指定,则将使用完整数据集。 |
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
├── yolo11n_imx.onnx
├── yolo11n_imx_MemoryReport.json
└── yolo11n_imx.pbtxt
yolo11n-pose_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n-pose_imx.onnx
├── yolo11n-pose_imx_MemoryReport.json
└── yolo11n-pose_imx.pbtxt
在部署中使用 IMX500 导出
将 Ultralytics YOLO11n 模型导出为 IMX500 格式后,可以将其部署到 Raspberry Pi AI Camera 以进行推理。
硬件先决条件
请确保您拥有以下硬件:
- Raspberry Pi 5 或 Raspberry Pi 4 Model B
- Raspberry Pi AI 摄像头
将 Raspberry Pi AI 摄像头连接到 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 examples 中找到。
注意
请务必替换 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 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()
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_yolo_pose_ultralytics
class YOLOPose(Model):
"""YOLO pose estimation model for IMX500 deployment."""
def __init__(self):
"""Initialize the YOLO pose estimation model for IMX500 deployment."""
super().__init__(
model_file="yolo11n-pose_imx_model/packerOut.zip", # replace with proper directory
model_type=MODEL_TYPE.CONVERTED,
color_format=COLOR_FORMAT.RGB,
preserve_aspect_ratio=False,
)
def post_process(self, output_tensors):
"""Post-process the output tensors for pose estimation."""
return pp_yolo_pose_ultralytics(output_tensors)
device = AiCamera(frame_rate=17) # Optimal frame rate for maximum DPS of the YOLO-pose model running on the AI Camera
model = YOLOPose()
device.deploy(model)
annotator = Annotator()
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.4]
annotator.annotate_keypoints(frame, detections)
annotator.annotate_boxes(frame, detections, corner_length=20)
frame.display()
基准测试
以下 YOLOv8n、YOLO11n、YOLOv8n-pose 和 YOLO11n-pose 基准测试由 Ultralytics 团队在 Raspberry Pi AI Camera 上运行,使用 imx
模型格式,用于衡量速度和准确性。
模型 | 格式 | 状态 | 大小 packerOut.zip (MB) |
mAP50-95(B) | 推理时间 (ms/im) |
---|---|---|---|---|---|
YOLOv8n | imx | ✅ | 2.1 | 0.470 | 58.79 |
YOLO11n | imx | ✅ | 2.2 | 0.517 | 58.82 |
YOLOv8n-pose | imx | ✅ | 2.0 | 0.687 | 58.79 |
YOLO11n-pose | imx | ✅ | 2.1 | 0.788 | 62.50 |
注意
上述基准测试的验证是使用 COCO128 数据集(用于检测模型)和 COCO8-Pose 数据集(用于姿势估计模型)完成的
底层原理是什么?
Sony 模型压缩工具包 (MCT)
Sony 的模型压缩工具包 (MCT) 是一款强大的工具,可通过量化和剪枝来优化深度学习模型。它支持各种量化方法,并提供先进的算法来减小模型尺寸和计算复杂度,而不会显着牺牲准确性。MCT 特别适用于在资源受限的设备上部署模型,从而确保高效的推理并减少延迟。
MCT 支持的功能
Sony 的 MCT 提供了一系列旨在优化神经网络模型的功能:
- 图优化: 通过将批归一化等层折叠到前面的层中,将模型转换为更高效的版本。
- 量化参数搜索: 使用均方误差、无削波和平均绝对误差等指标最大限度地减少量化噪声。
- 高级量化算法:
- 负向校正偏移: 解决对称激活量化带来的性能问题。
- 异常值过滤: 使用 z-score 检测并删除异常值。
- 聚类 (Clustering): 采用非均匀量化网格,以实现更好的分布匹配。
- 混合精度搜索: 根据灵敏度为每层分配不同的量化位宽。
- 可视化: 使用 TensorBoard 观察模型性能洞察、量化阶段和位宽配置。
量化
MCT 支持多种量化方法,以减少模型大小并提高推理速度:
- 训练后量化 (PTQ):
- 可通过 Keras 和 PyTorch API 获得。
- 复杂度:低
- 计算成本:低(CPU 分钟)
- 基于梯度的训练后量化 (GPTQ):
- 可通过 Keras 和 PyTorch API 获得。
- 复杂度:中等
- 计算成本:中等(2-3 GPU 小时)
- 量化感知训练 (QAT):
- 复杂度:高
- 计算成本:高(12-36 GPU 小时)
MCT 还支持各种权重和激活的量化方案:
- 2 的幂(硬件友好)
- 对称
- 均匀
结构化剪枝
MCT 引入了结构化的、硬件感知的模型剪枝,专为特定硬件架构设计。此技术通过剪枝 SIMD 组来利用目标平台的单指令多数据 (SIMD) 功能。这减少了模型大小和复杂性,同时优化了通道利用率,与 SIMD 架构对齐,以实现对权重内存占用有针对性的资源利用。可通过 Keras 和 PyTorch API 获得。
IMX500 转换器工具(编译器)
IMX500 转换器工具是 IMX500 工具集不可或缺的一部分,允许编译模型以部署在 Sony 的 IMX500 传感器(例如,Raspberry Pi AI 摄像头)上。此工具简化了通过 Ultralytics 软件处理的 Ultralytics YOLO11 模型的转换,确保它们在指定的硬件上兼容并高效运行。模型量化后的导出过程涉及生成二进制文件,这些文件封装了基本数据和设备特定的配置,从而简化了在 Raspberry Pi AI 摄像头上的部署过程。
实际应用案例
导出为 IMX500 格式在各行业中具有广泛的适用性。以下是一些示例:
- Edge AI 和 IoT:在无人机或安全摄像头上实现对象检测,在这些应用中,低功耗设备上的实时处理至关重要。
- 可穿戴设备: 在健康监测可穿戴设备上部署针对小规模 AI 处理优化的模型。
- 智慧城市: 使用 IMX500 导出的 YOLO11 模型进行交通监控和安全分析,具有更快的处理速度和最小的延迟。
- 零售分析: 通过在销售点系统或智能货架中部署优化模型来增强店内监控。
结论
将 Ultralytics YOLO11 模型导出为 Sony 的 IMX500 格式,您可以部署模型以在基于 IMX500 的相机上进行高效推理。通过利用先进的量化技术,您可以减小模型尺寸并提高推理速度,而不会显着降低准确性。
有关更多信息和详细指南,请参阅索尼的 IMX500 网站。
常见问题
如何将 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
.
将 IMX500 格式用于边缘 AI 部署的主要优势是什么?
IMX500 格式为边缘部署提供了几个重要的优势:
- 片上 AI 处理降低了延迟和功耗
- 输出图像和元数据(推理结果),而不仅仅是图像
- 通过在本地处理数据而无需依赖云来增强隐私
- 实时处理能力,非常适合对时间敏感的应用
- 优化的量化,可在资源受限的设备上高效部署模型
IMX500 部署需要哪些硬件和软件先决条件?
要部署 IMX500 模型,您需要:
硬件:
- Raspberry Pi 5 或 Raspberry Pi 4 Model B
- 带有 IMX500 传感器的 Raspberry Pi AI 摄像头
软件:
- Raspberry Pi OS Bookworm
- IMX500 固件和工具(
sudo apt install imx500-all
)
在 IMX500 上,YOLO11 模型能达到什么样的性能?
基于 Ultralytics 在 Raspberry Pi AI Camera 上的基准测试:
- YOLO11n 实现了每张图像 62.50 毫秒的推理时间
- COCO128数据集上的mAP50-95为0.492
- 量化后模型大小仅为 3.2MB
这表明 IMX500 格式提供了高效的实时推理,同时保持了边缘 AI 应用的良好准确性。