Экспорт Hailo для моделей Ultralytics YOLO#
Ускорители Hailo AI запускают скомпилированные модели в формате исполняемых файлов Hailo (HEF) на периферийных устройствах, таких как AI HAT+ и AI HAT+ 2 для Raspberry Pi. Ultralytics экспортирует модели YOLO для обнаружения, сегментации, семантической сегментации, оценки глубины, классификации, определения позы и OBB напрямую в HEF с помощью компилятора потока данных Hailo (DFC).
Развертывание на Hailo предназначено для компьютерного зрения на периферии: камер, роботов, промышленных систем, шлюзов и других устройств, которым нужно локально выполнять обнаружение объектов, не отправляя каждый кадр в облако. Скомпилированный HEF содержит квантованную сеть, распределение по аппаратным ресурсам, планирование и необязательную постобработку HailoRT, необходимые выбранному ускорителю.
Для развёртывания на новом оборудовании также оцени DeepX, Axelera и Rockchip. DeepX — более подходящий вариант, если важны высокая производительность YOLO и эффективность на ватт, а Axelera ориентирована на развёртывания с высокой пропускной способностью. Rockchip также широко используется в недорогих одноплатных компьютерах и встроенных системах.
Зачем развёртывать Ultralytics YOLO на Hailo?#
Сочетание Ultralytics YOLO с нейропроцессором (NPU) Hailo обеспечивает практичный путь от обучения модели до инференса периферийного ИИ. Вот распространенные варианты применения:
- Умные камеры и видеоаналитика: запускай обнаружение объектов в реальном времени рядом с камерой для задач безопасности, розничной торговли, управления дорожным движением и подсчёта присутствующих.
- Робототехника и автономные системы: обнаруживай людей, транспортные средства, посылки, инструменты или препятствия без постоянного подключения к облаку.
- Промышленное компьютерное зрение: развёртывай пользовательские модели YOLO для инспекции, подсчёта, контроля безопасности и качества.
- Проекты ИИ на Raspberry Pi: Добавь ускоренный инференс компьютерного зрения в системы Raspberry Pi с помощью AI HAT+ или AI HAT+ 2.
- Периферийные шлюзы и ИИ-ПК: обрабатывай локально несколько потоков видео или данных датчиков, снижая требования к пропускной способности сети и облачным вычислительным ресурсам.
Локальный инференс может повысить конфиденциальность и сократить время отклика, поскольку изображения остаются на устройстве развёртывания. Фактические пропускная способность, задержка и энергопотребление зависят от размера модели YOLO, разрешения входных данных, архитектуры Hailo, хост-системы и конвейера приложения.
Как работает экспорт для Hailo#
Ultralytics выполняет весь процесс экспорта через format="hailo":
YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compileЭкспортёр автоматически выполняет следующие этапы:
- Экспортирует статичный граф ONNX с настройками, совместимыми с компилятором.
- Выбирает выходы голов модели в соответствии с её архитектурой.
- Формирует инструкции по нормализации, активации и постобработке.
- Создаёт репрезентативный поток данных для калибровки и квантует модель до INT8.
- Компилирует оптимизированный граф для выбранного ускорителя Hailo.
- Сохраняет HEF с метаданными Ultralytics и удаляет промежуточный файл ONNX.
Для моделей обнаружения YOLOv8 и YOLO11 в скомпилированном конвейере используется YOLO NMS из HailoRT. YOLO26 компилирует необработанные тензоры голов обнаружения: Ultralytics применяет NMS к выходам по умолчанию «один ко многим» или декодирует выходы «один к одному» без NMS с помощью nms=False. Для сегментации, поз и OBB в YOLOv8/YOLO11 компилируются необработанные тензоры голов, которые Ultralytics декодирует при инференсе; для классификации YOLOv8/YOLO11/YOLO26 softmax выполняется на чипе, поэтому HEF сразу возвращает вероятности классов. Для семантической сегментации YOLO26 экспортёр учитывает ускоритель: Hailo-8/8L (DFC v3.x) возвращают логиты классификатора для апсемплинга и редукции на хосте, а Hailo-10H/15 (DFC v5.x) компилируют многоклассовые головы ArgMax на чипе и возвращают компактную карту классов. Для одноклассовых голов на всех целевых устройствах используются логиты на хосте, поскольку для них требуется пороговое значение, а не ArgMax. Для моделей глубины YOLO26 в a16_w16 компилируется плотный свёрточный слой логитов, а карту метрической глубины восстанавливает хост (выполняя clamp/exp и обученную логарифмически-аффинную калибровку после головы), поэтому квантователь сохраняет максимальный диапазон необработанных логитов. Тебе не нужно искать конечные узлы ONNX, писать скрипт модели Hailo (.alls) или вручную создавать JSON для NMS.
Установка#
Установи Ultralytics и скачай wheel DFC для целевого оборудования с портала Hailo Developer Zone (требуется бесплатная регистрация):
pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whlДля компиляции Hailo требуется Linux x86_64. Скомпилируй модель на поддерживаемой рабочей станции, затем скопируй выходную директорию на целевое устройство. Для инференса DFC не требуется.
В Hailo-8 и Hailo-8L используется DFC v3.x. В Hailo-10H и Hailo-15 используется DFC v5.x. Установи поколение компилятора, соответствующее целевому ускорителю.
Ultralytics Platform обеспечивает управляемый экспорт для Hailo, поэтому локальная учётная запись Hailo и установка DFC не нужны.
Экспорт модели Hailo HEF#
Используй format="hailo" и выбери целевой ускоритель с помощью name:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output) # yolo11n_hailo_model/Эквивалентная команда CLI:
yolo export model=yolo11n.pt format=hailo name=hailo8Экспорт для Hailo поддерживает только INT8. Если параметр data не указан, Ultralytics автоматически скачает набор данных для калибровки, соответствующий задаче. Для пользовательских моделей используй репрезентативные обучающие или валидационные изображения:
Ultralytics принудительно задаёт уровень оптимизации DFC 2 и настраивает дообучение с учётом фактического размера калибровочного набора данных. Hailo рекомендует не менее 1 024 разнообразных изображений; встроенные облегчённые наборы данных компилируются на уровне 2, но могут не соответствовать условиям эксплуатации. Для экспорта HEF в production передай репрезентативный набор данных через data="path/to/dataset.yaml".
model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")Компиляция выполняется с фиксированной формой входных данных. Задай imgsz равным разрешению, которое будет использоваться на устройстве:
model.export(format="hailo", name="hailo8", imgsz=640)Поддерживаемые модели и оборудование#
Экосистема Hailo охватывает широкий спектр задач компьютерного зрения, но экспортёр Ultralytics format="hailo" сейчас проверяет стандартные головы обнаружения YOLO, сегментации, семантической сегментации, оценки глубины, классификации, позы и OBB. В таблице задач описаны доступные варианты экспорта; проверка оборудования указана отдельно ниже.
| Задача Ultralytics | Прямой экспорт для Hailo | Поддерживаемые семейства моделей | Примечания |
|---|---|---|---|
| Детекция объектов | ✅ | YOLOv8, YOLO11, YOLO26 | Стандартные головы Ultralytics Detect, включая пользовательские модели |
| Сегментация экземпляров | ✅ | YOLOv8, YOLO11 | Необработанные тензоры голов декодируются Ultralytics при инференсе; YOLO26-seg пока не поддерживается |
| Семантическая сегментация | ✅ | YOLO26 | Hailo-8/8L и одноклассовые головы возвращают логиты; Hailo-10H/15 формируют многоклассовые карты непосредственно при компиляции |
| Оценка глубины | ✅ | YOLO26 | Плотный логит компилируется в a16_w16; Ultralytics восстанавливает метрическую глубину во время инференса |
| Классификация изображений | ✅ | YOLOv8, YOLO11, YOLO26 | Softmax выполняется на чипе; HEF сразу возвращает вероятности классов |
| Оценка позы | ✅ | YOLOv8, YOLO11 | Необработанные тензоры голов декодируются Ultralytics при инференсе; YOLO26-pose пока не поддерживается |
| Обнаружение объектов с учётом ориентации | ✅ | YOLOv8, YOLO11 | Необработанные тензоры голов декодируются Ultralytics при инференсе; YOLO26-OBB пока не поддерживается |
Специализированные семейства моделей обнаружения, такие как YOLOv10, YOLO-World, YOLOE и RT-DETR, сейчас ❌ не поддерживаются через путь Ultralytics format="hailo". Ultralytics отклоняет эти задачи и семейства моделей до компиляции, вместо того чтобы создавать непроверенный HEF.
| Семейство моделей | Hailo-8 / Hailo-8L | Hailo-10H / Hailo-15 | Результат |
|---|---|---|---|
| Обнаружение объектов YOLOv8 / YOLO11 | ✅ | ✅ | HEF с YOLO NMS из HailoRT |
| Обнаружение объектов YOLO26 | ✅ | ✅ | Необработанные тензоры обнаружения; по умолчанию NMS выполняется на хосте, режим без NMS задаётся через nms=False |
| YOLOv8-seg / YOLO11-seg | ✅ | ✅ | Необработанные тензоры сегментации, декодируемые Ultralytics при инференсе |
| YOLOv8-pose / YOLO11-pose | Проверено на Hailo-8L | Не проверено | Необработанные тензоры позы, декодируемые Ultralytics при инференсе |
| YOLOv8-obb / YOLO11-obb | Проверено на Hailo-8L | Не проверено | Необработанные тензоры OBB, декодируемые Ultralytics при инференсе |
| YOLOv8-cls / YOLO11-cls / YOLO26-cls | Проверено на Hailo-8L | Не проверено | Softmax на чипе; HEF возвращает вероятности классов |
| YOLO26-sem | Проверено на Hailo-8L | Не проверено | Логиты или сформированная при компиляции многоклассовая карта на Hailo-10H/15 |
| YOLO26-depth | Проверено на Hailo-8L | Не проверено | Плотные логиты; карту метрической глубины декодирует Ultralytics |
Поза, OBB, классификация, семантическая сегментация YOLO26 и оценка глубины YOLO26 (вариант для Hailo-8/8L) проверены на Hailo-8L с HailoRT 4.23 и DFC 3.33. Экспортёр принимает и другие перечисленные целевые устройства, но перед использованием в production новые варианты задач необходимо проверить на соответствующем компиляторе и устройстве.
Выбери одно из следующих значений name:
name | Целевой ускоритель |
|---|---|
hailo8 | Hailo-8 |
hailo8l | Hailo-8L |
hailo10h | Hailo-10H |
hailo15h | Hailo-15H |
hailo15l | Hailo-15L |
Если name не указан, по умолчанию используется hailo8l; задай name равным ускорителю, на котором будет развёрнута модель. Установи поколение DFC, соответствующее выбранному целевому устройству.
Поколения оборудования и SDK Hailo#
В разных семействах ускорителей Hailo используются разные поколения компилятора. Скомпилированный HEF должен соответствовать целевому оборудованию, поэтому выбери name для устройства, на котором будет выполняться инференс, а не для машины, на которой выполняется экспорт.
| Семейство оборудования | Поколение DFC |
|---|---|
| Hailo-8 / Hailo-8L | DFC v3.x |
| Hailo-10H | DFC v5.x |
| Hailo-15H / Hailo-15L | DFC v5.x |
Компилятор работает в Linux x86_64, а полученный HEF — на устройстве Hailo через HailoRT. Благодаря этому компилировать модель можно на рабочей станции или в Ultralytics Platform, а небольшой артефакт для инференса развёртывать на периферийном хосте ARM или x86.
Примечания о совместимости#
Компиляция для Hailo зависит от оборудования и выполняется с фиксированной формой входных данных. Учитывай следующие ограничения:
- Выбранное значение
nameдолжно соответствовать ускорителю, на котором будет развёрнута модель. - Калибровочные изображения должны представлять ожидаемые в production условия освещения, ракурсы, объекты и фоны.
- Каждый HEF компилируется для фиксированного
imgsz. Чтобы обрабатывать несколько разрешений, масштабируй кадры на хосте до скомпилированного размера или скомпилируй отдельный HEF для каждого разрешения. - Поддерживается произвольное количество классов, поскольку Ultralytics формирует конфигурацию постобработки на основе метаданных модели.
- Поддерживаются модели обнаружения со стандартными головами Ultralytics
Detect; модели сегментации, позы и OBB YOLOv8/YOLO11; модели классификации YOLOv8/YOLO11/YOLO26; модели семантической сегментации и оценки глубины YOLO26. Модели сегментации экземпляров, позы и ориентированных ограничивающих рамок YOLO26, а также экспорты YOLO-World, YOLOE, YOLOv10 и RT-DETR пока не поддерживаются. - Артефакты для Hailo-8/8L и Hailo-10H/15 компилируются с помощью разных поколений DFC и несовместимы друг с другом.
Калибровка и квантование INT8#
Для экспорта Hailo HEF используется квантование INT8, которое эффективно размещает сеть YOLO на ускорителе. Набор данных для калибровки используется для оценки диапазонов активаций; он не переобучает модель, и для компиляции не нужны метки.
Оборудование Hailo и Dataflow Compiler поддерживают точность INT4, INT8 и INT16. При использовании пути Ultralytics format="hailo" компиляция выполняется в INT8, а для выходных слоёв, которым требуется более широкий диапазон, применяются 16-битные активации и веса (a16_w16).
Если data не задан, Ultralytics использует небольшой набор данных для калибровки под конкретную задачу, например COCO128 для обнаружения, Cityscapes8 для семантической сегментации или Depth8 для оценки глубины. Плотная голова глубины особенно чувствительна к области калибровки: калибровка модели глубины на нерелевантных изображениях обнаружения уплощает предсказанную карту, а более крупные наборы данных из целевой области повышают точность. Для пользовательской модели компьютерного зрения укажи в data YAML-файл набора данных, чтобы компилятор обработал характерные изображения из реальной области развертывания:
model.export(format="hailo", name="hailo8", data="my_dataset.yaml")fraction задаёт долю или количество изображений для калибровки. Списки [train, val, test] задают ограничение для каждого сплита; в списках из двух элементов test остаётся без ограничений, а 0 пропускает тестовый сплит. Большее количество изображений помогает только в том случае, если они представляют домен развёртывания. Изображения из других доменов могут снизить точность квантования и увеличить время оптимизации. Если INT8 HEF уступает исходной модели PyTorch по точности, сначала улучши данные для калибровки, прежде чем менять модель или настройки среды выполнения.
Ожидаемая точность в зависимости от семейства моделей#
При измерении на Hailo-8L с калибровкой в целевом домене (COCO128, 128 изображений) экспортированные в INT8 файлы HEF сохраняют следующую долю показателя PyTorch mAP50 при одинаковом протоколе оценки:
| Модель | Сохранение показателя mAP50 | Примечания |
|---|---|---|
| YOLOv8n | ~100% | Голова DFL с NMS на чипе |
| YOLO11n | ~96% | Блоки внимания в основе модели сильнее чувствительны к INT8 |
| YOLO26n | ~93% | Сквозная голова и внимание; см. примечание о пороге уверенности |
Сохранение точности сравнивается для обеих моделей при одном и том же пороге уверенности. В HEF YOLOv8 и YOLO11 значение conf (по умолчанию 0.25), заданное при экспорте, зафиксировано в NMS на чипе. Поэтому сравнение с PyTorch-базовой моделью при её низком пороге по умолчанию учитывает большую часть кривой «точность-полнота» и преувеличивает разрыв в точности из-за квантования.
Помимо детекции, пути экспорта сегментации, поз, OBB и классификации проверили на той же Hailo-8L (DFC 3.33, HailoRT 4.23). Каждый INT8 HEF сравнили с соответствующей контрольной точкой PyTorch на одном и том же валидационном сплите, используя калибровку по данным из целевого домена:
| Задача | Метрика (валидационный сплит) | YOLOv8n | YOLO11n |
|---|---|---|---|
| Сегментация экземпляров | Сохранение показателя mAP50 для маски (COCO128-seg) | 98.0% | 93.6% |
| Поза | Сохранение показателя mAP50 для бокса (COCO8-pose) | 98.1% | 90.8% |
| Ориентированный ограничивающий прямоугольник | Сохранение показателя mAP50 (DOTA128) | ~100% | 96.9% |
| Классификация | Сохранение top-1 (ImageNet val) | 92.6% | 95.4% |
Сегментация, оценка позы и OBB калибровались на наборах по умолчанию для соответствующих целевых доменов (COCO128-seg, COCO8-pose, DOTA128); классификация калибровалась на ImageNet100. Из этих настроек по умолчанию следуют два нюанса: COCO8-pose содержит всего 8 изображений, поэтому результаты оценки позы стоит считать ориентировочными; для продакшена передай более крупный data=. На DOTA8 показатель mAP50 у обеих моделей достигает почти 100%, поэтому OBB оценивается на DOTA128. Классификация — единственная задача, в которой YOLO11 сохраняет результат лучше, чем YOLOv8; в остальных задачах бэкбон YOLO11 с механизмом внимания более чувствителен к INT8.
Из измерений на устройстве следуют три практических правила:
- Всегда калибруй по данным из целевого домена. Дообучение на изображениях из других доменов равносильно полному отказу от дообучения: YOLO26n, откалиброванная на 1 238 изображениях из других доменов, сохраняет ту же точность (85.7%), что и модель, скомпилированная без дообучения. Небольшой набор из целевого домена лучше большого набора из других доменов.
- Для развёртывания YOLO26 снизь
confпримерно на 0.05. Квантование в среднем снижает оценки YOLO26 примерно на 0.05, поэтому порог, настроенный в PyTorch, приводит к пропуску корректных обнаружений на HEF. Использованиеconf=0.20на устройстве позволяет получить столько же обнаружений, сколько у PyTorch приconf=0.25; дальнейшее небольшое снижение (примерно доconf=0.15) восстанавливает почти всю оставшуюся разницу в mAP50 ценой увеличения числа обнаружений с низкой уверенностью. Квантование также меняет порядок примерно 20% обнаружений — это постоянное изменение ранжирования, которое не исправить порогом, — но оно не мешает восстановить mAP50 при более низком пороге. - Потери точности из-за блока внимания обусловлены архитектурой Hailo-8/8L (DFC 3.33). Блоки внимания компилируются в операции
matmul, которые во всех доступных режимах компилятора сохраняют входы активаций INT8; режим с 16-битным выходом не удается распределить в этом графе, а повышение точности окружающих слоев не помогает, поскольку матричное умножение все равно повторно квантует входы до INT8 (в тестах Ultralytics сохранение 16-битной точности глубинных и выходных сверток не изменило mAP). Если точность важнее всего и модель можно заменить, YOLO11 в настоящее время квантируется лучше YOLO26 на этом оборудовании; новые поколения Hailo (DFC 5.x) предлагают больше вариантов смешанной точности и могут показать другие результаты.
Экспортируемые артефакты#
При экспорте создаётся каталог с готовым к развёртыванию HEF и метаданными Ultralytics:
yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json*.hef— скомпилированная модель, которую загружает HailoRT.metadata.yamlсодержит имена моделей, задачу, размер входных данных, шаг и сведения о целевом оборудовании Hailo.nms_config.jsonсодержит созданную конфигурацию HailoRT NMS для моделей детекции YOLOv8 и YOLO11. Для детекции YOLO26 и всех задач, не связанных с детекцией (сегментация, семантическая сегментация, глубина, классификация, позы, OBB), этот файл не используется.
Промежуточный граф ONNX удаляется после компиляции.
Запуск инференса на оборудовании Hailo#
Установи HailoRT на целевое устройство. Пользователи Raspberry Pi AI HAT+ и AI HAT+ 2 могут воспользоваться руководством по программному обеспечению Raspberry Pi AI. В Raspberry Pi OS нельзя одновременно установить оба набора пакетов, поэтому выполни только блок для своего оборудования, а затем перезагрузи устройство.
Для AI HAT+ (Hailo-8 / Hailo-8L):
sudo apt install dkms
sudo apt install hailo-all
sudo rebootДля AI HAT+ 2 (Hailo-10H, Raspberry Pi OS Trixie или новее):
sudo apt install dkms
sudo apt install hailo-h10-all
sudo rebootПосле перезагрузки проверь, что ускоритель обнаружен:
hailortcli fw-control identifyПакеты hailo-all и hailo-h10-all устанавливают HailoRT только в Raspberry Pi OS. На любом другом хосте скачай и установи пакет HailoRT из Hailo Developer Zone — того же источника, откуда берётся DFC.
Скопируй на устройство весь каталог экспорта, чтобы metadata.yaml находился рядом с HEF. Ultralytics использует HailoRT для запуска predict и val непосредственно из экспортированного каталога:
from ultralytics import YOLO
model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")Для моделей обнаружения бэкенд преобразует выход NMS HailoRT для YOLOv8/YOLO11 и автоматически декодирует обе головы YOLO26; выходы YOLO26 по умолчанию в режиме one-to-many обрабатываются через NMS предиктора. Для других задач бэкенд декодирует исходные тензоры сегментации, позы и OBB, возвращает вероятности классов классификации, вычисленные на чипе, и формирует карты семантических классов с помощью редукции на хосте для Hailo-8/8L и всех одно-классовых голов либо ArgMax на чипе для многоклассовых голов Hailo-10H/15. TAPPAS, GStreamer и вспомогательный инструмент Raspberry Pi picamera2.devices.Hailo по-прежнему доступны для специализированных конвейеров приложений.
Для развёртывания с GStreamer передай HEF в hailonet:
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
hailofilter function-name=yolov8 ! hailooverlay ! autovideosinkВарианты развёртывания на Hailo#
HEF — один и тот же готовый к развёртыванию артефакт модели для нескольких интерфейсов среды выполнения Hailo. Выбери интерфейс, подходящий для приложения:
| Вариант среды выполнения | Лучше всего подходит для |
|---|---|
| API HailoRT для Python или C/C++ | Пользовательские приложения и непосредственное управление инференсом |
picamera2.devices.Hailo для Raspberry Pi | Проекты с модулем камеры на Raspberry Pi |
| GStreamer и приложения Hailo | Потоки видео в реальном времени и многоэтапные конвейеры |
hailortcli | Проверка устройства, анализ HEF и бенчмаркинг |
Храни metadata.yaml рядом с HEF, если приложению нужны названия классов Ultralytics, размер входных данных, шаг или другие сведения о модели. Сам HEF не заменяет логику приложения для захвата с камеры, визуализации, отслеживания, оповещений или хранения данных.
Проверка устройства Hailo и HEF#
Перед подключением камеры или видеоконвейера независимо проверь среду выполнения и ускоритель:
hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hefИзмерения производительности только на устройстве позволяют отделить инференс Hailo от декодирования видео, изменения размера изображений, отрисовки и ввода-вывода приложения. При оценке сквозной задержки или количества кадров в секунду отдельно измерь производительность всего приложения.
Бенчмарки#
Команда Ultralytics протестировала модели YOLO26, сравнив скорость и точность PyTorch и Hailo.
| Модель | Формат | Статус | Размер (МБ) | metrics/mAP50-95(B) | Время инференса (мс/изобр.) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.477 | 364.6 |
| YOLO26n | Hailo | ✅ | 7.3 | 0.455 | 21.7 |
| Модель | Формат | Статус | Размер (МБ) | metrics/mIoU | Время инференса (мс/изобр.) |
|---|---|---|---|---|---|
| YOLO26n-sem | PyTorch | ✅ | 3.3 | 0.611 | 831.2 |
| YOLO26n-sem | Hailo | ✅ | 6.2 | 0.611 | 34.8 |
| Модель | Формат | Статус | Размер (МБ) | metrics/delta1 | metrics/abs_rel | metrics/rmse | Время инференса (мс/изобр.) |
|---|---|---|---|---|---|---|---|
| YOLO26n-depth | PyTorch | ✅ | 12.4 | 0.8535 | 0.0983 | 0.2047 | 2133.4 |
| YOLO26n-depth | Hailo | ✅ | 9.9 | 0.8241 | 0.1232 | 0.2554 | 29.6 |
| Модель | Формат | Статус | Размер (МБ) | точность (top1) | точность (top5) | Время инференса (мс/изобр.) |
|---|---|---|---|---|---|---|
| YOLO26n-cls | PyTorch | ✅ | 5.5 | 0.431 | 0.716 | 33.8 |
| YOLO26n-cls | Hailo | ✅ | 3.5 | 0.441 | 0.716 | 2.0 |
Для проверки указанных выше результатов использовались COCO128 для обнаружения, Cityscapes8 для семантической сегментации, Depth8 для оценки глубины и ImageNet100 для классификации. Cityscapes8 и Depth8 содержат всего по 4 валидационных изображения, поэтому результаты точности семантической сегментации и оценки глубины следует считать проверочными тестами, а не измерениями сохранения точности; прежде чем делать выводы о точности, выполни валидацию на полном наборе данных, например Cityscapes или NYU Depth V2. Время инференса не включает предварительную и последующую обработку.
Hailo в сравнении с другими форматами экспорта YOLO#
Выбирай формат экспорта исходя из оборудования, на котором будет выполняться модель. HEF — аппаратно-зависимый формат, который стоит выбирать, если на целевом устройстве уже установлен ускоритель Hailo, а не как универсальный формат для периферийных устройств или формат, автоматически обеспечивающий максимальную скорость.
| Целевое устройство или приоритет | Рекомендуемый формат Ultralytics | Сравнение с Hailo |
|---|---|---|
| Уже установлен NPU Hailo или Raspberry Pi HAT | Hailo HEF (format="hailo") | Использует установленный ускоритель Hailo и программный стек HailoRT |
| Новый энергоэффективный NPU формата M.2 или SBC | DeepX | Начни с этого варианта, чтобы добиться более высокой производительности YOLO и лучшей производительности на ватт |
| Высокопроизводительный периферийный NPU для нескольких потоков | Axelera | Рассмотри этот вариант, если нужно увеличить плотность потоков и пропускную способность на новом оборудовании с ускорителем |
| GPU NVIDIA | TensorRT | Использует ядра GPU NVIDIA с вариантами FP16 и INT8 вместо отдельного NPU |
| CPU, GPU или NPU Intel | OpenVINO | Использует ускорители, уже встроенные в системы Intel |
| Оборудование Apple | CoreML | Использует Apple Neural Engine, GPU и CPU через собственную среду выполнения Apple |
| NPU Qualcomm Snapdragon | QNN | Компилирует модель для встроенного NPU Qualcomm, не требуя внешнего ускорителя |
| NPU Rockchip | RKNN | Широко используется в недорогих SBC и встраиваемых системах |
| NPU Huawei Ascend | Ascend | Компилирует модель .om для CANN под AI Core Ascend на платах Atlas и OrangePi AIPro |
| Google Coral Edge TPU | Edge TPU | Запускает модель LiteRT в INT8 на ускорителе Coral вместо модуля Hailo |
| Система на кристалле Ambarella CVflow | Ambarella | Компилирует модели для камер Ambarella и систем на кристалле для встроенного компьютерного зрения |
| Камера Raspberry Pi AI | Sony IMX500 | Запускает нейросеть непосредственно в датчике камеры, а не на подключённом к хосту ускорителе Hailo |
| Мобильный или встроенный CPU/GPU | NCNN | Обеспечивает лёгкую переносимую среду выполнения, если специализированный поддерживаемый NPU недоступен |
| Переносимое развёртывание в разных средах выполнения | ONNX | Обеспечивает переносимость между средами выполнения; HailoRT не может запускать ONNX без предварительной компиляции в HEF |
Не считай, что Hailo обязательно быстрее или энергоэффективнее только потому, что это NPU. Для новых развертываний M.2 более перспективным вариантом для повышения производительности YOLO и производительности на ватт является DeepX, а Axelera ориентирована на существенно более высокую пропускную способность для нескольких потоков. Rockchip — популярный недорогой вариант для SBC и встроенных систем. Значения TOPS и энергопотребления от производителей не являются напрямую сопоставимыми показателями производительности приложений, поэтому перед покупкой оборудования проверь один и тот же чекпойнт YOLO, размер входных данных, точность, хост-систему и полный видеоконвейер на подходящих устройствах.
Оптимизация производительности компьютерного зрения на Hailo#
Выбор модели и конвейера часто важнее флагов компилятора:
- Начни с небольшой модели YOLO и увеличивай её размер, только если этого требует точность.
- Выбери минимальный фиксированный
imgsz, при котором сохраняются важные для приложения объекты. - По возможности используй для калибровки изображения с реальной камеры и из реального окружения.
- Не закрывай сеть Hailo между кадрами: повторное открытие HEF для каждого инференса снижает производительность.
- Измеряй время инференса на устройстве отдельно от предобработки, декодирования видео, постобработки, визуализации и сетевого ввода-вывода.
- Для длительной обработки видео используй потоковый конвейер, например GStreamer.
- Проверь экспортированный HEF на том же ускорителе и с той же версией HailoRT, которые используются в production.
Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
name | str | hailo8l | Целевая архитектура ускорителя Hailo |
imgsz | int, list | 640 | Фиксированный размер входных данных модели |
data | str | None | YAML-файл набора данных для калибровки; для классификации вместо него укажи каталог набора данных или встроенное название набора данных. Если параметр не задан, Ultralytics выбирает набор данных для калибровки в соответствии с задачей. |
fraction | float, int или list | 1.0 | Подмножество для калибровки, заданное как доля, количество изображений или [train, val, test] отношения/количества. Если список содержит два элемента, test остаётся без изменений, а 0 пропускает его. |
quantize | int | 8 | При экспорте для Hailo используется квантование INT8 |
simplify | bool | True | Упростить промежуточный граф ONNX |
conf | float | 0.25 | Порог уверенности NMS в HailoRT для YOLOv8/YOLO11 |
iou | float | 0.7 | Порог IoU для NMS в HailoRT для YOLOv8/YOLO11 |
device | str | None | Устройство для промежуточного этапа экспорта ONNX; по умолчанию используется CPU (device=cpu). Этапы Dataflow Compiler его не используют. |
Для детекции YOLOv8/YOLO11 при экспорте применяется NMS в HailoRT. Для YOLO26 по умолчанию выводятся исходные выходы one-to-many для NMS на хосте; nms=False выбирает выходы one-to-one без NMS. Сегментация, поза и OBB используют исходные тензоры головы модели, классификация возвращает вероятности, вычисленные на чипе, а семантическая сегментация возвращает исходные логиты на Hailo-8/8L и для всех голов с одним классом либо готовые карты классов для голов с несколькими классами на Hailo-10H/15. Оценка глубины возвращает исходный логит глубины, который Ultralytics декодирует в метрическую карту глубины во время инференса. Динамические формы, встроенный NMS Ultralytics, FP16 и FP32 не поддерживаются.
Устранение неполадок при экспорте для Hailo#
Ошибка импорта Hailo Dataflow Compiler#
Если при экспорте сообщается, что hailo_sdk_client отсутствует, установи wheel DFC для целевого поколения оборудования в ту же среду Python, что и Ultralytics. Для Hailo-8/8L и Hailo-10H/15 нужны разные поколения компилятора.
Операционная система или архитектура не поддерживается#
Компиляция HEF поддерживается в Linux x86_64. Если на локальном компьютере установлена macOS или Windows, либо это Raspberry Pi или другая система ARM, выполни экспорт через Ultralytics Platform или используй совместимую рабочую станцию.
Экспорт занимает много времени#
Оптимизация DFC — самый ресурсоёмкий этап. Время компиляции увеличивается с размером модели, разрешением входных данных и объёмом калибровочных данных. Поддерживаемый GPU может ускорить оптимизацию, тогда как компиляция только на CPU может занять значительно больше времени.
Точность квантованной модели снижается#
Используй калибровочные изображения, похожие на реальные входные данные, с важными объектами, масштабами, условиями освещения и фонами. Перед развёртыванием сравни исходную модель PyTorch и экспортированный HEF на одном и том же валидационном наборе. Даже при хорошей калибровке сохраняется умеренный разрыв, зависящий от семейства моделей; измеренные базовые показатели см. в разделе Ожидаемая точность для разных семейств моделей.
HEF не загружается на устройство#
Убедись, что name соответствует физической архитектуре Hailo, а драйвер устройства, прошивка и пакеты HailoRT совместимы друг с другом. Проверь артефакт с помощью hailortcli parse-hef и убедись, что ускоритель определён верно, используя hailortcli fw-control identify.
Выводы разбираются некорректно#
Храни metadata.yaml рядом с HEF, чтобы Ultralytics мог выбрать соответствующий путь постобработки для YOLOv8, YOLO11 или YOLO26. Пользовательские приложения HailoRT также должны выбирать постобработку в соответствии с семейством экспортированной модели.
Итоги#
Экспорт Hailo в Ultralytics обеспечивает прямой путь от обученной модели YOLO до готового к развёртыванию HEF:
- Загрузи модель детекции или классификации YOLOv8, YOLO11 либо YOLO26; модель сегментации, позы или OBB YOLOv8/YOLO11; либо модель семантической сегментации или оценки глубины YOLO26.
- Выполни экспорт с помощью
format="hailo"и выбери целевую архитектуру. - Выполни калибровку и компиляцию локально с соответствующим DFC или воспользуйся управляемым экспортом в Ultralytics Platform.
- Скопируй HEF и
metadata.yamlна граничное устройство с Hailo. - Запусти инференс с помощью HailoRT, Raspberry Pi Picamera2 или видеоконвейера GStreamer.
Часто задаваемые вопросы#
Нет. Запусти DFC в поддерживаемой системе Linux x86_64, а затем разверни полученный HEF на Raspberry Pi.
Поддерживаемый GPU значительно сокращает время оптимизации DFC. Компиляция на CPU возможна, но может занять гораздо больше времени.
Прямой экспорт поддерживается для моделей детекции со стандартной головой детекции YOLOv8, YOLO11 или YOLO26; моделей сегментации, позы и OBB YOLOv8/YOLO11; а также моделей классификации YOLOv8/YOLO11/YOLO26. Сюда входят пользовательские модели, обученные на основе этих стандартных архитектур. Также поддерживаются модели семантической сегментации и оценки глубины YOLO26. Модели сегментации экземпляров, позы и OBB YOLO26, а также YOLOv10, YOLO-World, YOLOE и RT-DETR отклоняются, чтобы не создавать непроверенный HEF.
Да. Используй ту же команду
format="hailo"с пользовательскими весами.ptи передай YAML-файл обучающего набора данных черезdata, чтобы выполнить репрезентативную калибровку INT8. Имена и количество классов считываются из метаданных модели.Каждый HEF компилируется для фиксированной формы входных данных, поэтому изменить размер одного HEF динамически нельзя. На практике можно масштабировать входные данные на хосте до скомпилированного размера или скомпилировать несколько HEF для нужных разрешений. При экспорте выбери
imgsz, чтобы он соответствовал конвейеру развёртывания.В YOLO26 для регрессии рамок не используется DFL, поэтому обе головы компилируются в исходные тензоры, а не в конвейер NMS HailoRT, используемый в стиле YOLOv8. Ultralytics декодирует тензоры и по умолчанию применяет NMS либо возвращает детекции без NMS, если экспорт выполнен с
nms=False.Hailo Dataflow Compiler преобразует и квантует модель в HEF для конкретного оборудования на сборочной машине Linux x86_64. HailoRT загружает и запускает этот HEF на целевом устройстве.
Разверни скомпилированный HEF в среде выполнения Hailo. ONNX — это промежуточное представление, используемое при экспорте; после успешной компиляции оно удаляется.
Скачай wheel компилятора для своего поколения оборудования из Hailo Developer Zone. Компилятор нужен только для создания HEF; HailoRT запускает его на целевом ускорителе.
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.