Bỏ để qua phần nội dung

Hướng dẫn bắt đầu nhanh: Raspberry Pi với Ultralytics YOLOv8

Hướng dẫn toàn diện này cung cấp hướng dẫn chi tiết để triển khai Ultralytics YOLOv8 trên các thiết bị Raspberry Pi . Ngoài ra, nó giới thiệu các điểm chuẩn hiệu suất để chứng minh khả năng của YOLOv8 trên các thiết bị nhỏ và mạnh mẽ này.



Xem: Raspberry Pi 5 cập nhật và cải tiến.

Ghi

Hướng dẫn này đã được thử nghiệm với Raspberry Pi 4 và Raspberry Pi 5 chạy Raspberry Pi OS Bookworm (Debian 12) mới nhất. Sử dụng hướng dẫn này cho các thiết bị Raspberry Pi cũ hơn như Raspberry Pi 3 dự kiến sẽ hoạt động miễn là cùng một Raspberry Pi OS Bookworm được cài đặt.

Raspberry Pi là gì?

Raspberry Pi là một máy tính bảng đơn nhỏ, giá cả phải chăng. Nó đã trở nên phổ biến cho một loạt các dự án và ứng dụng, từ tự động hóa nhà theo sở thích đến sử dụng công nghiệp. Các bo mạch Raspberry Pi có khả năng chạy nhiều hệ điều hành khác nhau và chúng cung cấp các chân GPIO (Đầu vào / Đầu ra Mục đích chung) cho phép tích hợp dễ dàng với các cảm biến, bộ truyền động và các thành phần phần cứng khác. Chúng có nhiều mẫu khác nhau với các thông số kỹ thuật khác nhau, nhưng tất cả đều có chung triết lý thiết kế cơ bản là chi phí thấp, nhỏ gọn và linh hoạt.

So sánh dòng Raspberry Pi

Mâm xôi Pi 3 Mâm xôi Pi 4 Mâm xôi Pi 5
CPU Broadcom BCM2837, Cortex-A53 64Bit SoC Broadcom BCM2711, Cortex-A72 64Bit SoC Broadcom BCM2712, Cortex-A76 64Bit SoC
CPU Tần số tối đa 1.4GHz 1.8GHz 2.4GHz
GPU Videocore IV Videocore VI VideoCore VII
GPU Tần số tối đa 400Mhz 500Mhz 800Mhz
Trí nhớ 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
Pcie N/A N/A Giao diện 1xPCIe 2.0
Rút ra sức mạnh tối đa 2.5A@5V 3A@5V 5A@5V (bật PD)

Hệ điều hành Raspberry Pi là gì?

Raspberry Pi OS (trước đây gọi là Raspbian) là một hệ điều hành giống Unix dựa trên bản phân phối Debian GNU/Linux cho dòng máy tính bảng đơn nhỏ gọn Raspberry Pi được phân phối bởi Raspberry Pi Foundation. Hệ điều hành Raspberry Pi được tối ưu hóa cao cho Raspberry Pi với CPU ARM và sử dụng môi trường máy tính để bàn LXDE đã được sửa đổi với trình quản lý cửa sổ xếp chồng Openbox. Hệ điều hành Raspberry Pi đang được phát triển tích cực, với trọng tâm là cải thiện tính ổn định và hiệu suất của càng nhiều gói Debian càng tốt trên Raspberry Pi.

Flash Raspberry Pi OS to Raspberry Pi

Điều đầu tiên cần làm sau khi chạm tay vào Raspberry Pi là flash thẻ micro-SD với hệ điều hành Raspberry Pi, lắp vào thiết bị và khởi động vào HĐH. Thực hiện theo cùng với Tài liệu chi tiết Bắt đầu của Raspberry Pi để chuẩn bị thiết bị của bạn cho lần sử dụng đầu tiên.

Dựng Ultralytics

Có hai cách thiết lập Ultralytics gói trên Raspberry Pi để xây dựng dự án Thị giác máy tính tiếp theo của bạn. Bạn có thể sử dụng một trong số chúng.

