Краткое руководство по началу работы: 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 в другие различные форматы.
-
Обновите список пакетов, установите pip и обновите до последней версии
sudo apt update sudo apt install python3-pip -y pip install -U pip
-
Установите
ultralytics
пакет pip с необязательными зависимостямиpip install ultralytics[export]
-
Перезагрузите устройство
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 и не обеспечивают достойной производительности.

Подробная сравнительная таблица
В таблице ниже представлены результаты эталонного тестирования для двух различных моделей (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, а также о том, как начать работу с модулями камеры Raspberry Pi.
Примечание
Raspberry Pi 5 использует более компактные CSI-разъемы, чем Raspberry Pi 4 (15-контактный против 22-контактного), поэтому для подключения к камере Raspberry Pi потребуется переходной кабель с 15-контактного на 22-контактный.
Тестирование камеры
Выполните следующую команду после подключения камеры к Raspberry Pi. Вы должны увидеть видеопоток с камеры в течение примерно 5 секунд.
rpicam-hello
Совет
Узнайте больше об rpicam-hello
использовании в официальной документации Raspberry Pi
Инференс с использованием камеры
Существует 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.
-
Используйте SSD
При использовании Raspberry Pi в режиме 24x7 рекомендуется использовать SSD для системы, поскольку SD-карта не сможет выдержать непрерывную запись и может сломаться. Благодаря встроенному разъему PCIe на Raspberry Pi 5 теперь вы можете подключать SSD-накопители с помощью адаптера, такого как NVMe Base для Raspberry Pi 5.
-
Прошивка без графического интерфейса
При прошивке Raspberry Pi OS вы можете не устанавливать среду рабочего стола (Raspberry Pi OS Lite), что позволит сэкономить немного оперативной памяти на устройстве, оставив больше места для обработки компьютерного зрения.
-
Разгон 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, выполните следующие действия:
- Обновите список пакетов и выполните установку.
pip
:sudo apt update sudo apt install python3-pip -y pip install -U pip
- Установите пакет Ultralytics с дополнительными зависимостями:
pip install ultralytics[export]
- Перезагрузите устройство, чтобы применить изменения:
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:
-
Используя
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-потока:
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")
Для получения подробных инструкций по настройке посетите раздел Логический вывод с помощью камеры.