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?#

Интеллектуальный сенсор зрения IMX500 от Sony — это революционное аппаратное решение в области обработки данных периферийного ИИ. Это первый в мире интеллектуальный сенсор зрения со встроенными возможностями ИИ на кристалле. Этот сенсор помогает преодолеть многие проблемы периферийного ИИ, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В то время как другие сенсоры просто передают изображения и кадры, IMX500 «рассказывает целую историю». Он обрабатывает данные непосредственно на сенсоре, позволяя устройствам генерировать аналитические данные в режиме реального времени.

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

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

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

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

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

Перед тем как начать: Для получения наилучших результатов убедись, что твоя модель 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)
Сегментация экземпляров
 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 или tuple640Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для конкретных размеров.
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#

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

  1. Оптимизация графов: Преобразует модели в более эффективные версии путем объединения слоев, таких как пакетная нормализация, с предыдущими слоями.
  2. Поиск параметров квантования: Минимизирует шум квантования с использованием метрик, таких как среднеквадратичная ошибка (MSE), No-Clipping и средняя абсолютная ошибка (MAE).
  3. Передовые алгоритмы квантования:
    • Shift Negative Correction: Устраняет проблемы с производительностью, возникающие при симметричном квантовании активаций.
    • Фильтрация выбросов: Использует 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. Степень двойки (дружественная к оборудованию)
  2. Симметричная
  3. Равномерная

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

MCT представляет структурное, аппаратно-ориентированное прореживание моделей, разработанное для специфических аппаратных архитектур. Этот метод использует возможности Single Instruction, Multiple Data (SIMD) целевой платформы путем прореживания 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.

Комментарии