Meet YOLO26: next-gen vision AI.

Link to this sectionЭкспорт Sony IMX500 для Ultralytics YOLO11#

Это руководство охватывает экспорт и развертывание моделей Ultralytics YOLO11 на Raspberry Pi AI Camera, оснащенных сенсором Sony IMX500.

Развертывание моделей компьютерного зрения на устройствах с ограниченными вычислительными ресурсами, таких как 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. Этот сенсор помогает преодолеть многие проблемы в edge AI, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В то время как другие сенсоры просто передают изображения и кадры, IMX500 предоставляет полноценные данные. Он обрабатывает информацию непосредственно на сенсоре, позволяя устройствам формировать выводы в режиме реального времени.

Link to this sectionЭкспорт Sony IMX500 для моделей YOLO11#

IMX500 разработан для преобразования того, как устройства обрабатывают данные непосредственно на сенсоре, без необходимости отправки их в облако для вычислений.

IMX500 работает с квантованными моделями. Квантование делает модели меньше и быстрее без существенной потери точности. Это идеально подходит для ограниченных ресурсов периферийных вычислений, позволяя приложениям быстро реагировать за счет снижения задержек и локальной обработки данных без зависимости от облака. Локальная обработка также обеспечивает конфиденциальность и безопасность данных пользователя, так как они не отправляются на удаленный сервер.

Ключевые особенности IMX500:

  • Вывод метаданных: Вместо передачи только изображений IMX500 может выводить как изображения, так и метаданные (результат вывода), а также может выводить только метаданные для минимизации размера данных, уменьшения пропускной способности и снижения затрат.
  • Решение проблем конфиденциальности: Благодаря обработке данных на самом устройстве, IMX500 решает вопросы конфиденциальности, что идеально подходит для человеко-ориентированных приложений, таких как подсчет людей и отслеживание заполняемости помещений.
  • Обработка в реальном времени: Быстрая обработка на сенсоре поддерживает принятие решений в реальном времени, что идеально подходит для edge AI приложений, таких как автономные системы.

Перед началом: Для достижения наилучших результатов убедись, что твоя модель YOLO11 подготовлена к экспорту, следуя нашему Руководству по обучению моделей, Руководству по подготовке данных и Руководству по настройке гиперпараметров.

Link to this sectionПоддерживаемые задачи#

В настоящее время ты можешь экспортировать в формат IMX500 только те модели, которые включают следующие задачи.

Поддерживаемые варианты моделей

Экспорт в IMX разработан и протестирован для YOLOv8n и YOLO11n (nano). Другие архитектуры и масштабы моделей не поддерживаются.

Link to this sectionПримеры использования#

Экспортируй модель Ultralytics YOLO11 в формат IMX500 и выполни вывод с помощью экспортированной модели.

Формат IMX500 поддерживает режимы Export, Predict и Validate. Вывод и валидация выполняются на 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)
Instance Segmentation
 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'Целевой формат для экспортированной модели, определяющий совместимость с различными средами развертывания.
imgszint или tuple640Desired image size for the model input. Can be an integer for square images or a tuple (height, width) for specific dimensions.
int8boolTrueАктивирует квантование INT8, дополнительно сжимая модель и ускоряя вывод с минимальной потерей точности, в основном для периферийных устройств.
datastr'coco8.yaml'Путь к файлу конфигурации датасета (по умолчанию: coco8.yaml), что важно для квантования.
fractionfloat1.0Указывает долю набора данных для использования при калибровке квантования INT8. Позволяет выполнять калибровку на подмножестве полного набора данных, что полезно для экспериментов или при ограниченных ресурсах. Если не указано при включенном INT8, будет использоваться полный набор данных.
nmsboolFalseДобавляет Non-Maximum Suppression (NMS) в экспортированную модель. Когда True, также принимаются аргументы conf, iou и agnostic_nms.
devicestrNoneУказывает устройство для экспорта: GPU (device=0), CPU (device=cpu).
Совет

Если ты выполняешь экспорт на GPU с поддержкой CUDA, передай аргумент 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 к 15-контактному разъему MIPI CSI на Raspberry Pi и включи питание 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: Запусти детекцию объектов, оценку позы, классификацию и сегментацию с помощью 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()

Link to this sectionБенчмарки#

Бенчмарки YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls и YOLO11n-cls ниже были запущены командой Ultralytics на Raspberry Pi AI Camera с форматом модели imx для измерения скорости и точности.

МодельФорматРазмер (пиксели)Размер packerOut.zip (МБ)mAP50-95(B)Время вывода (мс/из)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
МодельФорматРазмер (пиксели)Размер packerOut.zip (МБ)acc (top1)acc (top5)Время вывода (мс/из)
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 Model Compression Toolkit (MCT)#

Sony's Model Compression Toolkit (MCT) — это мощный инструмент для оптимизации моделей глубокого обучения с помощью квантования и прунинга. Он поддерживает различные методы квантования и предоставляет передовые алгоритмы для уменьшения размера модели и вычислительной сложности без существенной потери точности. MCT особенно полезен для развертывания моделей на устройствах с ограниченными ресурсами, обеспечивая эффективный вывод и сниженные задержки.

Link to this sectionПоддерживаемые функции MCT#

