Перейти к содержанию

Экспорт Sony IMX500 для Ultralytics YOLO11

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

Развертывание моделей компьютерного зрения на устройствах с ограниченной вычислительной мощностью, таких как Raspberry Pi AI Camera, может быть сложной задачей. Использование формата модели, оптимизированного для более высокой производительности, имеет огромное значение.

Формат модели IMX500 разработан для минимального энергопотребления при обеспечении высокой производительности для нейронных сетей. Он позволяет оптимизировать ваши модели Ultralytics YOLO11 для высокоскоростного и маломощного вывода. В этом руководстве мы расскажем, как экспортировать и развертывать ваши модели в формате IMX500, облегчая их эффективную работу на камере Raspberry Pi AI.

Raspberry Pi AI Camera

Зачем экспортировать в IMX500?

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

Экспорт Sony IMX500 от Sony для моделей YOLO11

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 устанавливает дополнительные зависимости экспорта во время выполнения. При первом запуске команды export может потребоваться перезагрузить консоль, чтобы убедиться, что она работает правильно.

Аргументы экспорта

Аргумент Тип По умолчанию Описание
format str 'imx' Целевой формат для экспортируемой модели, определяющий совместимость с различными средами развертывания.
imgsz int или tuple 640 Желаемый размер изображения для ввода модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для конкретных размеров.
int8 bool True Активирует квантование INT8, дополнительно сжимая модель и ускоряя вывод с минимальной потерей точности, в основном для периферийных устройств.
data str 'coco8.yaml' Путь к dataset файл конфигурации (по умолчанию: coco8.yaml), необходимые для квантования.
fraction float 1.0 Указывает долю набора данных, используемую для калибровки квантования INT8. Позволяет проводить калибровку на подмножестве полного набора данных, что полезно для экспериментов или при ограниченности ресурсов. Если не указано при включенном INT8, будет использован полный набор данных.
device str None Указывает устройство для экспорта: 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
├── 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 для вывода.

Предварительные требования к оборудованию

Убедитесь, что у вас есть следующее оборудование:

  1. Raspberry Pi 5 или Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Подключите AI-камеру Raspberry Pi к 15-контактному разъему MIPI CSI на Raspberry Pi и включите 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 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 и YOLO11n-pose, представленные ниже, были выполнены командой Ultralytics на камере Raspberry Pi AI Camera с imx формат модели, измеряющий скорость и точность.

Модель Формат Статус Размер packerOut.zip (МБ) mAP50-95(B) Время инференса (мс/изобр.)
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 для моделей оценки позы.

Что под капотом?

Развертывание IMX500

Sony Model Compression Toolkit (MCT)

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

Поддерживаемые функции MCT

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

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

Инструмент преобразования IMX500 (компилятор)

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

Реальные примеры использования

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

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

Заключение

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

Для получения дополнительной информации и подробных инструкций обратитесь к веб-сайту Sony 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 для развертывания edge AI?

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

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

Какие аппаратные и программные предпосылки необходимы для развертывания 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)

Какой производительности можно ожидать от моделей YOLO11 на IMX500?

На основе тестов Ultralytics на Raspberry Pi AI Camera:

  • YOLO11n достигает времени инференса 62,50 мс на изображение
  • mAP50-95, равный 0.492, на наборе данных COCO128
  • Размер модели всего 3.2MB после квантования

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



📅 Создано 9 месяцев назад ✏️ Обновлено 6 дней назад

Комментарии