跳至内容

索尼 IMX500 出口用于Ultralytics YOLOv8

本指南涵盖将Ultralytics YOLOv8 模型导出和部署到配备索尼 IMX500 传感器的 Raspberry Pi AI 相机。

在计算能力有限的设备(如Raspberry Pi AI Camera)上部署计算机视觉模型可能很棘手。使用为提高性能而优化的模型格式会带来巨大的不同。

IMX500 型号格式旨在使用最少的功率,同时为神经网络提供快速性能。它允许你优化你的 Ultralytics YOLOv8模型进行优化,以实现高速和低功耗推理。在本指南中,我们将指导您将模型导出并部署为 IMX500 格式,同时使您的模型更容易在Raspberry Pi AI 摄像头上良好运行。

树莓派人工智能摄像头

为什么要导出到 IMX500

索尼的IMX500 智能视觉传感器是边缘人工智能处理领域一款改变游戏规则的硬件。它是全球首款具有片上人工智能功能的智能视觉传感器。该传感器有助于克服边缘人工智能领域的诸多挑战,包括数据处理瓶颈、隐私问题和性能限制。
其他传感器只是传递图像和帧,而 IMX500 却能讲述一个完整的故事。它直接在传感器上处理数据,让设备能够实时产生洞察力。

索尼 IMX500 出口YOLOv8 机型

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

IMX500 可使用量化模型。量化可使模型更小、更快,而不会损失太多精度。它是边缘计算有限资源的理想选择,通过减少延迟和在本地快速处理数据,使应用程序能够快速响应,而无需依赖云。本地处理还能保证用户数据的私密性和安全性,因为数据不会发送到远程服务器。

IMX500 主要功能

  • 元数据输出:IMX500 可以同时输出图像和元数据(推理结果),而不是只传输图像,也可以只输出元数据,以尽量减小数据量、减少带宽和降低成本。
  • 解决隐私问题:通过在设备上处理数据,IMX500 解决了隐私问题,是人员计数和占用跟踪等以人为本的应用的理想之选。
  • 实时处理:快速的传感器处理支持实时决策,非常适合自主系统等边缘人工智能应用。

开始之前:为获得最佳效果,请按照我们的《模型训练指南》、《数据准备指南》和《超参数调整指南》,确保您的YOLOv8 模型为导出做好充分准备。

使用示例

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

备注

在这里,我们进行推理只是为了确保模型能按预期运行。不过,要在树莓派人工智能相机上进行部署和推理,请跳转到 "部署"部分的 "使用 IMX500 导出"。

示例

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

# Run inference with the exported model
yolo predict model=yolov8n_imx_model source='https://ultralytics.com/images/bus.jpg'

导出过程将创建一个ONNX 模型用于量化验证,同时创建一个名为 <model-name>_imx_model.该目录将包括 packerOut.zip 文件,这对打包模型以便在 IMX500 硬件上部署至关重要。此外,该 <model-name>_imx_model 文件夹将包含一个文本文件 (labels.txt) 列出了与模型相关的所有标签。

yolov8n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolov8n_imx.onnx
├── yolov8n_imx500_model_MemoryReport.json
└── yolov8n_imx500_model.pbtxt

论据

将模型导出为 IMX500 格式时,可以指定各种参数:

钥匙 价值 说明
format imx 导出格式(imx)
int8 True 为模型启用 INT8 量化(默认值: True)
imgsz 640 模型输入的图像大小(默认值: 640)

在部署中使用 IMX500 导出

将Ultralytics YOLOv8n 模型导出为 IMX500 格式后,可将其部署到树莓派人工智能相机上进行推理。

硬件先决条件

确保有以下硬件:

  1. Raspberry Pi 5 或 Raspberry Pi 4 Model B
  2. 树莓派人工智能摄像头

将 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 imx500-tools

第 3 步:安装运行的先决条件 picamera2 应用程序。我们稍后将在部署过程中使用该应用程序。

sudo apt install python3-opencv python3-munkres

步骤 4:重启 Raspberry Pi 使更改生效

sudo reboot

打包模型并部署到人工智能相机

在获得 packerOut.zip 在 IMX500 转换过程中,您可以将此文件传入打包工具,以获得 RPK 文件。然后可使用以下工具将此文件直接部署到 AI 摄像机上 picamera2.

第 1 步:将模型打包成 RPK 文件

imx500-package -i <path to packerOut.zip> -o <output folder>

上述操作将生成一个 network.rpk 指定输出文件夹内的文件。

步骤 2:克隆 picamera2 安装,并导航至 imx500 示例

git clone -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

步骤 3: 使用 IMX500 导出过程中生成的 labels.txt 文件,运行YOLOv8 对象检测。

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --ignore-dash-labels --bbox-order xy --labels <path to labels.txt>

