Bỏ qua nội dung

Sony IMX500 Xuất khẩu cho Ultralytics YOLOv8

Hướng dẫn này bao gồm việc xuất và triển khai Ultralytics YOLOv8 các mẫu máy ảnh Raspberry Pi AI có cảm biến Sony IMX500.

Việc triển khai các mô hình thị giác máy tính trên các thiết bị có sức mạnh tính toán hạn chế, chẳng hạn như Raspberry Pi AI Camera , có thể khá khó khăn. Sử dụng định dạng mô hình được tối ưu hóa để có hiệu suất nhanh hơn sẽ tạo ra sự khác biệt rất lớn.

Định dạng mô hình IMX500 được thiết kế để sử dụng năng lượng tối thiểu trong khi vẫn mang lại hiệu suất nhanh cho mạng nơ-ron. Nó cho phép bạn tối ưu hóa các mô hình Ultralytics YOLOv8 của mình để suy luận tốc độ cao và năng lượng thấp. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn cách xuất và triển khai các mô hình của mình sang định dạng IMX500 đồng thời giúp các mô hình của bạn hoạt động tốt hơn trên Raspberry Pi AI Camera .

Máy ảnh AI Raspberry Pi

Tại sao bạn nên xuất sang IMX500

Cảm biến thị giác thông minh IMX500 của Sony là một phần cứng đột phá trong xử lý AI biên. Đây là cảm biến thị giác thông minh đầu tiên trên thế giới có khả năng AI trên chip. Cảm biến này giúp vượt qua nhiều thách thức trong AI biên, bao gồm tình trạng tắc nghẽn xử lý dữ liệu, mối quan ngại về quyền riêng tư và hạn chế về hiệu suất.
Trong khi các cảm biến khác chỉ truyền hình ảnh và khung hình, IMX500 kể toàn bộ câu chuyện. Nó xử lý dữ liệu trực tiếp trên cảm biến, cho phép các thiết bị tạo ra thông tin chi tiết theo thời gian thực.

Xuất khẩu IMX500 của Sony cho YOLOv8 Mô hình

IMX500 được thiết kế để thay đổi cách các thiết bị xử lý dữ liệu trực tiếp trên cảm biến mà không cần phải gửi dữ liệu lên đám mây để xử lý.

IMX500 hoạt động với các mô hình lượng tử hóa. Lượng tử hóa làm cho các mô hình nhỏ hơn và nhanh hơn mà không làm mất nhiều độ chính xác . Nó lý tưởng cho các tài nguyên hạn chế của điện toán biên, cho phép các ứng dụng phản hồi nhanh chóng bằng cách giảm độ trễ và cho phép xử lý dữ liệu nhanh chóng tại địa phương, mà không phụ thuộc vào đám mây. Xử lý cục bộ cũng giữ dữ liệu người dùng riêng tư và an toàn vì nó không được gửi đến máy chủ từ xa.

Các tính năng chính của IMX500:

  • Đầu ra siêu dữ liệu: Thay vì chỉ truyền hình ảnh, IMX500 có thể xuất cả hình ảnh và siêu dữ liệu (kết quả suy luận) và chỉ có thể xuất siêu dữ liệu để giảm thiểu kích thước dữ liệu, giảm băng thông và giảm chi phí.
  • Giải quyết các vấn đề về quyền riêng tư: Bằng cách xử lý dữ liệu trên thiết bị, IMX500 giải quyết các vấn đề về quyền riêng tư, lý tưởng cho các ứng dụng lấy con người làm trung tâm như đếm người và theo dõi tình trạng hiện diện.
  • Xử lý thời gian thực: Xử lý nhanh trên cảm biến hỗ trợ các quyết định thời gian thực, hoàn hảo cho các ứng dụng AI biên như hệ thống tự động.

Trước khi bắt đầu: Để có kết quả tốt nhất, hãy đảm bảo YOLOv8 mô hình được chuẩn bị tốt để xuất bằng cách làm theo Hướng dẫn đào tạo mô hình , Hướng dẫn chuẩn bị dữ liệuHướng dẫn điều chỉnh siêu tham số của chúng tôi.

Ví dụ sử dụng

Xuất khẩu một Ultralytics YOLOv8 chuyển đổi mô hình sang định dạng IMX500 và chạy suy luận với mô hình đã xuất.

Ghi chú

Ở đây chúng tôi thực hiện suy luận chỉ để đảm bảo mô hình hoạt động như mong đợi. Tuy nhiên, để triển khai và suy luận trên Raspberry Pi AI Camera, vui lòng chuyển đến phần Sử dụng IMX500 Export trong phần Triển khai .

