Перейти к содержанию

Краткое руководство по началу работы: 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.4GHz 1.8GHz 2.4GHz
GPU Videocore IV Videocore VI VideoCore VII
Максимальная частота GPU 400Mhz 500Mhz 800Mhz
Память 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe Н/Д Н/Д 1xPCIe 2.0 Interface
Максимальная потребляемая мощность 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 OS, вставить ее в устройство и загрузиться в ОС. Следуйте подробной документации по началу работы от Raspberry Pi, чтобы подготовить устройство к первому использованию.

Настройка Ultralytics

Существует два способа настройки пакета Ultralytics на Raspberry Pi для создания вашего следующего проекта в области компьютерного зрения. Вы можете использовать любой из них.

Начать с Docker

Самый быстрый способ начать работу с Ultralytics YOLO11 на Raspberry Pi — это запустить предварительно собранный образ Docker для Raspberry Pi.

Выполните приведенную ниже команду, чтобы извлечь контейнер Docker и запустить его на Raspberry Pi. Он основан на образе Docker 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 и запуск инференса

Модель 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")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'

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

Совет

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

Бенчмарки YOLO11 на Raspberry Pi 5

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

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

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

Бенчмарки YOLO11 на RPi 5
Протестировано с Ultralytics 8.3.152

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

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

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

Формат Статус Размер на диске (МБ) mAP50-95(B) Время инференса (мс/изобр.)
PyTorch 5.4 0.5101 387.63
TorchScript 10.5 0.5077 457.84
ONNX 10.2 0.5077 191.09
OpenVINO 10.4 0.5058 84.76
TF SavedModel 25.9 0.5077 306.94
TF GraphDef 10.3 0.5077 309.82
TF Lite 10.3 0.5077 425.77
PaddlePaddle 20.5 0.5077 463.93
MNN 10.1 0.5059 114.97
NCNN 10.2 0.5031 94.03
Формат Статус Размер на диске (МБ) mAP50-95(B) Время инференса (мс/изобр.)
PyTorch 18.4 0.5791 962.69
TorchScript 36.5 0.5782 1181.94
ONNX 36.3 0.5782 449.85
OpenVINO 36.4 0.5810 181.53
TF SavedModel 91.0 0.5782 660.62
TF GraphDef 36.4 0.5782 669.23
TF Lite 36.3 0.5782 1093.41
PaddlePaddle 72.6 0.5782 1140.61
MNN 36.2 0.5805 274.63
NCNN 36.2 0.5784 224.20

Протестировано с Ultralytics 8.3.152

Примечание

Время логического вывода не включает предварительную/постобработку.

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

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

Пример

from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
results = model.benchmark(data="coco128.yaml", imgsz=640)
# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
yolo benchmark model=yolo11n.pt data=coco128.yaml imgsz=640

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

Использование камеры Raspberry Pi

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

Примечание

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

Тестирование камеры

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

rpicam-hello

Инференс с использованием камеры

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

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

Мы можем использовать picamera2 который предустановлен в Raspberry Pi OS для доступа к камере и инференса моделей 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 -n -t 0 --inline --listen -o tcp://127.0.0.1:8888

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

Пример

from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

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

Совет

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

Рекомендации по использованию Raspberry Pi

Существует несколько передовых методов, которые необходимо соблюдать, чтобы обеспечить максимальную производительность на Raspberry Pi при работе с YOLO11.

  1. Используйте SSD

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

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

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

  3. Разгон Raspberry Pi

    Если вы хотите немного повысить производительность при запуске моделей Ultralytics YOLO11 на Raspberry Pi 5, вы можете разогнать CPU с базовой частоты 2,4 ГГц до 2,9 ГГц, а GPU с 800 МГц до 1 ГГц. Если система станет нестабильной или произойдет сбой, уменьшите значения разгона с шагом 100 МГц. Обеспечьте надлежащее охлаждение, так как разгон увеличивает тепловыделение и может привести к тепловому дросселированию.

    a. Обновите программное обеспечение

    sudo apt update && sudo apt dist-upgrade
    

    b. Откройте для редактирования файл конфигурации

    sudo nano /boot/firmware/config.txt
    

    c. Добавьте следующие строки внизу

    arm_freq=3000
    gpu_freq=1000
    force_turbo=1
    

    d. Сохраните и выйдите, нажав CTRL + X, затем Y и нажмите ENTER

    e. Перезагрузите Raspberry Pi

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

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

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

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

Для получения дополнительной информации о деятельности Kashmir World Foundation вы можете посетить их веб-сайт.

Часто задаваемые вопросы

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

Чтобы настроить Ultralytics YOLO11 на 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.

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

Формат NCNN в Ultralytics YOLO11 высоко оптимизирован для мобильных и встроенных платформ, что делает его идеальным для выполнения задач ИИ на устройствах 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")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'

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

Для получения более подробной информации см. раздел Использование NCNN на Raspberry Pi.

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

Ключевые различия включают:

  • CPU: Raspberry Pi 4 использует Broadcom BCM2711, Cortex-A72 64-bit SoC, а Raspberry Pi 5 использует Broadcom BCM2712, Cortex-A76 64-bit SoC.
  • Максимальная частота 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:

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

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

Для получения подробных инструкций по настройке посетите раздел Логический вывод с помощью камеры.



📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии