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

Руководство по быстрому старту: 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
ПРОЦЕССОР Broadcom BCM2837, Cortex-A53 64Bit SoC Broadcom BCM2711, Cortex-A72 64Bit SoC Broadcom BCM2712, Cortex-A76 64Bit SoC
Максимальная частота процессора 1.4 ГГц 1,8 ГГц 2,4 ГГц
GPU Videocore IV Videocore VI Видеоядро VII
Максимальная частота графического процессора 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

Here we will install Ultralytics package on the Raspberry Pi with optional dependencies so that we can export the PyTorch models to other different formats.

  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

Out of all the model export formats supported by Ultralytics, NCNN delivers the best inference performance when working with Raspberry Pi devices because NCNN is highly optimized for mobile/ embedded platforms (such as ARM architecture). Therefor our recommendation is to use NCNN with 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 benchmarks were run by the Ultralytics team on nine different model formats measuring speed and accuracy: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, NCNN. Benchmarks were run on both Raspberry Pi 5 and Raspberry Pi 4 at FP32 precision with default input image size of 640.

Примечание

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

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

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

Экосистема NVIDIA Jetson

Экосистема NVIDIA Jetson

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

The below table represents the benchmark results for two different models (YOLOv8n, YOLOv8s) across nine different formats (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, NCNN), running on both Raspberry Pi 4 and Raspberry Pi 5, giving us the status, size, mAP50-95(B) metric, and inference time for each combination.

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

Формат Статус Размер на диске (МБ) 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, ты можешь посетить их сайт.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (7), IvorZhu331 (1), lakshanthad (2)

Комментарии