Перейти к содержимому

Руководство по быстрому старту: Raspberry Pi с Ultralytics YOLOv8

Это исчерпывающее руководство содержит подробный инструктаж по развертыванию Ultralytics YOLOv8 на устройствах Raspberry Pi. Кроме того, в нем представлены бенчмарки производительности, демонстрирующие возможности YOLOv8 на этих маленьких и мощных устройствах.



Смотри: Обновления и улучшения 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, 64-разрядная SoC Cortex-A72 Broadcom BCM2712, 64-разрядная SoC Cortex-A76
CPU Максимальная частота 1.4 ГГц 1,8 ГГц 2,4 ГГц
GPU Videocore IV Videocore VI Видеоядро VII
GPU Максимальная частота 400 МГц 500 МГц 800 МГц
Память 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe N/A N/A Интерфейс 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. 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 YOLOv8 на Raspberry Pi - запустить его с помощью предварительно собранного образа docker для Raspberry Pi.

Выполни приведенную ниже команду, чтобы вытащить Docker-контейнер и запустить его на Raspberry Pi. Он основан на докер-образе arm64v8/debian, который содержит Debian 12 (Bookworm) в окружении Python3.

t=ultralytics/ultralytics:latest-arm64 && sudo docker pull $t && sudo docker run -it --ipc=host $t

После того как это будет сделано, переходи к разделу "Использование NCNN на Raspberry Pi".

Запуск без Docker

Установи пакет Ultralytics

Здесь мы установим Ultralytics на Raspberry Pi с необязательными зависимостями, чтобы мы могли экспортировать PyTorch моделей в другие форматы.

  1. Обнови список пакетов, установи pip и обновись до последней версии

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Установи ultralytics Пакет pip с дополнительными зависимостями

    pip install ultralytics[export]
    
  3. Перезагрузите устройство

    sudo reboot
    

Используй NCNN на Raspberry Pi

Из всех форматов экспорта моделей, поддерживаемых Ultralytics, NCNN обеспечивает наилучшую производительность логических выводов при работе с устройствами Raspberry Pi, поскольку NCNN оптимизирован для мобильных/встраиваемых платформ (например, архитектуры ARM). В связи с этим мы рекомендуем использовать NCNN с Raspberry Pi.

Преобразуй модель в NCNN и выполни вывод

Модель YOLOv8n в формате PyTorch конвертируется в NCNN , чтобы запустить вывод с экспортированной моделью.

Пример

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model to NCNN format
model.export(format="ncnn")  # creates 'yolov8n_ncnn_model'

# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")

# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'

Наконечник

Более подробно о поддерживаемых вариантах экспорта можно узнать на странице документацииUltralytics , посвященной вариантам развертывания.

Raspberry Pi 5 против Raspberry Pi 4 YOLOv8 Бенчмарки

YOLOv8 Бенчмарки проводились Ultralytics Команда работает над девятью различными форматами моделей, измеряющих скорость и точность: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Облегченный, PaddlePaddle, NCNN. Тесты проводились на Raspberry Pi 5 и Raspberry Pi 4 с точностью FP32 с размером входного изображения по умолчанию 640.

Примечание

Мы включили бенчмарки только для моделей YOLOv8n и YOLOv8s , потому что другие размеры моделей слишком велики для запуска на Raspberry Pis и не обеспечивают достойной производительности.

Сравнительная таблица

Производительность

NVIDIA Экосистема Джетсона

NVIDIA Экосистема Джетсона

Подробная сравнительная таблица

В таблице ниже представлены результаты тестов производительности для двух разных моделей (YOLOv8n, YOLOv8s) в девяти различных форматах (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Облегченный, PaddlePaddle, NCNN), работающий как на Raspberry Pi 4, так и на Raspberry Pi 5, предоставляя нам статус, размер, метрику mAP50-95(B) и время вывода для каждой комбинации.

Производительность

