Ultralytics YOLO27:

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

Это руководство посвящено экспорту и развёртыванию моделей Ultralytics YOLO11 на AI-камерах Raspberry Pi с сенсором 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 — революционное аппаратное решение для периферийной обработки ИИ. Это первый в мире интеллектуальный сенсор зрения со встроенными возможностями ИИ. Сенсор помогает решать многие проблемы периферийного ИИ, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В то время как другие сенсоры лишь передают изображения и кадры, IMX500 предоставляет полную картину. Он обрабатывает данные непосредственно на сенсоре, позволяя устройствам получать результаты в реальном времени.

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

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

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

Ключевые возможности IMX500:

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

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

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

Экспорт в IMX500 поддерживает четыре из семи задач Ultralytics и только модели YOLOv8n и YOLO11n: другие семейства моделей, масштабы и архитектуры не поддерживаются, а экспорт модели семантической сегментации, OBB или оценки глубины вызывает ошибку.

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

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

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

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

АргументТипПо умолчаниюОписание
formatstr'imx'Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания.
imgszint или tuple640Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров.
quantizeint или str8/autoТочность квантования. 8 (INT8/PTQ) автоматически включается для IMX500; "w8a16" экспортирует веса INT8 с активациями FP16. Экспорт только в FP32 и FP16 не поддерживается. Заменяет устаревшие флаги half/int8.
datastrNoneПуть к YAML-файлу датасета, необходимому для квантования; для классификации вместо него указывается каталог датасета или имя встроенного датасета. Если параметр не задан вместе с quantize=8 или 'w8a16', Ultralytics выбирает стандартный калибровочный датасет для задачи модели.
fractionfloat, int или list1.0Подмножество для калибровки в виде доли, количества изображений или значений [train, val, test] — долей/количеств. В списках из двух элементов test оставляет полный набор, а 0 пропускает его.
nmsbool, необязательноNoneВыбери необработанный вывод (None по умолчанию), встроенный NMS (True) или голову без NMS (False). IMX требует nms=True для задач детекции, сегментации и позы и выбирает его автоматически.
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

Подключи 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.

Примечание

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

Бенчмарки#

Приведённые ниже бенчмарки 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 (МБ)точность (top1)точность (top5)Время инференции (мс/изображение)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Примечание

Проверка указанных выше бенчмарков выполнялась с использованием датасета COCO128 для моделей детекции, датасета COCO8-Pose для моделей оценки позы и ImageNet10 для моделей классификации.

Что происходит внутри?#

Sony IMX500 YOLO model deployment workflow

Набор инструментов сжатия моделей Sony (MCT)#

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

Поддерживаемые возможности MCT#

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

  1. Оптимизация графа: Преобразует модели в более эффективные версии, объединяя такие слои, как пакетная нормализация, с предшествующими слоями.
  2. Поиск параметров квантования: Минимизирует шум квантования с использованием таких метрик, как среднеквадратичная ошибка, отсутствие обрезания и средняя абсолютная ошибка.
  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 — одной инструкции для множества данных — целевой платформы, выполняя прореживание групп SIMD. Это уменьшает размер и сложность модели, оптимизируя использование каналов и согласуя его с архитектурой SIMD для целевого использования памяти, занимаемой весами. Доступно через API Keras и PyTorch.

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

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

Практические сценарии использования#

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

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

Заключение#

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

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

Часто задаваемые вопросы#

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

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

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

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

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

    • Raspberry Pi OS Bookworm
    • Прошивка и инструменты IMX500 (sudo apt install imx500-all)
  • Согласно бенчмаркам Ultralytics на Raspberry Pi AI Camera:

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

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

Комментарии