Sony MCT предлагает ряд функций, предназначенных для оптимизации моделей нейронных сетей:

  1. Оптимизация графа: Преобразует модели в более эффективные версии путем свертывания слоев, таких как пакетная нормализация, в предыдущие слои.
  2. Поиск параметров квантования: Минимизирует шум квантования с использованием метрик, таких как среднеквадратичная ошибка (Mean-Square-Error), отсутствие отсечения (No-Clipping) и средняя абсолютная ошибка (Mean-Average-Error).
  3. Передовые алгоритмы квантования:
    • Коррекция отрицательного смещения: Решает проблемы производительности, возникающие при симметричном квантовании активаций.
    • Фильтрация выбросов: Использует z-оценку для обнаружения и удаления выбросов.
    • Кластеризация: Использует неравномерные сетки квантования для лучшего соответствия распределению.
    • Поиск смешанной точности: Назначает различную битность квантования для каждого слоя в зависимости от чувствительности.
  4. Визуализация: Используй TensorBoard для наблюдения за показателями производительности модели, фазами квантования и конфигурациями битности.

Link to this sectionКвантование#

MCT поддерживает несколько методов квантования для уменьшения размера модели и повышения скорости вывода:

  1. Квантование после обучения (PTQ):
    • Доступно через API Keras и PyTorch.
    • Сложность: Низкая
    • Вычислительные затраты: Низкие (минуты CPU)
  2. Градиентное квантование после обучения (GPTQ):
    • Доступно через API Keras и PyTorch.
    • Сложность: Средняя
    • Вычислительные затраты: Умеренные (2-3 часа GPU)
  3. Обучение с учетом квантования (QAT):
    • Сложность: Высокая
    • Вычислительные затраты: Высокие (12-36 часов GPU)

MCT также поддерживает различные схемы квантования для весов и активаций:

  1. Степенное (Power-of-Two, оптимизировано для оборудования)
  2. Симметричное
  3. Равномерная

Link to this sectionСтруктурное прунинг-прореживание#

MCT представляет структурное, аппаратно-ориентированное прореживание моделей, разработанное для конкретных аппаратных архитектур. Этот метод использует возможности SIMD (Single Instruction, Multiple Data) целевой платформы путем прореживания SIMD-групп. Это уменьшает размер и сложность модели, оптимизируя при этом использование каналов в соответствии с архитектурой SIMD для целенаправленного использования ресурсов памяти весов. Доступно через API Keras и PyTorch.

Link to this sectionИнструмент конвертации IMX500 (компилятор)#

Инструмент конвертации IMX500 является неотъемлемой частью набора инструментов IMX500, позволяя компилировать модели для развертывания на сенсоре Sony IMX500 (например, Raspberry Pi AI Camera). Этот инструмент облегчает перенос моделей Ultralytics YOLO11, обработанных с помощью программного обеспечения Ultralytics, обеспечивая их совместимость и эффективную работу на указанном оборудовании. Процедура экспорта после квантования модели включает создание бинарных файлов, которые содержат необходимые данные и специфические конфигурации устройства, упрощая процесс развертывания на Raspberry Pi AI Camera.

Link to this sectionПримеры практического применения#

Экспорт в формат IMX500 широко применим в различных отраслях. Вот некоторые примеры:

  • Edge AI и IoT: Включение обнаружения объектов на дронах или камерах видеонаблюдения, где необходима обработка в реальном времени на устройствах с низким энергопотреблением.
  • Носимые устройства: Развертывание моделей, оптимизированных для маломасштабной обработки ИИ на носимых устройствах для мониторинга здоровья.
  • Умные города: Использование моделей YOLO11, экспортированных для IMX500, для мониторинга трафика и анализа безопасности с более быстрой обработкой и минимальной задержкой.
  • Розничная аналитика: Улучшение мониторинга внутри магазинов за счет развертывания оптимизированных моделей в точках продаж или на «умных» полках.

Link to this sectionЗаключение#

Экспорт моделей Ultralytics YOLO11 в формат Sony IMX500 позволяет развертывать твои модели для эффективного инференса на камерах на базе IMX500. Используя передовые методы квантования, ты можешь уменьшить размер модели и повысить скорость инференса без существенной потери точности.

Для получения дополнительной информации и подробных руководств обратись к веб-сайту IMX500 Sony.

Link to this sectionFAQ#

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 для развертывания Edge AI?#

Формат IMX500 предлагает несколько важных преимуществ для развертывания на периферийных устройствах:

  • Внутричиповая обработка ИИ снижает задержку и энергопотребление
  • Вывод как изображения, так и метаданных (результата инференса) вместо только изображений
  • Повышенная конфиденциальность за счет обработки данных локально, без зависимости от облака
  • Возможности обработки в реальном времени, идеально подходящие для чувствительных ко времени приложений
  • Оптимизированное квантование для эффективного развертывания моделей на устройствах с ограниченными ресурсами

Link to this sectionКакие аппаратные и программные требования необходимы для развертывания IMX500?#

Для развертывания моделей IMX500 тебе понадобятся:

Оборудование:

  • Raspberry Pi 5 или Raspberry Pi 4 Model B
  • Raspberry Pi AI Camera с сенсором IMX500

Программное обеспечение:

  • Raspberry Pi OS Bookworm
  • Прошивка и инструменты IMX500 (sudo apt install imx500-all)

Link to this sectionКакую производительность я могу ожидать от моделей YOLO11 на IMX500?#

Основываясь на тестах производительности Ultralytics на Raspberry Pi AI Camera:

  • YOLO11n достигает времени инференса 58.82 мс на изображение
  • mAP50-95 составляет 0.517 на наборе данных COCO128
  • Размер модели после квантования составляет всего 2.2 МБ

Это демонстрирует, что формат IMX500 обеспечивает эффективный инференс в реальном времени, сохраняя при этом хорошую точность для приложений Edge AI.

Комментарии