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, SoC Cortex-A72 64Bit | Broadcom BCM2712, SoC Cortex-A76 64Bit |
CPU Frequência máxima | 1,4 GHz | 1.8GHz | 2,4 GHz |
GPU | Videocore IV | Videocore VI | VideoCore VII |
GPU Frequência máxima | 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.
Depois de fazeres isto, passa para a secção Usar NCNN no Raspberry Pi.
Começa sem o Docker
Instala o pacote Ultralytics
Aqui vamos instalar Ultralytics pacote no Raspberry Pi com dependências opcionais para que possamos exportar o PyTorch modelos para outros formatos diferentes.
-
Actualiza a lista de pacotes, instala o pip e actualiza para a versão mais recente
-
Instala
ultralytics
pacote pip com dependências opcionais -
Reinicia o dispositivo
Utiliza NCNN no Raspberry Pi
De todos os formatos de exportação de modelos suportados por Ultralytics, NCNN oferece o melhor desempenho de inferência ao trabalhar com dispositivos Raspberry Pi porque NCNN é altamente optimizado para plataformas móveis/embutidas (como a arquitetura ARM). Por isso, recomendamos que utilizes o NCNN com o 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")
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 os benchmarks foram executados pelo Ultralytics equipe em nove formatos de modelos diferentes medindo velocidade e precisão: PyTorch , TorchScript , ONNX , OpenVINO , TF SavedModel , TF GraphDef , TF Leve, PaddlePaddle , NCNN . Os benchmarks foram executados no Raspberry Pi 5 e no Raspberry Pi 4 com precisão FP32 e tamanho de imagem de entrada padrão de 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
Tabela de comparação detalhada
A tabela abaixo representa os resultados de benchmark para dois modelos diferentes ( YOLOv8n , YOLOv8s ) em nove formatos diferentes ( PyTorch , TorchScript , ONNX , OpenVINO , TF SavedModel , TF GraphDef , TF Leve, PaddlePaddle , NCNN ), rodando no Raspberry Pi 4 e no Raspberry Pi 5, fornecendo o status, tamanho, métrica mAP50-95(B) e tempo de inferência para cada combinação.
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
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), or
data='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 .
Dica
Sabe mais sobre os diferentes módulos de câmara oferecidos pelo Raspberry Pi e também como começar a utilizar os módulos de câmara do Raspberry Pi.
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.
Dica
Saber mais sobre rpicam-hello
utilização na documentação oficial do Raspberry Pi
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 picamera2
que 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.
Saber mais sobre rpicam-vid
utilização na documentação oficial do Raspberry Pi
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.
-
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.
-
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.
FAQ
Como posso configurar Ultralytics YOLOv8 num Raspberry Pi sem utilizar o Docker?
Para configurar Ultralytics YOLOv8 num Raspberry Pi sem Docker, segue estes passos:
- Actualiza a lista de pacotes e instala
pip
: - Instala o pacote Ultralytics com as dependências opcionais:
- Reinicia o dispositivo para aplicar as alterações:
Para obter instruções detalhadas, consulta a secção Iniciar sem o Docker.
Por que razão devo utilizar o formato Ultralytics YOLOv8 's NCNN no Raspberry Pi para tarefas de IA?
Ultralytics YOLOv8O formato NCNN é altamente optimizado para plataformas móveis e incorporadas, o que o torna ideal para executar tarefas de IA em dispositivos Raspberry Pi. O NCNN maximiza o desempenho da inferência tirando partido da arquitetura ARM, proporcionando um processamento mais rápido e eficiente em comparação com outros formatos. 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.
Como posso converter um modelo YOLOv8 para o formato NCNN para utilização no Raspberry Pi?
Podes converter um modelo PyTorch YOLOv8 para o formato NCNN utilizando os comandos Python ou CLI :
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")
Para obter mais detalhes, consulte a secção Utilizar NCNN no Raspberry Pi.
Quais são as diferenças de hardware entre o Raspberry Pi 4 e o Raspberry Pi 5 relevantes para a execução do YOLOv8?
As principais diferenças incluem:
- CPU: Raspberry Pi 4 usa Broadcom BCM2711, Cortex-A72 64-bit SoC, enquanto Raspberry Pi 5 usa Broadcom BCM2712, Cortex-A76 64-bit SoC.
- Frequência máxima CPU : O Raspberry Pi 4 tem uma frequência máxima de 1,8 GHz, enquanto o Raspberry Pi 5 atinge 2,4 GHz.
- Memória: O Raspberry Pi 4 oferece até 8GB de LPDDR4-3200 SDRAM, enquanto o Raspberry Pi 5 apresenta LPDDR4X-4267 SDRAM, disponível em variantes de 4GB e 8GB.
Estas melhorias contribuem para melhores benchmarks de desempenho para os modelos YOLOv8 no Raspberry Pi 5 em comparação com o Raspberry Pi 4. Consulta a tabela de comparação da série Raspberry Pi para mais detalhes.
Como é que posso configurar um módulo de câmara Raspberry Pi para funcionar com Ultralytics YOLOv8 ?
Existem dois métodos para configurar uma câmara Raspberry Pi para YOLOv8 inference:
-
Utilizando
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()
-
Usando um fluxo TCP:
Para obter instruções de configuração detalhadas, visita a secção Inferência com câmara.
Criado em 2023-11-12, Atualizado em 2024-07-05
Autores: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)