Salta para o conte√ļdo

Guia de iniciação rápida: Raspberry Pi com Ultralytics YOLOv8

Este guia abrangente fornece um passo a passo detalhado para implantar o Ultralytics YOLOv8 em dispositivos Raspberry Pi. Além disso, apresenta benchmarks de desempenho para demonstrar os recursos do YOLOv8 nesses dispositivos pequenos e poderosos.



Observa: Actualiza√ß√Ķes e melhorias do Raspberry Pi 5.

Nota

Este guia foi testado com Raspberry Pi 4 e Raspberry Pi 5 executando a √ļltima vers√£o do Raspberry Pi OS Bookworm (Debian 12). Espera-se que este guia funcione em dispositivos Raspberry Pi mais antigos, como o Raspberry Pi 3, desde que o mesmo Raspberry Pi OS Bookworm esteja instalado.

O que é o Raspberry Pi?

O Raspberry Pi √© um computador de placa √ļnica, pequeno e econ√≥mico. Tornou-se popular para uma vasta gama de projectos e aplica√ß√Ķes, desde a automa√ß√£o dom√©stica para amadores at√© √†s utiliza√ß√Ķes industriais. As placas Raspberry Pi s√£o capazes de executar uma variedade de sistemas operativos e oferecem pinos GPIO (General Purpose Input/Output) que permitem uma f√°cil integra√ß√£o com sensores, actuadores e outros componentes de hardware. Existem diferentes modelos com especifica√ß√Ķes variadas, mas todos partilham a mesma filosofia de conce√ß√£o b√°sica de serem de baixo custo, compactos e vers√°teis.

Comparação da série Raspberry Pi

Raspberry Pi 3 Raspberry Pi 4 Raspberry Pi 5
CPU Broadcom BCM2837, SoC Cortex-A53 64Bit Broadcom BCM2711, Cortex-A72 64Bit SoC Broadcom BCM2712, Cortex-A76 64Bit SoC
Frequência máxima da CPU 1,4 GHz 1.8GHz 2,4 GHz
GPU Videocore IV Videocore VI VideoCore VII
Frequência máxima da GPU 400Mhz 500Mhz 800Mhz
Memória 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe N/A N/A Interface 1xPCIe 2.0
Consumo m√°ximo de energia 2,5A@5V 3A@5V 5A@5V (PD ativado)

O que é o Raspberry Pi OS?

Raspberry Pi OS (anteriormente conhecido como Raspbian) √© um sistema operacional do tipo Unix baseado na distribui√ß√£o Debian GNU/Linux para a fam√≠lia Raspberry Pi de computadores compactos de placa √ļnica distribu√≠dos pela Raspberry Pi Foundation. O Raspberry Pi OS √© altamente otimizado para o Raspberry Pi com CPUs ARM e usa um ambiente de trabalho LXDE modificado com o gerenciador de janelas de empilhamento Openbox. O Raspberry Pi OS est√° em desenvolvimento ativo, com √™nfase em melhorar a estabilidade e performance de tantos pacotes Debian quanto poss√≠vel no Raspberry Pi.

Flash Raspberry Pi OS para Raspberry Pi

A primeira coisa a fazer depois de pores as mãos num Raspberry Pi é flashear um cartão micro-SD com o Raspberry Pi OS, inseri-lo no dispositivo e arrancar com o OS. Segue a documentação detalhada de iniciação do Raspberry Pi para preparares o teu dispositivo para a primeira utilização.

Prepara-te Ultralytics

Existem duas formas de configurar o pacote Ultralytics no Raspberry Pi para construíres o teu próximo projeto de Visão Computacional. Podes usar qualquer uma delas.

Começa com o Docker

A forma mais rápida de começares a utilizar Ultralytics YOLOv8 no Raspberry Pi é correr com uma imagem docker pré-construída para o Raspberry Pi.

Executa o comando abaixo para puxar o contentor Docker e correr na Raspberry Pi. Isto é baseado na imagem docker arm64v8/debian que contém Debian 12 (Bookworm) num ambiente Python3.

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

Depois de fazeres isto, passa para a secção Usar NCNN no Raspberry Pi.

Começa sem o Docker

Instala o pacote 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. Actualiza a lista de pacotes, instala o pip e actualiza para a vers√£o mais recente

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Instala ultralytics pacote pip com dependências opcionais

    pip install ultralytics[export]
    
  3. Reinicia o dispositivo

    sudo reboot
    

Utiliza NCNN no 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.

Converte o modelo para NCNN e executa a inferência

O modelo YOLOv8n no formato PyTorch é convertido para NCNN para executar a inferência com o modelo exportado.

Exemplo

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'

Dica

Para obter mais detalhes sobre as op√ß√Ķes de exporta√ß√£o suportadas, visita a p√°gina de documenta√ß√£oUltralytics sobre op√ß√Ķes de implementa√ß√£o.

Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8 Benchmarks

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.

Nota

Incluímos apenas benchmarks para os modelos YOLOv8n e YOLOv8s porque os tamanhos dos outros modelos são demasiado grandes para serem executados no Raspberry Pis e não oferecem um desempenho decente.

Gráfico de comparação

Desempenho

Ecossistema NVIDIA Jetson