然后,您就可以看到实时推理输出,如下所示

树莓派人工智能摄像头推理

基准

YOLOv8 以下基准测试由Ultralytics 团队在 Raspberry Pi AI 摄像头上运行,该摄像头配备了 imx 模型格式测量速度和精度。

模型 格式 现状 大小(MB) mAP50-95(B) 推理时间(毫秒/分钟)
YOLOv8n imx 2.9 0.522 66.66

备注

使用 coco8 数据集对上述基准进行了验证

引擎盖下有什么?

IMX500 部署

索尼模型压缩工具包(MCT)

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

MCT 的支持功能

索尼的 MCT 具有一系列旨在优化神经网络模型的功能:

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

量化

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

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

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

  1. 二合一电源(硬件友好型)
  2. 对称
  3. 制服

结构化修剪

MCT 引入了针对特定硬件架构设计的结构化硬件感知模型剪枝技术。该技术通过剪枝 SIMD 组,充分利用目标平台的单指令多数据(SIMD)功能。这样可以减少模型大小和复杂性,同时优化通道利用率,并与 SIMD 架构保持一致,以便有针对性地利用加权内存空间。通过 Keras 和PyTorch API 提供。

IMX500 转换器工具(编译器)

IMX500 转换器工具是 IMX500 工具集的组成部分,可编译用于索尼 IMX500 传感器(例如 Raspberry Pi AI 相机)的部署模型。该工具有助于通过Ultralytics 软件处理的Ultralytics YOLOv8 模型的转换,确保它们在指定硬件上兼容并高效运行。模型量化后的导出程序包括生成二进制文件,这些文件封装了基本数据和特定设备配置,从而简化了在 Raspberry Pi AI 相机上的部署过程。

真实世界使用案例

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

  • 边缘人工智能和物联网:在无人机或安防摄像头上实现物体检测,在这种情况下,必须在低功耗设备上进行实时处理。
  • 可穿戴设备:在健康监测可穿戴设备上部署为小规模人工智能处理而优化的模型。
  • 智能城市:使用 IMX500 导出的YOLOv8 模型进行交通监控和安全分析,处理速度更快,延迟最小。
  • 零售分析:通过在销售点系统或智能货架上部署优化模型,加强店内监控。

结论

将Ultralytics YOLOv8 模型导出为索尼 IMX500 格式后,您就可以在基于 IMX500 的相机上部署模型,进行高效推理。利用先进的量化技术,您可以缩小模型大小,提高推理速度,而不会明显影响精度。

更多信息和详细指南,请参阅索尼IMX500 网站

常见问题

如何为 Raspberry Pi AI 相机将YOLOv8 模型导出为 IMX500 格式?

要将YOLOv8 模型导出为 IMX500 格式,请使用Python API 或CLI 命令:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

导出过程将创建一个目录,其中包含部署所需的文件,包括 packerOut.zip 可与 Raspberry Pi 上的 IMX500 打包工具一起使用。

使用 IMX500 格式进行边缘人工智能部署的主要优势是什么?

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

  • 片上人工智能处理减少了延迟和功耗
  • 同时输出图像和元数据(推理结果),而不是只输出图像
  • 无需依赖云,在本地处理数据,提高隐私性
  • 实时处理功能是时间敏感型应用的理想选择
  • 优化量化,在资源有限的设备上高效部署模型

部署 IMX500 需要哪些硬件和软件前提条件?

部署 IMX500 型号时,您需要

硬件

  • Raspberry Pi 5 或 Raspberry Pi 4 Model B
  • 配备 IMX500 传感器的树莓派人工智能相机

软件

  • 树莓派操作系统书虫
  • IMX500 固件和工具 (sudo apt install imx500-all imx500-tools)
  • Python 套餐为 picamera2 (sudo apt install python3-opencv python3-munkres)

YOLOv8 型号在 IMX500 上的性能如何?

基于Ultralytics Raspberry Pi AI 摄像头基准测试:

  • YOLOv8n 每幅图像的推理时间达到 66.66ms
  • COCO8 数据集的 mAP50-95 为 0.522
  • 量化后的模型大小仅为 2.9MB

这表明,IMX500 格式可为边缘人工智能应用提供高效的实时推理,同时保持良好的精度。

如何将导出的模型打包并部署到 Raspberry Pi AI 摄像机?

导出为 IMX500 格式后:

  1. 使用打包工具创建 RPK 文件:

    imx500-package -i <path to packerOut.zip> -o <output folder>
    
  2. 克隆并安装 picamera2:

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. 使用生成的 RPK 文件运行推理:

    python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --labels <path to labels.txt>
    
📅创建于 1 个月前 ✏️已更新 10 天前

评论