Нейронный ускоритель Hailo-8L (AI HAT+)¶
Hailo-8L — нейронный ускоритель, подключенный к Raspberry Pi 5 по PCIe. Он позволяет запускать нейросети, не нагружая основной процессор Raspberry Pi 5.
Hailo-8L — не отдельный компьютер: Raspberry Pi 5 получает изображение с камеры, подготавливает данные и обрабатывает результат, а Hailo-8L выполняет основную часть вычислений самой нейронной сети.
Hailo работает с моделями в формате Hailo Executable Format (.hef). Файлы весов PyTorch (.pt) и модели ONNX (.onnx) сначала необходимо скомпилировать в HEF на компьютере для нужной архитектуры Hailo. Этот процесс описан в разделе Перевод YOLOv8 в HEF.
Принцип работы¶
Работа с моделью состоит из трех частей:
Изображение -> программа пользователя -> Hailo-8L -> результат нейросети
PCIe-драйвер подключает Hailo-8L к операционной системе;
HailoRT загружает HEF, настраивает ускоритель и запускает модель (инференс);
программа пользователя получает изображение, подготавливает его для модели и обрабатывает результат.
Инференс — это запуск обученной нейронной сети на входных данных. Для YOLO программа обычно выполняет следующие действия:
получает кадр с камеры;
изменяет его размер;
приводит данные к порядку цветовых каналов (RGB);
передает кадр в Hailo-8L;
получает результат инференса;
преобразует результат в необходимую информацию об объектах.
Совет
Не все модели используют одинаковый размер изображения, порядок цветовых каналов или формат данных. Эти параметры необходимо проверять в описании HEF.
Установка PCIe-драйвера¶
С помощью FileZilla или WinSCP переместите пакет драйвера (hailort-pcie-driver_4.23.0_all.deb) в корень Raspberry Pi 5.
Установите пакет и перезагрузите Raspberry Pi 5:
cd ~
sudo apt update
sudo apt install ./hailort-pcie-driver_4.23.0_all.deb
sudo reboot
После перезагрузки проверьте, что ускоритель обнаружен:
lspci | grep -i hailo
ls -l /dev/hailo0
Ожидаемый результат: lspci содержит устройство Hailo:
Co-processor: Hailo Technologies Ltd. Hailo-8 AI Processor
Установка HailoRT¶
HailoRT — библиотека для взаимодействия программы с Hailo-8L. Она предоставляет инструменты для загрузки HEF, настройки ускорителя и запуска инференса.
Установите необходимые пакеты:
sudo apt update
sudo apt install -y git cmake libzmq3-dev
Загрузите исходный код HailoRT версии 4.23.0:
cd ~
git clone https://github.com/hailo-ai/hailort.git
cd hailort
git fetch --tags
git checkout v4.23.0
Соберите и установите HailoRT:
cmake . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr
sudo cmake --build build --target install -j$(nproc)
Проверьте установку:
which hailortcli
hailortcli --version
hailortcli scan
Команда
which hailortcliдолжна вывести путь к установленной программе, например/usr/bin/hailortcli.Команда
hailortcli --versionдолжна показать установленную версию HailoRT.Команда
hailortcli scanпроверяет доступные устройства Hailo. В результате должен отображаться подключенный ускоритель.
Осторожно
Если hailortcli установлена, но scan не видит устройство, проблема обычно связана не с HEF, а с подключением устройства, PCIe-драйвером или совместимостью версий.
Установка Python-модуля¶
Python-модуль hailo_platform нужен для запуска модели из своей Python-программы или ROS 2-ноды.
cd ~/hailort/hailort/libhailort/bindings/python/platform
HAILORT_INCLUDE_DIR=/usr/include \
LIBHAILORT_PATH=/usr/lib/aarch64-linux-gnu/libhailort.so \
python3 -m pip install --user --break-system-packages .
Проверьте импорт:
python3 -c "from hailo_platform import HEF, VDevice; print('HailoRT Python: OK')"
Если команда выводит HailoRT Python: OK, Python-модуль доступен для текущего интерпретатора Python.
Проверка HEF¶
Создайте папку для моделей:
mkdir -p ~/hailo_models
После копирования модели проверьте ее описание:
hailortcli parse-hef ~/hailo_models/viz.hef
Для модели YOLOv8 с входом 640x640 в выводе должны присутствовать:
архитектура Hailo-8L;
вход размером
640x640x3;выход модели или встроенного NMS.
Запустите проверку производительности модели:
hailortcli run ~/hailo_models/viz.hef
Совет
Если команда сообщает, что HEF несовместима с устройством, проверьте архитектуру HEF.
Например, HEF, скомпилированная для hailo8, не подходит для устройства hailo8l.
Использование в своей программе¶
Минимальная программа может открыть HEF и вывести информацию о ее входах и выходах:
from hailo_platform import HEF
hef = HEF("/home/pi/hailo_models/viz.hef")
print(hef.get_input_vstream_infos())
print(hef.get_output_vstream_infos())
В этом примере программа пока не запускает нейронную сеть.
Она только открывает HEF и получает описание входных и выходных потоков модели.
Для обработки изображения программа должна дополнительно:
Получить кадр с камеры.
Подготовить кадр в соответствии с входным форматом
HEF.Передать кадр в Hailo через
InferVStreams.Обработать выход модели.
В ROS 2 эти действия можно оформить в отдельную ноду: подписаться на sensor_msgs/msg/Image, подготовить изображение, запустить инференс и опубликовать результат, например, как vision_msgs/msg/Detection2DArray.
Возможные проблемы¶
Проблема |
Что проверить |
|---|---|
Нет |
Подключение AI HAT+, установку PCIe-драйвера и вывод |
|
Подключение Hailo, PCIe-драйвер и загрузку модуля |
Не импортируется |
Установку Python-модуля, используемый Python и путь к |
HEF не запускается |
Архитектуру HEF и совместимость с |
YOLO работает, но распознает плохо |
Размер входного изображения, RGB/BGR, тип данных, параметры и калибровочный набор |