Ecossistema NVIDIA Jetson

Tabela de comparação detalhada

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.

Desempenho

Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (ms/im)
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 Leve ‚úÖ 12.3 0.6092 380.67
PaddlePaddle ‚úÖ 24.4 0.6092 703.51
NCNN ‚úÖ 12.2 0.6034 94.28
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (ms/im)
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 Leve ‚úÖ 42.8 0.7136 1013.27
PaddlePaddle ‚úÖ 85.5 0.7136 1560.23
NCNN ‚úÖ 42.7 0.7204 211.26
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (ms/im)
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 Leve ‚úÖ 12.3 0.6092 950.29
PaddlePaddle ‚úÖ 24.4 0.6092 1507.75
NCNN ‚úÖ 12.2 0.6092 414.73
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (ms/im)
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 Leve ‚úÖ 42.8 0.7136 2945.03
PaddlePaddle ‚úÖ 85.5 0.7136 3962.62
NCNN ‚úÖ 42.7 0.7136 1042.39

Reproduzir os nossos resultados

Para reproduzir as referências Ultralytics acima em todos os formatos de exportação, executa este código:

Exemplo

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

Nota que os resultados dos testes de refer√™ncia podem variar com base na configura√ß√£o exacta de hardware e software de um sistema, bem como na carga de trabalho atual do sistema no momento em que os testes de refer√™ncia s√£o executados. Para obter os resultados mais fi√°veis, utiliza um conjunto de dados com um grande n√ļmero de imagens, ou seja data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 imagens val).

Usa a c√Ęmara Raspberry Pi

Quando utilizas o Raspberry Pi em projectos de Vis√£o por Computador, pode ser essencial obteres imagens de v√≠deo em tempo real para fazeres infer√™ncias. O conetor MIPI CSI integrado no Raspberry Pi permite-te ligar m√≥dulos de c√Ęmara Raspberry PI oficiais. Neste guia, utiliz√°mos um m√≥dulo de c√Ęmara Raspberry Pi 3 para captar as imagens de v√≠deo e efetuar a infer√™ncia utilizando os modelos YOLOv8 .

Nota

O Raspberry Pi 5 usa conectores CSI mais pequenos do que o Raspberry Pi 4 (15 pinos vs 22 pinos), por isso vais precisar de um cabo adaptador de 15 pinos para 22 pinos para ligar a uma c√Ęmara Raspberry Pi.

Testa a c√Ęmara

Executa o seguinte comando depois de ligares a c√Ęmara ao Raspberry Pi. Deves ver um v√≠deo em direto da c√Ęmara durante cerca de 5 segundos.

rpicam-hello

Infer√™ncia com a c√Ęmara

Existem 2 m√©todos para utilizar a c√Ęmara Raspberry Pi para inferir modelos YOLOv8 .

Utilização

Podemos utilizar picamera2que vem pr√©-instalado com o Raspberry Pi OS para aceder √† c√Ęmara e aos modelos de infer√™ncia YOLOv8 .

Exemplo

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()

Precisamos de iniciar um fluxo TCP com rpicam-vid da c√Ęmara ligada, para que possamos utilizar este URL de fluxo como entrada quando estivermos a inferir mais tarde. Executa o seguinte comando para iniciar o fluxo TCP.

rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888

Saber mais sobre rpicam-vid utilização na documentação oficial do Raspberry Pi

Exemplo

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"

Dica

Consulta o nosso documento sobre Fontes de Inferência se quiseres alterar o tipo de entrada de imagem/vídeo

Boas pr√°ticas ao utilizar o Raspberry Pi

Existem algumas pr√°ticas recomendadas a seguir para permitir o m√°ximo desempenho em Raspberry Pis com YOLOv8.

  1. Utiliza um SSD

    Quando utilizas a Raspberry Pi para uma utiliza√ß√£o cont√≠nua 24x7, recomenda-se a utiliza√ß√£o de um SSD para o sistema, uma vez que um cart√£o SD n√£o ser√° capaz de suportar grava√ß√Ķes cont√≠nuas e poder√° ficar danificado. Com o conetor PCIe integrado no Raspberry Pi 5, agora podes ligar SSDs usando um adaptador como a Base NVMe para Raspberry Pi 5.

  2. Flash sem GUI

    Ao fazeres o flash do Raspberry Pi OS, podes optar por não instalar o ambiente de trabalho (Raspberry Pi OS Lite) e isto pode poupar um pouco de RAM no dispositivo, deixando mais espaço para o processamento da visão computacional.

Próximos passos

Parabéns por teres configurado com sucesso o YOLO no teu Raspberry Pi! Para mais aprendizagem e apoio, visita Ultralytics YOLOv8 Docs e Kashmir World Foundation.

Agradecimentos e cita√ß√Ķes

Este guia foi inicialmente criado por Daan Eeltink para a Kashmir World Foundation, uma organização dedicada à utilização do YOLO para a conservação de espécies em vias de extinção. Reconhecemos o seu trabalho pioneiro e o seu foco educacional no domínio das tecnologias de deteção de objectos.

Para mais informa√ß√Ķes sobre as actividades da Kashmir World Foundation, podes visitar o seu s√≠tio Web.



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

Coment√°rios