Ví dụ

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

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

Quá trình xuất khẩu sẽ tạo ra một ONNX mô hình để xác thực lượng tử hóa, cùng với một thư mục có tên <model-name>_imx_model. Thư mục này sẽ bao gồm packerOut.zip tệp, rất cần thiết để đóng gói mô hình để triển khai trên phần cứng IMX500. Ngoài ra, <model-name>_imx_model thư mục sẽ chứa một tập tin văn bản (labels.txt) liệt kê tất cả các nhãn liên quan đến mô hình.

yolov8n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolov8n_imx.onnx
├── yolov8n_imx500_model_MemoryReport.json
└── yolov8n_imx500_model.pbtxt

Lập luận

Khi xuất mô hình sang định dạng IMX500, bạn có thể chỉ định nhiều đối số khác nhau:

Chìa khóa Giá trị Sự miêu tả
format imx Định dạng để xuất sang (imx)
int8 True Bật lượng tử hóa INT8 cho mô hình (mặc định: True)
imgsz 640 Kích thước hình ảnh cho đầu vào mô hình (mặc định: 640)

Sử dụng IMX500 Export trong triển khai

Sau khi xuất khẩu Ultralytics YOLOv8n mô hình sang định dạng IMX500, có thể triển khai vào Camera AI Raspberry Pi để suy luận.

Điều kiện tiên quyết về phần cứng

Hãy đảm bảo bạn có phần cứng dưới đây:

  1. Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
  2. Máy ảnh AI Raspberry Pi

Kết nối camera Raspberry Pi AI với đầu nối MIPI CSI 15 chân trên Raspberry Pi và bật nguồn Raspberry Pi

Phần mềm tiên quyết

Ghi chú

Hướng dẫn này đã được thử nghiệm với Raspberry Pi OS Bookworm chạy trên Raspberry Pi 5

Bước 1: Mở cửa sổ terminal và thực hiện các lệnh sau để cập nhật phần mềm Raspberry Pi lên phiên bản mới nhất.

sudo apt update && sudo apt full-upgrade

Bước 2: Cài đặt phần mềm IMX500 cần thiết để vận hành cảm biến IMX500 cùng với công cụ đóng gói.

sudo apt install imx500-all imx500-tools

Bước 3: Cài đặt các điều kiện tiên quyết để chạy picamera2 ứng dụng. Chúng tôi sẽ sử dụng ứng dụng này sau cho quá trình triển khai.

sudo apt install python3-opencv python3-munkres

Bước 4: Khởi động lại Raspberry Pi để những thay đổi có hiệu lực

sudo reboot

Mô hình gói và triển khai đến Camera AI

Sau khi có được packerOut.zip từ quá trình chuyển đổi IMX500, bạn có thể chuyển tệp này vào công cụ đóng gói để có được tệp RPK. Sau đó, tệp này có thể được triển khai trực tiếp đến Camera AI bằng cách sử dụng picamera2.

Bước 1: Đóng gói mô hình vào tệp RPK

imx500-package -i <path to packerOut.zip> -o <output folder>

Những điều trên sẽ tạo ra một network.rpk tập tin bên trong thư mục đầu ra được chỉ định.

Bước 2: Nhân bản picamera2 kho lưu trữ, cài đặt nó và điều hướng đến các ví dụ imx500

git clone -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

Bước 3: Chạy YOLOv8 phát hiện đối tượng bằng cách sử dụng tệp labels.txt được tạo trong quá trình xuất IMX500.

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --ignore-dash-labels --bbox-order xy --labels <path to labels.txt>

Sau đó, bạn sẽ có thể thấy kết quả suy luận trực tiếp như sau

Suy luận về Camera AI Raspberry Pi

Tiêu chuẩn

YOLOv8 các tiêu chuẩn dưới đây được chạy bởi Ultralytics nhóm trên Raspberry Pi AI Camera với imx định dạng mô hình đo tốc độ và độ chính xác.

Người mẫu Định dạng Trạng thái Kích thước (MB) mAP50-95(B) Thời gian suy luận (ms/im)
YOLOv8n imx 2.9 0.522 66.66

Ghi chú

Xác thực cho điểm chuẩn trên được thực hiện bằng cách sử dụng tập dữ liệu coco8

Có gì bên dưới mui xe?

Triển khai IMX500

Bộ công cụ nén mô hình Sony (MCT)