Формат Статус Размер на диске (МБ) mAP50-95(B) Время вывода (мс/им)
PyTorch 6.2 0.6381 508.61
TorchScript 12.4 0.6092 558.38
ONNX 12.2 0.6092 198.69
OpenVINO 12.3 0.6092 704.70
TF SavedModel 30.6 0.6092 367.64
TF GraphDef 12.3 0.6092 473.22
TF Lite 12.3 0.6092 380.67
PaddlePaddle 24.4 0.6092 703.51
NCNN 12.2 0.6034 94.28
Формат Статус Размер на диске (МБ) mAP50-95(B) Время вывода (мс/им)
PyTorch 21.5 0.6967 969.49
TorchScript 43.0 0.7136 1110.04
ONNX 42.8 0.7136 451.37
OpenVINO 42.9 0.7136 873.51
TF SavedModel 107.0 0.7136 658.15
TF GraphDef 42.8 0.7136 946.01
TF Lite 42.8 0.7136 1013.27
PaddlePaddle 85.5 0.7136 1560.23
NCNN 42.7 0.7204 211.26
Формат Статус Размер на диске (МБ) mAP50-95(B) Время вывода (мс/им)
PyTorch 6.2 0.6381 1068.42
TorchScript 12.4 0.6092 1248.01
ONNX 12.2 0.6092 560.04
OpenVINO 12.3 0.6092 534.93
TF SavedModel 30.6 0.6092 816.50
TF GraphDef 12.3 0.6092 1007.57
TF Lite 12.3 0.6092 950.29
PaddlePaddle 24.4 0.6092 1507.75
NCNN 12.2 0.6092 414.73
Формат Статус Размер на диске (МБ) mAP50-95(B) Время вывода (мс/им)
PyTorch 21.5 0.6967 2589.58
TorchScript 43.0 0.7136 2901.33
ONNX 42.8 0.7136 1436.33
OpenVINO 42.9 0.7136 1225.19
TF SavedModel 107.0 0.7136 1770.95
TF GraphDef 42.8 0.7136 2146.66
TF Lite 42.8 0.7136 2945.03
PaddlePaddle 85.5 0.7136 3962.62
NCNN 42.7 0.7136 1042.39

Воспроизведи наши результаты

Чтобы воспроизвести приведенные выше Ultralytics бенчмарки на всех форматах экспорта, запусти этот код:

Пример

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

Учти, что результаты бенчмарков могут отличаться в зависимости от точной аппаратной и программной конфигурации системы, а также от текущей загруженности системы на момент запуска бенчмарков. Для получения наиболее достоверных результатов используй набор данных с большим количеством изображений, то есть data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 val изображений).

Используй камеру Raspberry Pi

При использовании Raspberry Pi в проектах по компьютерному зрению может оказаться существенным захват видеопотока в реальном времени для проведения выводов. Встроенный в Raspberry Pi разъем MIPI CSI позволяет подключать официальные модули камер Raspberry PI. В этом руководстве мы использовали модуль камеры Raspberry Pi Camera Module 3 для захвата видеопотока и проведения расчетов с помощью моделей YOLOv8 .

Примечание

В Raspberry Pi 5 используются более компактные разъемы CSI, чем в Raspberry Pi 4 (15-контактные против 22-контактных), поэтому для подключения к камере Raspberry Pi тебе понадобится кабель-переходник с 15-контактного на 22-контактный.

Проверь камеру

Выполни следующую команду после подключения камеры к Raspberry Pi. Ты должен увидеть прямую трансляцию видео с камеры в течение примерно 5 секунд.

rpicam-hello

Умозаключение с помощью камеры

Существует 2 метода использования камеры Raspberry Pi для вывода моделей YOLOv8 .

Использование

Мы можем использовать picamera2которая поставляется с предустановленной ОС Raspberry Pi для доступа к камере и вывода моделей YOLOv8 .

Пример

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 YOLOv8 model
model = YOLO("yolov8n.pt")

while True:
    # Capture frame-by-frame
    frame = picam2.capture_array()

    # Run YOLOv8 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 -n -t 0 --inline --listen -o tcp://127.0.0.1:8888

Узнай больше о rpicam-vid Использование в официальной документации по Raspberry Pi

Пример

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Run inference
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolov8n.pt source="tcp://127.0.0.1:8888"

Наконечник

