Руководство по быстрому старту: Raspberry Pi с Ultralytics YOLO11
В этом подробном руководстве содержится подробная инструкция по развертыванию Ultralytics YOLO11 на устройствах Raspberry Pi. Кроме того, в нем приведены контрольные показатели производительности, демонстрирующие возможности YOLO11 на этих небольших и мощных устройствах.
Смотреть: Обновления и улучшения Raspberry Pi 5.
Примечание
Это руководство было протестировано на Raspberry Pi 4 и Raspberry Pi 5 под управлением последней версии Raspberry Pi OS Bookworm (Debian 12). Использование этого руководства для более старых устройств Raspberry Pi, таких как Raspberry Pi 3, будет работать при условии, что установлена та же Raspberry Pi OS Bookworm.
Что такое Raspberry Pi?
Raspberry Pi - это небольшой, доступный по цене одноплатный компьютер. Он стал популярным для широкого спектра проектов и приложений, от домашней автоматизации для любителей до промышленного использования. Платы Raspberry Pi могут работать под управлением различных операционных систем и оснащены контактами GPIO (General Purpose Input/Output), которые позволяют легко интегрировать их с датчиками, исполнительными механизмами и другими аппаратными компонентами. Они выпускаются в различных моделях с разными техническими характеристиками, но все они имеют одну и ту же основную философию дизайна - быть недорогими, компактными и универсальными.
Сравнение серий Raspberry Pi
Raspberry Pi 3 | Raspberry Pi 4 | Raspberry Pi 5 | |
---|---|---|---|
CPU | Broadcom BCM2837, Cortex-A53 64Bit SoC | Broadcom BCM2711, Cortex-A72 64Bit SoC | Broadcom BCM2712, Cortex-A76 64Bit SoC |
CPU Максимальная частота | 1,4 ГГц | 1,8 ГГц | 2,4 ГГц |
GPU | Videocore IV | Videocore VI | VideoCore VII |
GPU Максимальная частота | 400 МГц | 500 МГц | 800 МГц |
Память | 1GB LPDDR2 SDRAM | 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM | 4GB, 8GB LPDDR4X-4267 SDRAM |
PCIe | Н/Д | Н/Д | Интерфейс 1xPCIe 2.0 |
Максимальная потребляемая мощность | 2,5A@5V | 3A@5V | 5A@5V (PD включен) |
Что такое Raspberry Pi OS?
Raspberry Pi OS (ранее известная как Raspbian) - Unix-подобная операционная система, основанная на дистрибутиве Debian GNU/Linux для компактных одноплатных компьютеров семейства Raspberry Pi, распространяемых компанией Raspberry Pi Foundation. Raspberry Pi OS сильно оптимизирована для Raspberry Pi с процессорами ARM и использует модифицированное окружение рабочего стола LXDE с оконным менеджером Openbox stacking. Raspberry Pi OS находится в активной разработке, с акцентом на улучшение стабильности и производительности как можно большего количества пакетов Debian на Raspberry Pi.
Прошивка Raspberry Pi OS на Raspberry Pi
Первое, что нужно сделать, получив в руки Raspberry Pi, - прошить карту micro-SD с ОС Raspberry Pi, вставить ее в устройство и загрузиться в ОС. Следуйте подробной документации по началу работы с Raspberry Pi, чтобы подготовить устройство к первому использованию.
Установка Ultralytics
Существует два способа установки пакета Ultralytics на Raspberry Pi для создания вашего следующего проекта по компьютерному зрению. Вы можете использовать любой из них.
Начните с Docker
Самый быстрый способ начать работу с Ultralytics YOLO11 на Raspberry Pi - запустить предварительно созданный образ docker для Raspberry Pi.
Выполните приведенную ниже команду, чтобы извлечь контейнер Docker и запустить его на Raspberry Pi. Он основан на докер-образе arm64v8/debian, который содержит Debian 12 (Bookworm) в окружении Python3.
После этого перейдите к разделу "Использование NCNN на Raspberry Pi".
Запуск без Docker
Установите пакет Ultralytics
Здесь мы установим пакет Ultralytics на Raspberry Pi с дополнительными зависимостями, чтобы мы могли экспортировать PyTorch модели в другие различные форматы.
-
Обновление списка пакетов, установка pip и обновление до последней версии
-
Установите
ultralytics
Пакет pip с дополнительными зависимостями -
Перезагрузите устройство
Использование NCNN на Raspberry Pi
Из всех форматов экспорта моделей, поддерживаемых Ultralytics, NCNN обеспечивает наилучшую производительность при работе с устройствами Raspberry Pi, поскольку NCNN оптимизирован для мобильных/встраиваемых платформ (таких как архитектура ARM). Поэтому мы рекомендуем использовать NCNN для Raspberry Pi.
Преобразование модели в NCNN и проведение расчетов
Модель YOLO11n в формате PyTorch преобразуется в формат NCNN для проведения расчетов с экспортированной моделью.
Пример
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
Наконечник
Более подробную информацию о поддерживаемых вариантах экспорта можно найти на странице документацииUltralytics , посвященной вариантам развертывания.
Raspberry Pi 5 YOLO11 Бенчмарки
YOLO11 Команда Ultralytics провела бенчмарки на девяти различных форматах моделей, измеряя скорость и точность: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel , TF GraphDef , TF Lite, PaddlePaddle, NCNN. Бенчмарки выполнялись на Raspberry Pi 5 с точностью FP32 при стандартном размере входного изображения 640.
Сравнительная таблица
Мы включили бенчмарки только для моделей YOLO11n и YOLO11s, поскольку другие модели слишком велики для работы на Raspberry Pis и не обеспечивают достойной производительности.
Подробная сравнительная таблица
В таблице ниже представлены результаты бенчмарка для двух разных моделей (YOLO11n, YOLO11s) для девяти различных форматов (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel , TF GraphDef , TF Lite, PaddlePaddle, NCNN), работающих на Raspberry Pi 5, с указанием статуса, размера, метрики mAP50-95(B) и времени вывода для каждой комбинации.
Производительность
Формат | Статус | Размер на диске (МБ) | mAP50-95(B) | Время вывода (мс/им) |
---|---|---|---|---|
PyTorch | ✅ | 5.4 | 0.6100 | 405.238 |
TorchScript | ✅ | 10.5 | 0.6082 | 526.628 |
ONNX | ✅ | 10.2 | 0.6082 | 168.082 |
OpenVINO | ✅ | 10.4 | 0.6082 | 81.192 |
TF SavedModel | ✅ | 25.8 | 0.6082 | 377.968 |
TF GraphDef | ✅ | 10.3 | 0.6082 | 487.244 |
TF Lite | ✅ | 10.3 | 0.6082 | 317.398 |
PaddlePaddle | ✅ | 20.4 | 0.6082 | 561.892 |
MNN | ✅ | 10.1 | 0.6106 | 112.554 |
NCNN | ✅ | 10.2 | 0.6106 | 88.026 |
Формат | Статус | Размер на диске (МБ) | mAP50-95(B) | Время вывода (мс/им) |
---|---|---|---|---|
PyTorch | ✅ | 18.4 | 0.7526 | 1011.60 |
TorchScript | ✅ | 36.5 | 0.7416 | 1268.502 |
ONNX | ✅ | 36.3 | 0.7416 | 324.17 |
OpenVINO | ✅ | 36.4 | 0.7416 | 179.324 |
TF SavedModel | ✅ | 91.1 | 0.7416 | 714.382 |
TF GraphDef | ✅ | 36.4 | 0.7416 | 1019.83 |
TF Lite | ✅ | 36.4 | 0.7416 | 849.86 |
PaddlePaddle | ✅ | 72.5 | 0.7416 | 1276.34 |
MNN | ✅ | 36.2 | 0.7409 | 273.032 |
NCNN | ✅ | 36.2 | 0.7419 | 194.858 |
Бенчмарк Ultralytics 8.3.39
Воспроизведите наши результаты
Чтобы воспроизвести приведенные выше Ultralytics контрольные показатели для всех форматов экспорта, выполните этот код:
Пример
Обратите внимание, что результаты бенчмарков могут отличаться в зависимости от точной аппаратной и программной конфигурации системы, а также от текущей нагрузки на систему в момент запуска бенчмарков. Для получения наиболее достоверных результатов используйте набор данных с большим количеством изображений, т. е. data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 изображений val).
Используйте камеру Raspberry Pi
При использовании Raspberry Pi в проектах по компьютерному зрению может возникнуть необходимость в получении видеоизображения в реальном времени для проведения выводов. Встроенный разъем MIPI CSI на Raspberry Pi позволяет подключать официальные модули камер Raspberry PI. В этом руководстве мы использовали модуль камеры Raspberry Pi Camera Module 3 для захвата видеопотока и проведения расчетов с использованием моделей YOLO11 .
Наконечник
Узнайте больше о различных модулях камер, предлагаемых Raspberry Pi, а также о том, как начать работу с модулями камер Raspberry Pi.
Примечание
В Raspberry Pi 5 используются более компактные разъемы CSI, чем в Raspberry Pi 4 (15-контактные против 22-контактных), поэтому для подключения к камере Raspberry Pi вам понадобится кабель-переходник с 15-контактного на 22-контактный.
Проверьте камеру
После подключения камеры к Raspberry Pi выполните следующую команду. Вы должны увидеть прямую трансляцию видео с камеры в течение примерно 5 секунд.
Наконечник
Узнайте больше о rpicam-hello
использование в официальной документации по Raspberry Pi
Умозаключение с помощью камеры
Существует два способа использования камеры Raspberry Pi для вывода моделей YOLO11 .
Использование
Мы можем использовать picamera2
которая поставляется с предустановленной ОС Raspberry Pi для доступа к камере и выводам моделей YOLO11 .
Пример
import cv2
from picamera2 import Picamera2
from ultralytics import YOLO
# Initialize the Picamera2
picam2 = Picamera2()
picam2.preview_configuration.main.size = (1280, 720)
picam2.preview_configuration.main.format = "RGB888"
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
while True:
# Capture frame-by-frame
frame = picam2.capture_array()
# Run YOLO11 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the resulting frame
cv2.imshow("Camera", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) == ord("q"):
break
# Release resources and close windows
cv2.destroyAllWindows()
Нам нужно инициировать TCP-поток с помощью rpicam-vid
с подключенной камеры, чтобы впоследствии использовать URL-адрес этого потока в качестве входных данных при составлении выводов. Выполните следующую команду, чтобы запустить поток TCP.
Узнайте больше о rpicam-vid
использование в официальной документации по Raspberry Pi
Наконечник
Если вы хотите изменить тип ввода изображения/видео, обратитесь к нашему документу об источниках вывода.
Лучшие практики при использовании Raspberry Pi
Чтобы обеспечить максимальную производительность на Raspberry Pis под управлением YOLO11, необходимо следовать нескольким рекомендациям.
-
Используйте твердотельный накопитель
При непрерывном использовании Raspberry Pi в режиме 24x7 рекомендуется использовать для системы SSD, поскольку SD-карта не выдержит непрерывной записи и может выйти из строя. Благодаря встроенному разъему PCIe в Raspberry Pi 5 теперь можно подключать SSD-накопители с помощью адаптера, например NVMe Base для Raspberry Pi 5.
-
Flash без графического интерфейса
При прошивке Raspberry Pi OS можно отказаться от установки среды рабочего стола (Raspberry Pi OS Lite), что позволит немного сэкономить оперативную память устройства, оставив больше места для обработки компьютерного зрения.
Следующие шаги
Поздравляем с успешной настройкой YOLO на вашем Raspberry Pi! Для дальнейшего обучения и поддержки посетите сайт Ultralytics YOLO11 Docs и Kashmir World Foundation.
Благодарности и цитаты
Это руководство было изначально создано Дааном Элтинком для Kashmir World Foundation, организации, занимающейся использованием YOLO для сохранения исчезающих видов. Мы признаем их новаторскую работу и образовательную направленность в области технологий обнаружения объектов.
Более подробную информацию о деятельности фонда Kashmir World Foundation вы можете найти на его сайте.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Как установить Ultralytics YOLO11 на Raspberry Pi без использования Docker?
Чтобы установить Ultralytics YOLO11 на Raspberry Pi без Docker, выполните следующие действия:
- Обновите список пакетов и установите
pip
: - Установите пакет Ultralytics с дополнительными зависимостями:
- Перезагрузите устройство, чтобы применить изменения:
Подробные инструкции см. в разделе " Запуск без Docker ".
Почему стоит использовать формат Ultralytics YOLO11 ' NCNN на Raspberry Pi для задач искусственного интеллекта?
Ultralytics YOLO11Формат NCNN оптимизирован для мобильных и встраиваемых платформ, что делает его идеальным для выполнения задач ИИ на устройствах Raspberry Pi. NCNN максимально повышает производительность выводов за счет использования архитектуры ARM, обеспечивая более быструю и эффективную обработку по сравнению с другими форматами. Более подробную информацию о поддерживаемых вариантах экспорта можно найти на странице документацииUltralytics , посвященной вариантам развертывания.
Как преобразовать модель YOLO11 в формат NCNN для использования на Raspberry Pi?
Вы можете преобразовать модель PyTorch YOLO11 в формат NCNN с помощью команд Python или CLI :
Пример
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
Более подробную информацию вы найдете в разделе Использование NCNN на Raspberry Pi.
Какие аппаратные различия между Raspberry Pi 4 и Raspberry Pi 5 имеют отношение к запуску YOLO11?
Основные отличия включают:
- CPU: В Raspberry Pi 4 используется 64-битная SoC Broadcom BCM2711, Cortex-A72, а в Raspberry Pi 5 - 64-битная SoC Broadcom BCM2712, Cortex-A76.
- Максимальная частота CPU : Максимальная частота Raspberry Pi 4 составляет 1,8 ГГц, а Raspberry Pi 5 - 2,4 ГГц.
- Память: Raspberry Pi 4 предлагает до 8 ГБ памяти LPDDR4-3200 SDRAM, а Raspberry Pi 5 - LPDDR4X-4267 SDRAM, доступную в вариантах 4 и 8 ГБ.
Эти усовершенствования способствуют повышению производительности моделей YOLO11 на Raspberry Pi 5 по сравнению с Raspberry Pi 4. Более подробную информацию см. в таблице сравнения серий Raspberry Pi.
Как настроить модуль камеры Raspberry Pi для работы с Ultralytics YOLO11 ?
Существует два способа настройки камеры Raspberry Pi для получения выводов YOLO11 :
-
Использование
picamera2
:import cv2 from picamera2 import Picamera2 from ultralytics import YOLO picam2 = Picamera2() picam2.preview_configuration.main.size = (1280, 720) picam2.preview_configuration.main.format = "RGB888" picam2.preview_configuration.align() picam2.configure("preview") picam2.start() model = YOLO("yolo11n.pt") while True: frame = picam2.capture_array() results = model(frame) annotated_frame = results[0].plot() cv2.imshow("Camera", annotated_frame) if cv2.waitKey(1) == ord("q"): break cv2.destroyAllWindows()
-
Использование потока TCP:
Подробные инструкции по настройке можно найти в разделе "Умозаключение с помощью камеры".