Skip to main content

Экспорт 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

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

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

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

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

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

Основные возможности IMX500:

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

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

Поддерживаемые задачи

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

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

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

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

Экспортируй модель 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")
Оценка позы
 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")
Classification
 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")
Предупреждение

Пакет Ultralytics устанавливает дополнительные зависимости для экспорта во время выполнения. При первом запуске команды экспорта тебе, возможно, потребуется перезапустить консоль, чтобы убедиться, что все работает правильно.

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

АргументТипПо умолчаниюОписание
formatstr'imx'Целевой формат для экспортируемой модели, определяющий совместимость с различными средами развертывания.
imgszint или tuple640Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для специфических размеров.
int8boolTrueАктивирует квантование INT8, дополнительно сжимая модель и ускоряя вывод с минимальной точности потери, в основном для пограничных (edge) устройств.
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

Использование экспорта IMX500 при развертывании

После экспорта модели Ultralytics YOLO11n в формат IMX500 ее можно развернуть на Raspberry Pi AI Camera для вывода.

Аппаратные требования

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

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

Подключи камеру Raspberry Pi AI к 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.

Примечание

Перед запуском этих скриптов не забудь заменить каталоги 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()

Бенчмарки

Бенчмарки 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 для моделей классификации.

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

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)

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

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

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

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

Квантование

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

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

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

  1. Степень двойки (адаптировано под аппаратное обеспечение)
  2. Симметричное
  3. Равномерное

Структурное прунинг-прореживание

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

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

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

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

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

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

Заключение

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

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

FAQ

Как экспортировать модель 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 предлагает несколько важных преимуществ для развертывания на границе сети:

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

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

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

Комментарии