Экспорт для Sony IMX500 в Ultralytics YOLO11#
В этом руководстве описаны экспорт и развёртывание моделей Ultralytics YOLO11 на камерах Raspberry Pi AI Camera с датчиком Sony IMX500.
Развёртывание моделей компьютерного зрения на устройствах с ограниченными вычислительными ресурсами, таких как Raspberry Pi AI Camera, может быть непростой задачей. Использование формата модели, оптимизированного для более высокой производительности, значительно упрощает её решение.
Формат модели IMX500 разработан для нейронных сетей: он обеспечивает высокую производительность при минимальном энергопотреблении. Он позволяет оптимизировать модели Ultralytics YOLO11 для быстрого инференса с низким энергопотреблением. В этом руководстве мы расскажем, как экспортировать и развёртывать модели в формате IMX500, чтобы они эффективно работали на Raspberry Pi AI Camera.
Зачем экспортировать модель в IMX500?#
Интеллектуальный датчик изображения IMX500 от Sony — прорывное устройство для обработки данных с помощью периферийного ИИ. Это первый в мире интеллектуальный датчик изображения со встроенными возможностями ИИ. Этот датчик помогает справиться со многими проблемами периферийного ИИ, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В отличие от других датчиков, которые лишь передают изображения и кадры, 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
# Загрузить модель YOLO11n PyTorch
model = YOLO("yolo11n.pt")
# Экспортировать модель
model.export(format="imx", data="coco8.yaml") # по умолчанию выполняется экспорт с квантованием PTQ
# Загрузить экспортированную модель
imx_model = YOLO("yolo11n_imx_model")
# Выполнить инференс
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Загрузить модель YOLO11n-pose PyTorch
model = YOLO("yolo11n-pose.pt")
# Экспортировать модель
model.export(format="imx", data="coco8-pose.yaml") # по умолчанию выполняется экспорт с квантованием PTQ
# Загрузить экспортированную модель
imx_model = YOLO("yolo11n-pose_imx_model")
# Выполнить инференс
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Загрузить модель YOLO11n-cls PyTorch
model = YOLO("yolo11n-cls.pt")
# Экспортировать модель
model.export(format="imx", data="imagenet10") # по умолчанию выполняется экспорт с квантованием PTQ
# Загрузить экспортированную модель
imx_model = YOLO("yolo11n-cls_imx_model")
# Выполнить инференс
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Загрузить модель YOLO11n-seg PyTorch
model = YOLO("yolo11n-seg.pt")
# Экспортировать модель
model.export(format="imx", data="coco8-seg.yaml") # по умолчанию выполняется экспорт с квантованием PTQ
# Загрузить экспортированную модель
imx_model = YOLO("yolo11n-seg_imx_model")
# Выполнить инференс
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Загрузить экспортированную модель IMX500
model = YOLO("yolo11n_imx_model")
# Проверить точность на наборе данных COCO8
metrics = model.val(data="coco8.yaml")Экспорт IMX поддерживается только в Linux с Python 3.9 или более поздней версии и требует Java 17 или более поздней версии. Пакет Ultralytics устанавливает дополнительные зависимости для экспорта во время выполнения. При первом запуске команды экспорта может потребоваться перезапустить консоль, чтобы всё работало корректно.
Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'imx' | Целевой формат экспортируемой модели, определяющий совместимость с различными средами развертывания. |
imgsz | int или tuple | 640 | Заданный размер изображения на входе модели. Можно указать целое число для квадратных изображений или кортеж (height, width) для конкретных размеров. |
quantize | int или str | 8/авто | Точность квантования. Для IMX500 требуется и автоматически включается 8 (INT8/PTQ). Экспорт только в FP32 и FP16 не поддерживается. Заменяет устаревшие флаги half/int8. |
data | str | None | Путь к YAML-файлу набора данных, необходимому для квантования; для классификации вместо него укажи каталог набора данных или имя встроенного набора данных. Если параметр не задан, 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
Подключи камеру Raspberry Pi AI Camera к 15-контактному разъёму MIPI CSI на Raspberry Pi и включи Raspberry Pi
Требования к программному обеспечению#
Это руководство проверено на Raspberry Pi 5 с Raspberry Pi OS Bookworm
Шаг 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 (например, в камерах Raspberry Pi AI Camera). Этот инструмент упрощает переход моделей Ultralytics YOLO11, обработанных с помощью ПО Ultralytics, и обеспечивает их совместимость и эффективную работу на указанном оборудовании. При экспорте после квантования модели создаются двоичные файлы с необходимыми данными и конфигурациями для конкретного устройства, что упрощает развертывание на Raspberry Pi AI Camera.
Примеры применения в реальных условиях#
Экспорт в формат IMX500 применим во многих отраслях. Вот несколько примеров:
- Периферийный ИИ и IoT: включи обнаружение объектов на дронах или камерах видеонаблюдения, где важна обработка в реальном времени на устройствах с низким энергопотреблением.
- Носимые устройства: развертывай модели, оптимизированные для компактных систем обработки ИИ, на носимых устройствах для мониторинга здоровья.
- Умные города: используй модели YOLO11, экспортированные в формате IMX500, для мониторинга дорожного движения и анализа безопасности с более быстрой обработкой и минимальной задержкой.
- Аналитика розничной торговли: улучшай мониторинг в магазинах, развертывая оптимизированные модели в POS-системах или на умных полках.
Заключение#
Экспорт моделей Ultralytics YOLO11 в формат Sony IMX500 позволяет развертывать их на камерах с IMX500 и выполнять вывод эффективно. Благодаря передовым методам квантования можно уменьшить размер модели и ускорить вывод без существенного снижения точности.
Дополнительную информацию и подробные инструкции см. на сайте IMX500 Sony.
Часто задаваемые вопросы#
Чтобы экспортировать модель YOLO11 в формат IMX500, воспользуйся API Python или командой CLI:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # По умолчанию выполняет экспорт с квантованием PTQВ результате экспорта будет создан каталог с файлами, необходимыми для развертывания, включая
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 обеспечивает эффективный инференс в реальном времени при сохранении хорошей точности для приложений периферийного ИИ.