Bắt đầu với Docker

Cách nhanh nhất để bắt đầu Ultralytics YOLOv8 trên Raspberry Pi là chạy với docker image dựng sẵn cho Raspberry Pi.

Thực hiện lệnh dưới đây để kéo container Docker và chạy trên Raspberry Pi. Điều này dựa trên hình ảnh docker arm64v8/debian chứa Debian 12 (Bookworm) trong môi trường Python3.

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

Sau khi hoàn tất, hãy chuyển đến Dùng NCNN trên phần Raspberry Pi.

Bắt đầu mà không cần Docker

Cài đặt Ultralytics Gói

Ở đây chúng tôi sẽ cài đặt Ultralytics gói trên Raspberry Pi với các phụ thuộc tùy chọn để chúng tôi có thể xuất PyTorch mô hình sang các định dạng khác nhau.

  1. Cập nhật danh sách gói, cài đặt pip và nâng cấp lên mới nhất

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Cài đặt ultralytics Gói pip với các phụ thuộc tùy chọn

    pip install ultralytics[export]
    
  3. Khởi động lại thiết bị

    sudo reboot
    

Dùng NCNN trên Raspberry Pi

Trong số tất cả các định dạng xuất mô hình được hỗ trợ bởi Ultralytics, NCNN mang lại hiệu suất suy luận tốt nhất khi làm việc với các thiết bị Raspberry Pi vì NCNN được tối ưu hóa cao cho các nền tảng di động / nhúng (chẳng hạn như kiến trúc ARM). Do đó, khuyến nghị của chúng tôi là sử dụng NCNN với Raspberry Pi.

Chuyển đổi Model sang NCNN và Chạy suy luận

Các YOLOv8n Mô hình trong PyTorch định dạng được chuyển đổi thành NCNN để chạy suy luận với mô hình đã xuất.

Ví dụ

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'

Mẹo

Để biết thêm chi tiết về các tùy chọn xuất được hỗ trợ, hãy truy cập Ultralytics trang tài liệu về các tùy chọn triển khai.

Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8 Điểm chuẩn

YOLOv8 Điểm chuẩn được điều hành bởi Ultralytics Nhóm trên chín định dạng mô hình khác nhau đo tốc độ và độ chính xác: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN. Điểm chuẩn được chạy trên cả Raspberry Pi 5 và Raspberry Pi 4 ở độ chính xác FP32 với kích thước hình ảnh đầu vào mặc định là 640.

Ghi

Chúng tôi chỉ bao gồm các điểm chuẩn cho YOLOv8n và YOLOv8s mô hình vì các mô hình khác kích thước quá lớn để chạy trên Raspberry Pis và không cung cấp hiệu suất tốt.

Biểu đồ so sánh

Hiệu năng

NVIDIA Hệ sinh thái Jetson

NVIDIA Hệ sinh thái Jetson

Bảng so sánh chi tiết

Bảng dưới đây thể hiện kết quả điểm chuẩn cho hai mô hình khác nhau (YOLOv8n, YOLOv8s) trên chín định dạng khác nhau (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN), chạy trên cả Raspberry Pi 4 và Raspberry Pi 5, cho chúng ta trạng thái, kích thước, số liệu mAP50-95 (B) và thời gian suy luận cho mỗi kết hợp.

