Экспорт Sony IMX500 для Ultralytics YOLO11#
Это руководство посвящено экспорту и развёртыванию моделей Ultralytics YOLO11 на AI-камерах Raspberry Pi с сенсором Sony IMX500.
Развёртывание моделей компьютерного зрения на устройствах с ограниченной вычислительной мощностью, например на Raspberry Pi AI Camera, может быть непростой задачей. Использование формата модели, оптимизированного для более высокой производительности, имеет большое значение.
Формат модели IMX500 разработан для минимального энергопотребления при высокой скорости работы нейронных сетей. Он позволяет оптимизировать модели Ultralytics YOLO11 для высокоскоростного вывода при низком энергопотреблении. В этом руководстве мы рассмотрим экспорт и развёртывание моделей в формате IMX500, а также способы повысить их производительность на Raspberry Pi AI Camera.
Зачем экспортировать в IMX500?#
Интеллектуальный сенсор зрения Sony IMX500 — революционное аппаратное решение для периферийной обработки ИИ. Это первый в мире интеллектуальный сенсор зрения со встроенными возможностями ИИ. Сенсор помогает решать многие проблемы периферийного ИИ, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В то время как другие сенсоры лишь передают изображения и кадры, IMX500 предоставляет полную картину. Он обрабатывает данные непосредственно на сенсоре, позволяя устройствам получать результаты в реальном времени.
Экспорт Sony IMX500 для моделей YOLO11#
IMX500 разработан для преобразования подхода устройств к обработке данных непосредственно на сенсоре без необходимости отправлять их в облако.
IMX500 работает с квантованными моделями. Квантование уменьшает размер и повышает скорость работы моделей без существенной потери точности. Это идеально подходит для ограниченных ресурсов периферийных вычислений: приложения быстрее реагируют благодаря снижению задержки и локальной обработке данных без зависимости от облака. Локальная обработка также обеспечивает конфиденциальность и безопасность пользовательских данных, поскольку они не отправляются на удалённый сервер.
Ключевые возможности IMX500:
- Вывод метаданных: Вместо передачи только изображений IMX500 может выводить как изображение, так и метаданные (результат вывода), а также только метаданные для уменьшения объёма данных, снижения пропускной способности и сокращения расходов.
- Решение вопросов конфиденциальности: Обрабатывая данные на устройстве, IMX500 помогает решать вопросы конфиденциальности, что особенно важно для приложений, ориентированных на людей, например для подсчёта людей и отслеживания заполненности помещений.
- Обработка в реальном времени: Быстрая обработка непосредственно на сенсоре поддерживает принятие решений в реальном времени и идеально подходит для периферийных приложений ИИ, таких как автономные системы.
Перед началом: Для получения наилучших результатов подготовь модель YOLO11 к экспорту, следуя нашим руководствам по обучению моделей, подготовке данных и настройке гиперпараметров.
Поддерживаемые задачи#
Экспорт в IMX500 поддерживает четыре из семи задач Ultralytics и только модели YOLOv8n и YOLO11n: другие семейства моделей, масштабы и архитектуры не поддерживаются, а экспорт модели семантической сегментации, OBB или оценки глубины вызывает ошибку.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Детекция | ✅ | ✅ | ❌ |
| Сегментация | ✅ | ✅ | ❌ |
| Семантическая сегментация | ❌ | ❌ | ❌ |
| Оценка глубины | ❌ | ❌ | ❌ |
| Классификация | ✅ | ✅ | ❌ |
| Поза | ✅ | ✅ | ❌ |
| 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 устанавливает дополнительные зависимости для экспорта во время выполнения. При первом запуске команды экспорта может потребоваться перезапустить консоль, чтобы всё работало корректно.
Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'imx' | Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания. |
imgsz | int или tuple | 640 | Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров. |
quantize | int или str | 8/auto | Точность квантования. 8 (INT8/PTQ) автоматически включается для IMX500; "w8a16" экспортирует веса INT8 с активациями FP16. Экспорт только в FP32 и FP16 не поддерживается. Заменяет устаревшие флаги half/int8. |
data | str | None | Путь к YAML-файлу датасета, необходимому для квантования; для классификации вместо него указывается каталог датасета или имя встроенного датасета. Если параметр не задан вместе с quantize=8 или 'w8a16', Ultralytics выбирает стандартный калибровочный датасет для задачи модели. |
fraction | float, int или list | 1.0 | Подмножество для калибровки в виде доли, количества изображений или значений [train, val, test] — долей/количеств. В списках из двух элементов test оставляет полный набор, а 0 пропускает его. |
nms | bool, необязательно | None | Выбери необработанный вывод (None по умолчанию), встроенный NMS (True) или голову без NMS (False). IMX требует nms=True для задач детекции, сегментации и позы и выбирает его автоматически. |
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
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtИспользование экспорта IMX500 при развёртывании#
После экспорта модели Ultralytics YOLO11n в формат IMX500 её можно развернуть на Raspberry Pi AI Camera для выполнения вывода.
Требования к оборудованию#
Убедись, что у тебя есть следующее оборудование:
- Raspberry Pi 5 или Raspberry Pi 4 Model B
- 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 в соответствии со своей средой.
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) | Время инференции (мс/изображение) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Модель | Формат | Размер (пиксели) | Размер packerOut.zip (МБ) | точность (top1) | точность (top5) | Время инференции (мс/изображение) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
Проверка указанных выше бенчмарков выполнялась с использованием датасета COCO128 для моделей детекции, датасета COCO8-Pose для моделей оценки позы и ImageNet10 для моделей классификации.
Что происходит внутри?#
Набор инструментов сжатия моделей Sony (MCT)#
Набор инструментов сжатия моделей Sony (MCT) — мощный инструмент для оптимизации моделей глубокого обучения с помощью квантования и прореживания. Он поддерживает различные методы квантования и предоставляет продвинутые алгоритмы для уменьшения размера модели и вычислительной сложности без существенной потери точности. MCT особенно полезен для развёртывания моделей на устройствах с ограниченными ресурсами, обеспечивая эффективный вывод и сниженную задержку.
Поддерживаемые возможности MCT#
MCT от Sony предлагает набор возможностей для оптимизации моделей нейронных сетей:
- Оптимизация графа: Преобразует модели в более эффективные версии, объединяя такие слои, как пакетная нормализация, с предшествующими слоями.
- Поиск параметров квантования: Минимизирует шум квантования с использованием таких метрик, как среднеквадратичная ошибка, отсутствие обрезания и средняя абсолютная ошибка.
- Продвинутые алгоритмы квантования:
- Коррекция отрицательных сдвигов: Устраняет проблемы производительности, вызванные симметричным квантованием активаций.
- Фильтрация выбросов: Использует z-оценку для обнаружения и удаления выбросов.
- Кластеризация: Использует неравномерные сетки квантования для лучшего соответствия распределениям.
- Поиск смешанной точности: Назначает разную разрядность квантования для каждого слоя на основе его чувствительности.
- Визуализация: Используй TensorBoard для анализа производительности модели, этапов квантования и конфигураций разрядности.
Квантование#
MCT поддерживает несколько методов квантования для уменьшения размера модели и повышения скорости вывода:
- Квантование после обучения (PTQ):
- Доступно через API Keras и PyTorch.
- Сложность: низкая
- Вычислительные затраты: низкие (минуты на CPU)
- Квантование после обучения на основе градиентов (GPTQ):
- Доступно через API Keras и PyTorch.
- Сложность: средняя
- Вычислительные затраты: умеренные (2–3 часа на GPU)
- Квантование с учётом обучения (QAT):
- Сложность: высокая
- Вычислительные затраты: высокие (12–36 часов на GPU)
MCT также поддерживает различные схемы квантования весов и активаций:
- Степени двойки (удобно для аппаратной реализации)
- Симметричное
- Равномерное
Структурированное прореживание#
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-приложений.