Bộ công cụ nén mô hình (MCT) của Sony là một công cụ mạnh mẽ để tối ưu hóa các mô hình học sâu thông qua lượng tử hóa và cắt tỉa. Nó hỗ trợ nhiều phương pháp lượng tử hóa khác nhau và cung cấp các thuật toán tiên tiến để giảm kích thước mô hình và độ phức tạp tính toán mà không làm giảm đáng kể độ chính xác. MCT đặc biệt hữu ích để triển khai các mô hình trên các thiết bị hạn chế về tài nguyên, đảm bảo suy luận hiệu quả và giảm độ trễ.

Các tính năng được hỗ trợ của MCT

MCT của Sony cung cấp một loạt các tính năng được thiết kế để tối ưu hóa các mô hình mạng nơ-ron:

  1. Tối ưu hóa đồ thị : Chuyển đổi các mô hình thành các phiên bản hiệu quả hơn bằng cách gộp các lớp như chuẩn hóa hàng loạt vào các lớp trước đó.
  2. Tìm kiếm tham số lượng tử hóa : Giảm thiểu nhiễu lượng tử hóa bằng các số liệu như Lỗi bình phương trung bình, Không cắt và Lỗi trung bình trung bình.
  3. Thuật toán lượng tử hóa nâng cao:
    • Hiệu chỉnh chuyển dịch âm : Xử lý các vấn đề về hiệu suất từ lượng tử hóa kích hoạt đối xứng.
    • Lọc giá trị ngoại lai : Sử dụng điểm z để phát hiện và loại bỏ giá trị ngoại lai.
    • Phân cụm : Sử dụng lưới lượng tử không đồng nhất để phân phối dữ liệu khớp hơn.
    • Tìm kiếm độ chính xác hỗn hợp : Chỉ định các độ rộng bit lượng tử khác nhau cho mỗi lớp dựa trên độ nhạy.
  4. Hình ảnh hóa : Sử dụng TensorBoard để quan sát thông tin chi tiết về hiệu suất mô hình, giai đoạn lượng tử hóa và cấu hình độ rộng bit.

Lượng tử hóa

MCT hỗ trợ một số phương pháp lượng tử hóa để giảm kích thước mô hình và cải thiện tốc độ suy luận:

  1. Lượng tử hóa sau đào tạo (PTQ):
    • Có sẵn thông qua Keras và PyTorch API.
    • Độ phức tạp: Thấp
    • Chi phí tính toán: Thấp ( CPU phút)
  2. Lượng tử hóa sau đào tạo dựa trên gradient (GPTQ):
    • Có sẵn thông qua Keras và PyTorch API.
    • Độ phức tạp: Trung bình
    • Chi phí tính toán: Trung bình (2-3 GPU giờ)
  3. Đào tạo về lượng tử hóa (QAT):
    • Độ phức tạp: Cao
    • Chi phí tính toán: Cao (12-36 GPU giờ)

MCT cũng hỗ trợ nhiều lược đồ lượng tử hóa khác nhau cho trọng số và kích hoạt:

  1. Power-of-Two (thân thiện với phần cứng)
  2. Đối xứng
  3. Đồng phục

Cắt tỉa có cấu trúc

MCT giới thiệu phương pháp cắt tỉa mô hình có cấu trúc, nhận biết phần cứng được thiết kế cho các kiến trúc phần cứng cụ thể. Kỹ thuật này tận dụng khả năng Single Instruction, Multiple Data (SIMD) của nền tảng mục tiêu bằng cách cắt tỉa các nhóm SIMD. Điều này làm giảm kích thước và độ phức tạp của mô hình trong khi tối ưu hóa việc sử dụng kênh, phù hợp với kiến trúc SIMD để sử dụng tài nguyên mục tiêu của dấu chân bộ nhớ trọng số. Có sẵn thông qua Keras và PyTorch API.

Công cụ chuyển đổi IMX500 (Trình biên dịch)

Công cụ chuyển đổi IMX500 là một phần không thể thiếu của bộ công cụ IMX500, cho phép biên soạn các mô hình để triển khai trên cảm biến IMX500 của Sony (ví dụ: Máy ảnh AI Raspberry Pi). Công cụ này tạo điều kiện thuận lợi cho quá trình chuyển đổi Ultralytics YOLOv8 mô hình được xử lý thông qua Ultralytics phần mềm, đảm bảo chúng tương thích và hoạt động hiệu quả trên phần cứng được chỉ định. Quy trình xuất sau khi lượng tử hóa mô hình bao gồm việc tạo các tệp nhị phân đóng gói dữ liệu cần thiết và cấu hình cụ thể của thiết bị, hợp lý hóa quy trình triển khai trên Camera AI Raspberry Pi.

Các trường hợp sử dụng thực tế