Hiệu năng

Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (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 Lite 12.3 0.6092 380.67
PaddlePaddle 24.4 0.6092 703.51
NCNN 12.2 0.6034 94.28
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (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 Lite 42.8 0.7136 1013.27
PaddlePaddle 85.5 0.7136 1560.23
NCNN 42.7 0.7204 211.26
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (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 Lite 12.3 0.6092 950.29
PaddlePaddle 24.4 0.6092 1507.75
NCNN 12.2 0.6092 414.73
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (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 Lite 42.8 0.7136 2945.03
PaddlePaddle 85.5 0.7136 3962.62
NCNN 42.7 0.7136 1042.39

Tái tạo kết quả của chúng tôi

Để tái tạo những điều trên Ultralytics Điểm chuẩn trên tất cả các định dạng xuất, hãy chạy mã này:

Ví dụ

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

Lưu ý rằng kết quả đo điểm chuẩn có thể thay đổi dựa trên cấu hình phần cứng và phần mềm chính xác của hệ thống, cũng như khối lượng công việc hiện tại của hệ thống tại thời điểm chạy điểm chuẩn. Để có kết quả đáng tin cậy nhất, hãy sử dụng tập dữ liệu có số lượng hình ảnh lớn, tức là data='coco8.yaml' (4 val images), ordata = 'coco.yaml'' (5000 hình ảnh val).

Sử dụng Raspberry Pi Camera

Khi sử dụng Raspberry Pi cho các dự án Thị giác máy tính, về cơ bản có thể lấy nguồn cấp dữ liệu video thời gian thực để thực hiện suy luận. Đầu nối MIPI CSI tích hợp trên Raspberry Pi cho phép bạn kết nối các mô-đun máy ảnh Raspberry PI chính thức. Trong hướng dẫn này, chúng tôi đã sử dụng Raspberry Pi Camera Module 3 để lấy nguồn cấp dữ liệu video và thực hiện suy luận bằng cách sử dụng YOLOv8 Mô hình.

Ghi

Raspberry Pi 5 sử dụng các đầu nối CSI nhỏ hơn Raspberry Pi 4 (15 chân so với 22 chân), vì vậy bạn sẽ cần cáp chuyển đổi 15 chân sang 22 chân để kết nối với Máy ảnh Raspberry Pi.

Kiểm tra máy ảnh

Thực hiện lệnh sau sau khi kết nối máy ảnh với Raspberry Pi. Bạn sẽ thấy nguồn cấp dữ liệu video trực tiếp từ máy ảnh trong khoảng 5 giây.

rpicam-hello

Suy luận bằng máy ảnh

Có 2 phương pháp sử dụng Raspberry Pi Camera để suy luận YOLOv8 Mô hình.

Sử dụng

Chúng ta có thể sử dụng picamera2được cài đặt sẵn hệ điều hành Raspberry Pi để truy cập máy ảnh và suy luận YOLOv8 Mô hình.

Ví dụ

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

Chúng ta cần bắt đầu một luồng TCP với rpicam-vid từ camera được kết nối để chúng tôi có thể sử dụng URL luồng này làm đầu vào khi chúng tôi suy luận sau. Thực hiện lệnh sau để bắt đầu luồng TCP.

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

Tìm hiểu thêm về rpicam-vid sử dụng trên tài liệu chính thức của Raspberry Pi

Ví dụ

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"

Mẹo

Kiểm tra tài liệu của chúng tôi về Nguồn suy luận nếu bạn muốn thay đổi loại đầu vào hình ảnh / video

Các phương pháp hay nhất khi sử dụng Raspberry Pi

Có một vài phương pháp hay nhất để làm theo để cho phép hiệu suất tối đa khi chạy Raspberry Pis YOLOv8.

  1. Sử dụng ổ SSD

    Khi sử dụng Raspberry Pi để tiếp tục sử dụng 24x7, bạn nên sử dụng SSD cho hệ thống vì thẻ SD sẽ không thể chịu được việc ghi liên tục và có thể bị hỏng. Với đầu nối PCIe tích hợp trên Raspberry Pi 5, giờ đây bạn có thể kết nối SSD bằng bộ chuyển đổi như NVMe Base cho Raspberry Pi 5.

  2. Flash không có GUI

    Khi nhấp nháy hệ điều hành Raspberry Pi, bạn có thể chọn không cài đặt môi trường Máy tính để bàn (Raspberry Pi OS Lite) và điều này có thể tiết kiệm một chút RAM trên thiết bị, để lại nhiều không gian hơn cho xử lý thị giác máy tính.

Các bước tiếp theo

Chúc mừng bạn đã thiết lập thành công YOLO trên Raspberry Pi của bạn! Để tìm hiểu và hỗ trợ thêm, hãy truy cập Ultralytics YOLOv8 Tài liệuQuỹ Thế giới Kashmir.

Lời cảm ơn và trích dẫn

Hướng dẫn này ban đầu được tạo ra bởi Daan Eeltink cho Kashmir World Foundation, một tổ chức chuyên sử dụng YOLO để bảo tồn các loài có nguy cơ tuyệt chủng. Chúng tôi ghi nhận công việc tiên phong và tập trung giáo dục của họ trong lĩnh vực công nghệ phát hiện đối tượng.

Để biết thêm thông tin về các hoạt động của Kashmir World Foundation, bạn có thể truy cập trang web của họ.

FAQ

Làm cách nào để thiết lập Ultralytics YOLOv8 trên Raspberry Pi mà không cần sử dụng Docker?

Để thiết lập Ultralytics YOLOv8 trên Raspberry Pi không có Docker, hãy làm theo các bước sau:

  1. Cập nhật danh sách gói và cài đặt pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Cài đặt Ultralytics Gói với các phụ thuộc tùy chọn:
    pip install ultralytics[export]
    
  3. Khởi động lại thiết bị để áp dụng các thay đổi:
    sudo reboot
    

Để được hướng dẫn chi tiết, hãy tham khảo phần Bắt đầu không cần Docker .

Tại sao tôi nên sử dụng Ultralytics YOLOv8's NCNN định dạng trên Raspberry Pi cho các tác vụ AI?

Ultralytics YOLOv8's NCNN định dạng được tối ưu hóa cao cho các nền tảng di động và nhúng, lý tưởng để chạy các tác vụ AI trên thiết bị Raspberry Pi. NCNN tối đa hóa hiệu suất suy luận bằng cách tận dụng kiến trúc ARM, cung cấp khả năng xử lý nhanh hơn và hiệu quả hơn so với các định dạng khác. Để biết thêm chi tiết về các tùy chọn xuất được hỗ trợ, hãy truy cập Ultralytics trang tài liệu về các tùy chọn triển khai.

Làm cách nào để chuyển đổi một YOLOv8 Mô hình để NCNN định dạng để sử dụng trên Raspberry Pi?

Bạn có thể chuyển đổi một PyTorch YOLOv8 Mô hình để NCNN định dạng bằng một trong hai Python hoặc CLI Lệnh:

Ví dụ

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'

Để biết thêm chi tiết, hãy xem Dùng NCNN trên phần Raspberry Pi .

Sự khác biệt phần cứng giữa Raspberry Pi 4 và Raspberry Pi 5 liên quan đến việc chạy là gì YOLOv8?

Sự khác biệt chính bao gồm:

  • CPU: Raspberry Pi 4 sử dụng Broadcom BCM2711, Cortex-A72 64-bit SoC, trong khi Raspberry Pi 5 sử dụng Broadcom BCM2712, Cortex-A76 64-bit SoC.
  • Max CPU Tần số: Raspberry Pi 4 có tần số tối đa là 1.8GHz, trong khi Raspberry Pi 5 đạt 2.4GHz.
  • Bộ nhớ: Raspberry Pi 4 cung cấp tới 8GB LPDDR4-3200 SDRAM, trong khi Raspberry Pi 5 có LPDDR4X-4267 SDRAM, có sẵn trong các biến thể 4GB và 8GB.

Những cải tiến này góp phần tạo ra các tiêu chuẩn hiệu suất tốt hơn cho YOLOv8 các mô hình trên Raspberry Pi 5 so với Raspberry Pi 4. Tham khảo bảng So sánh Raspberry Pi Series để biết thêm chi tiết.

Làm cách nào để thiết lập Mô-đun Máy ảnh Raspberry Pi để hoạt động Ultralytics YOLOv8?

Có hai phương pháp để thiết lập Raspberry Pi Camera cho YOLOv8 Suy luận:

  1. Sử dụng 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()
    
  2. Sử dụng luồng TCP:

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

Để biết hướng dẫn thiết lập chi tiết, hãy truy cập phần Suy luận bằng máy ảnh .



Đã tạo 2023-11-12, Cập nhật 2024-07-05
Tác giả: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)

Ý kiến