Экспорт 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 — это революционное оборудование в области периферийного ИИ (edge AI). Это первый в мире интеллектуальный сенсор зрения со встроенными возможностями ИИ. Он помогает решить многие проблемы периферийного ИИ, включая узкие места при обработке данных, вопросы конфиденциальности и ограничения производительности. В то время как другие сенсоры просто передают изображения и кадры, IMX500 предоставляет полноценные данные. Он обрабатывает информацию непосредственно на сенсоре, позволяя устройствам генерировать инсайты в реальном времени.
Экспорт Sony IMX500 для моделей YOLO11
IMX500 разработан, чтобы изменить способ обработки данных устройствами непосредственно на уровне сенсора, без необходимости отправки данных в облако.
IMX500 работает с квантованными моделями. Квантование делает модели меньше и быстрее без существенной потери точности. Это идеально подходит для ограниченных ресурсов периферийных вычислений, позволяя приложениям быстро реагировать за счет снижения задержек и быстрой локальной обработки данных без зависимости от облака. Локальная обработка также обеспечивает конфиденциальность и безопасность пользовательских данных, так как они не передаются на удаленный сервер.
Ключевые особенности IMX500:
- Вывод метаданных: Вместо передачи только изображений, IMX500 может выводить как изображение, так и метаданные (результат вывода), а также только метаданные для минимизации размера данных, снижения нагрузки на сеть и уменьшения расходов.
- Решение вопросов конфиденциальности: Благодаря обработке данных на устройстве, IMX500 решает проблемы конфиденциальности, что идеально подходит для человеко-ориентированных приложений, таких как подсчет людей и отслеживание заполняемости помещений.
- Обработка в реальном времени: Быстрая обработка на сенсоре поддерживает принятие решений в реальном времени, что идеально подходит для приложений периферийного ИИ, например, автономных систем.
Перед началом: Для достижения наилучших результатов убедись, что твоя модель YOLO11 должным образом подготовлена к экспорту, следуя нашим Руководству по обучению моделей, Руководству по подготовке данных и Руководству по настройке гиперпараметров.
Поддерживаемые задачи
В настоящее время ты можешь экспортировать в формат IMX только модели, предназначенные для следующих задач.
Экспорт 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") 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")Пакет Ultralytics устанавливает дополнительные зависимости для экспорта во время выполнения. При первом запуске команды экспорта тебе, возможно, потребуется перезапустить консоль, чтобы обеспечить корректную работу.
Аргументы экспорта
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
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, будет использован полный набор данных. |
nms | bool | False | Добавляет Non-Maximum Suppression (NMS) к экспортированной модели. Когда установлено значение True, также принимаются параметры conf, iou и agnostic_nms. |
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
Подключи Raspberry Pi AI camera к 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 в соответствии с твоей средой.
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) | Время инференса (мс/из) |
|---|---|---|---|---|---|
| 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 (МБ) | acc (top1) | acc (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 Model Compression Toolkit (MCT)
Sony's Model Compression Toolkit (MCT) — это мощный инструмент для оптимизации моделей глубокого обучения с помощью квантования и прунинга (прореживания). Он поддерживает различные методы квантования и предоставляет передовые алгоритмы для уменьшения размера модели и вычислительной сложности без существенного снижения точности. MCT особенно полезен для развертывания моделей на устройствах с ограниченными ресурсами, обеспечивая эффективный вывод и снижение задержек.
Поддерживаемые функции MCT
MCT от Sony предлагает ряд функций, разработанных для оптимизации нейронных сетей:
- Оптимизация графа: Преобразует модели в более эффективные версии путем свертывания слоев, таких как пакетная нормализация (batch normalization), в предыдущие слои.
- Поиск параметров квантования: Минимизирует шум квантования с помощью метрик, таких как среднеквадратичная ошибка (Mean-Square-Error), No-Clipping и средняя абсолютная ошибка (Mean-Average-Error).
- Передовые алгоритмы квантования:
- Коррекция сдвига отрицательных значений (Shift Negative Correction): Устраняет проблемы с производительностью, возникающие при симметричном квантовании активаций.
- Фильтрация выбросов: Использует z-оценку для обнаружения и удаления выбросов.
- Кластеризация: Использует неоднородные сетки квантования для лучшего соответствия распределению.
- Поиск смешанной точности (Mixed-Precision Search): Назначает различную битность квантования для каждого слоя в зависимости от чувствительности.
- Визуализация: Используй TensorBoard для наблюдения за инсайтами производительности модели, фазами квантования и конфигурациями битности.
Квантование
MCT поддерживает несколько методов квантования для уменьшения размера модели и повышения скорости вывода:
- Пост-тренировочное квантование (PTQ):
- Доступно через API Keras и PyTorch.
- Сложность: Низкая
- Вычислительные затраты: Низкие (минуты CPU)
- Пост-тренировочное квантование на основе градиентов (GPTQ):
- Доступно через API Keras и PyTorch.
- Сложность: Средняя
- Вычислительные затраты: Умеренные (2-3 часа GPU)
- Квантование с учетом обучения (QAT):
- Сложность: Высокая
- Вычислительные затраты: Высокие (12-36 часов GPU)
MCT также поддерживает различные схемы квантования для весов и активаций:
- Степенная (Power-of-Two, дружелюбная к аппаратному обеспечению)
- Симметричная
- Равномерная (Uniform)
Структурный прунинг
MCT внедряет структурный, аппаратно-ориентированный прунинг моделей, разработанный для специфических архитектур оборудования. Эта техника использует возможности SIMD целевой платформы путем прореживания SIMD-групп. Это снижает размер и сложность модели при одновременной оптимизации использования каналов, что согласуется с архитектурой SIMD для целенаправленного использования весов памяти. Доступно через API Keras и PyTorch.
Инструмент конвертации IMX500 (компилятор)
Инструмент конвертации IMX500 является неотъемлемой частью набора инструментов IMX500, позволяя компилировать модели для развертывания на сенсоре IMX500 от Sony (например, для Raspberry Pi AI Camera). Этот инструмент облегчает переход моделей Ultralytics YOLO11, обработанных через ПО Ultralytics, обеспечивая их совместимость и эффективную работу на указанном оборудовании. Процедура экспорта после квантования модели включает генерацию бинарных файлов, которые инкапсулируют важные данные и специфические конфигурации устройства, упрощая процесс развертывания на Raspberry Pi AI Camera.
Реальные сценарии использования
Экспорт в формат IMX500 имеет широкое применение в различных отраслях. Вот несколько примеров:
- Периферийный ИИ и IoT: Обеспечение обнаружения объектов на дронах или камерах безопасности, где критически важна обработка в реальном времени на маломощных устройствах.
- Носимые устройства: Развертывание моделей, оптимизированных для маломасштабной ИИ-обработки на носимых устройствах для мониторинга здоровья.
- Умные города: используй модели YOLO11, экспортированные для IMX500, для мониторинга трафика и анализа безопасности с более быстрой обработкой и минимальной задержкой.
- Розничная аналитика: улучши мониторинг в магазинах, развертывая оптимизированные модели в системах точек продаж или на «умных полках».
Заключение
Экспорт моделей Ultralytics YOLO11 в формат IMX500 от Sony позволяет развертывать модели для эффективного инференса на камерах с поддержкой IMX500. Используя передовые методы квантования, ты можешь уменьшить размер модели и повысить скорость инференса без существенной потери точности.
Для получения дополнительной информации и подробных инструкций обратись к веб-сайту IMX500 Sony.
Часто задаваемые вопросы (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 предлагает несколько важных преимуществ для edge-развертывания:
- Внутричиповая обработка 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.2 МБ после квантования
Это доказывает, что формат IMX500 обеспечивает эффективный инференс в реальном времени, сохраняя при этом хорошую точность для edge AI приложений.