Xuất sang định dạng IMX500 có khả năng ứng dụng rộng rãi trong nhiều ngành công nghiệp. Sau đây là một số ví dụ:

  • AI và IoT biên : Cho phép phát hiện đối tượng trên máy bay không người lái hoặc camera an ninh, nơi xử lý thời gian thực trên các thiết bị công suất thấp là điều cần thiết.
  • Thiết bị đeo được : Triển khai các mô hình được tối ưu hóa để xử lý AI quy mô nhỏ trên thiết bị đeo theo dõi sức khỏe.
  • Thành phố thông minh : Sử dụng IMX500-exported YOLOv8 mô hình giám sát giao thông và phân tích an toàn với tốc độ xử lý nhanh hơn và độ trễ tối thiểu.
  • Phân tích bán lẻ : Nâng cao khả năng giám sát tại cửa hàng bằng cách triển khai các mô hình được tối ưu hóa trong hệ thống điểm bán hàng hoặc kệ thông minh.

Phần kết luận

Xuất khẩu Ultralytics YOLOv8 mô hình sang định dạng IMX500 của Sony cho phép bạn triển khai mô hình của mình để suy luận hiệu quả trên các camera dựa trên IMX500. Bằng cách tận dụng các kỹ thuật lượng tử hóa tiên tiến, bạn có thể giảm kích thước mô hình và cải thiện tốc độ suy luận mà không làm giảm đáng kể độ chính xác.

Để biết thêm thông tin và hướng dẫn chi tiết, hãy tham khảo trang web IMX500 của Sony.

CÂU HỎI THƯỜNG GẶP

Làm thế nào để tôi xuất khẩu một YOLOv8 mô hình sang định dạng IMX500 cho Camera AI Raspberry Pi?

Để xuất khẩu một YOLOv8 mô hình sang định dạng IMX500, sử dụng một trong hai Python API hoặc CLI yêu cầu:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

Quá trình xuất sẽ tạo một thư mục chứa các tệp cần thiết để triển khai, bao gồm packerOut.zip có thể sử dụng với công cụ đóng gói IMX500 trên Raspberry Pi.

Những lợi ích chính của việc sử dụng định dạng IMX500 để triển khai AI biên là gì?

Định dạng IMX500 mang lại một số lợi thế quan trọng cho việc triển khai ở biên:

  • Xử lý AI trên chip giúp giảm độ trễ và mức tiêu thụ điện năng
  • Xuất ra cả hình ảnh và siêu dữ liệu (kết quả suy luận) thay vì chỉ có hình ảnh
  • Nâng cao quyền riêng tư bằng cách xử lý dữ liệu cục bộ mà không phụ thuộc vào đám mây
  • Khả năng xử lý thời gian thực lý tưởng cho các ứng dụng nhạy cảm về thời gian
  • Lượng tử hóa được tối ưu hóa để triển khai mô hình hiệu quả trên các thiết bị có nguồn lực hạn chế

Cần có những điều kiện tiên quyết nào về phần cứng và phần mềm để triển khai IMX500?

Để triển khai các mô hình IMX500, bạn sẽ cần:

Phần cứng:

  • Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
  • Camera Raspberry Pi AI với cảm biến IMX500

Phần mềm:

  • Raspberry Pi OS Bookworm
  • Phần mềm và công cụ IMX500 (sudo apt install imx500-all imx500-tools)
  • Python gói cho picamera2 (sudo apt install python3-opencv python3-munkres)

Tôi có thể mong đợi hiệu suất gì từ YOLOv8 các mô hình trên IMX500?

Dựa trên Ultralytics điểm chuẩn trên Raspberry Pi AI Camera:

  • YOLOv8n đạt được thời gian suy luận 66,66ms cho mỗi hình ảnh
  • mAP50-95 của 0,522 trên tập dữ liệu COCO8
  • Kích thước mô hình chỉ 2,9MB sau khi lượng tử hóa

Điều này chứng minh rằng định dạng IMX500 cung cấp khả năng suy luận thời gian thực hiệu quả trong khi vẫn duy trì độ chính xác tốt cho các ứng dụng AI biên.

Làm thế nào để đóng gói và triển khai mô hình đã xuất của tôi vào Camera AI Raspberry Pi?

Sau khi xuất sang định dạng IMX500:

  1. Sử dụng công cụ đóng gói để tạo tệp RPK:

    imx500-package -i <path to packerOut.zip> -o <output folder>
    
  2. Sao chép và cài đặt picamera2:

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. Chạy suy luận bằng cách sử dụng tệp RPK đã tạo:

    python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --labels <path to labels.txt>
    
📅 Được tạo cách đây 1 tháng ✏️ Đã cập nhật cách đây 20 ngày

Bình luận