Если ты хочешь изменить тип входного сигнала изображения/видео, посмотри наш документ об источниках вывода.

Лучшие практики при использовании Raspberry Pi

Есть несколько лучших практик, которым нужно следовать, чтобы обеспечить максимальную производительность на Raspberry Pis под управлением YOLOv8.

  1. Используй твердотельный накопитель

    При постоянном использовании Raspberry Pi в режиме 24x7 рекомендуется использовать SSD для системы, потому что SD-карта не выдержит непрерывной записи и может выйти из строя. Благодаря встроенному разъему PCIe на Raspberry Pi 5 теперь ты можешь подключать SSD-накопители с помощью адаптера, например NVMe Base for Raspberry Pi 5.

  2. Флеш без графического интерфейса

    При прошивке Raspberry Pi OS ты можешь не устанавливать окружение рабочего стола (Raspberry Pi OS Lite), и это поможет немного сэкономить оперативную память устройства, оставив больше места для обработки компьютерного зрения.

Следующие шаги

Поздравляю тебя с успешной настройкой YOLO на твоем Raspberry Pi! Для дальнейшего обучения и поддержки посети Ultralytics YOLOv8 Docs и Kashmir World Foundation.

Благодарности и цитаты

Изначально это руководство было создано Дааном Элтинком для Kashmir World Foundation, организации, занимающейся использованием YOLO для сохранения исчезающих видов животных. Мы признаем их новаторскую работу и образовательную направленность в области технологий обнаружения объектов.

Чтобы узнать больше о деятельности Kashmir World Foundation, ты можешь посетить их сайт.

ВОПРОСЫ И ОТВЕТЫ

Как настроить Ultralytics YOLOv8 на Raspberry Pi без использования Docker?

Чтобы установить Ultralytics YOLOv8 на Raspberry Pi без Docker, выполни следующие шаги:

  1. Обнови список пакетов и установи pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Установи пакет Ultralytics с дополнительными зависимостями:
    pip install ultralytics[export]
    
  3. Перезагрузи устройство, чтобы применить изменения:
    sudo reboot
    

Подробные инструкции смотри в разделе " Запуск без Docker ".

Почему стоит использовать формат Ultralytics YOLOv8 ' NCNN на Raspberry Pi для задач искусственного интеллекта?

Ultralytics YOLOv8Формат NCNN максимально оптимизирован для мобильных и встраиваемых платформ, что делает его идеальным для выполнения задач ИИ на устройствах Raspberry Pi. NCNN максимально повышает производительность выводов за счет использования архитектуры ARM, обеспечивая более быструю и эффективную обработку по сравнению с другими форматами. Более подробно о поддерживаемых вариантах экспорта можно узнать на странице документацииUltralytics , посвященной вариантам развертывания.

Как преобразовать модель YOLOv8 в формат NCNN для использования на Raspberry Pi?

Ты можешь преобразовать модель PyTorch YOLOv8 в формат NCNN с помощью команд Python или CLI :

Пример

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model to NCNN format
model.export(format="ncnn")  # creates 'yolov8n_ncnn_model'

# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")

# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'

Подробнее об этом читай в разделе " Использование NCNN на Raspberry Pi ".

Какие аппаратные различия между Raspberry Pi 4 и Raspberry Pi 5 имеют отношение к запуску YOLOv8?

Основные отличия:

  • 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 Гб.

Эти усовершенствования способствуют более высоким показателям производительности моделей YOLOv8 на Raspberry Pi 5 по сравнению с Raspberry Pi 4. Более подробную информацию см. в таблице сравнения серий Raspberry Pi.

Как настроить модуль камеры Raspberry Pi для работы с Ultralytics YOLOv8 ?

Есть два способа настроить камеру Raspberry Pi для получения выводов YOLOv8 :

  1. Использование 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("yolov8n.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()
    
  2. Использование TCP-потока:

    rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888
    
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model("tcp://127.0.0.1:8888")
    

Подробные инструкции по настройке можно найти в разделе " Inference with Camera ".



Создано 2023-11-12, Обновлено 2024-07-05
Авторы: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)

Комментарии