Chuyển đến nội dung

Xuất Sony IMX500 cho Ultralytics YOLO11

Hướng dẫn này bao gồm việc xuất và triển khai các mô hình Ultralytics YOLO11 sang Camera AI Raspberry Pi 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ể gặp nhiều khó khăn. Việc sử dụng định dạng mô hình được tối ưu hóa để có hiệu suất nhanh hơn tạo ra một sự khác biệ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 mang lại hiệu suất nhanh chóng cho mạng nơ-ron. Nó cho phép bạn tối ưu hóa các mô hình Ultralytics YOLO11 của mình để suy luận tốc độ cao và công suất thấp. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn 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 Camera AI Raspberry Pi.

Raspberry Pi AI Camera

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

Cảm biến tầm nhìn thông minh IMX500 của Sony là một phần cứng mang tính đột phá trong xử lý AI biên. Đây là cảm biến tầm nhìn 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ắc nghẽn xử lý dữ liệu, lo 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ỉ đơn thuần truyền hình ảnh và khung hình, IMX500 kể một câu chuyện hoàn chỉnh. 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 trong thời gian thực.

Xuất IMX500 của Sony cho các Mô hình YOLO11

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 gửi dữ liệu lên đám mây để xử lý.

IMX500 hoạt động với các mô hình đã được 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 chỗ, không phụ thuộc vào đám mây. Xử lý cục bộ cũng giữ cho dữ liệu người dùng được 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 Lo Ngại 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 lo ngại 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 số người.
  • Xử lý theo thời gian thực: Xử lý nhanh chóng, ngay trên cảm biến hỗ trợ các quyết định theo thời gian thực, hoàn hảo cho các ứng dụng AI biên như hệ thống tự hành.

Before You Begin: Để có kết quả tốt nhất, hãy đảm bảo mô hình YOLO11 của bạn được chuẩn bị tốt để xuất bằng cách tuân theo Hướng dẫn huấn luyện 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.

Các Tác Vụ Được Hỗ Trợ

Hiện tại, bạn chỉ có thể xuất các mô hình bao gồm các tác vụ sau sang định dạng IMX500.

Ví dụ sử dụng

Xuất mô hình Ultralytics YOLO11 sang định dạng IMX500 và chạy suy luận với mô hình đã xuất.

Lưu ý

Ở đâ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 Xuất IMX500 trong Triển khai.

Phát Hiện Đối Tượng

from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

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

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

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

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

Ước tính tư thế

from ultralytics import YOLO

# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")

# Export the model
model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")

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

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

Cảnh báo

Gói Ultralytics cài đặt các phần phụ thuộc xuất bổ sung tại thời gian chạy. Lần đầu tiên bạn chạy lệnh export, bạn có thể cần khởi động lại bảng điều khiển của mình để đảm bảo nó hoạt động chính xác.

Các đối số xuất

Đối số Loại Mặc định Mô tả
format str 'imx' Dạng mục tiêu cho mô hình được xuất, xác định khả năng tương thích với các môi trường triển khai khác nhau.
imgsz int hoặc tuple 640 Kích thước hình ảnh mong muốn cho đầu vào của mô hình. Có thể là một số nguyên cho hình ảnh vuông hoặc một bộ giá trị (height, width) cho các kích thước cụ thể.
int8 bool True Kích hoạt lượng tử hóa INT8, nén thêm mô hình và tăng tốc độ suy luận với mức giảm độ chính xác tối thiểu, chủ yếu dành cho các thiết bị biên.
data str 'coco8.yaml' Đường dẫn đến tập dữ liệu tệp cấu hình (mặc định: coco8.yaml), cần thiết cho lượng tử hóa.
fraction float 1.0 Chỉ định tỷ lệ phần trăm của tập dữ liệu được sử dụng để hiệu chỉnh lượng tử hóa INT8. Cho phép hiệu chỉnh trên một tập hợp con của toàn bộ tập dữ liệu, hữu ích cho các thử nghiệm hoặc khi tài nguyên bị hạn chế. Nếu không được chỉ định khi bật INT8, toàn bộ tập dữ liệu sẽ được sử dụng.
device str None Chỉ định thiết bị để xuất: GPU (device=0), CPU (device=cpu).

Mẹo

Nếu bạn đang xuất trên GPU có hỗ trợ CUDA, vui lòng chuyển đối số device=0 để xuất nhanh hơn.

Để biết thêm chi tiết về quy trình xuất, hãy truy cập trang tài liệu Ultralytics về xuất.

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

Cấu trúc thư mục

yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx_MemoryReport.json
└── yolo11n_imx.pbtxt
yolo11n-pose_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n-pose_imx.onnx
├── yolo11n-pose_imx_MemoryReport.json
└── yolo11n-pose_imx.pbtxt

Sử dụng Xuất IMX500 trong Triển khai

Sau khi xuất mô hình Ultralytics YOLO11n sang định dạng IMX500, nó có thể được triển khai trên Raspberry Pi AI Camera để suy luận.

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

Đảm bảo bạn có các phần cứng sau:

  1. Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

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

Các điều kiện tiên quyết về phần mềm

Lưu ý

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 firmware IMX500, đây là yêu cầu để vận hành cảm biến IMX500.

sudo apt install imx500-all

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

sudo reboot

Bước 4: Cài đặt thư viện mô-đun ứng dụng Aitrios Raspberry Pi

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

Bước 5: Chạy phát hiện đối tượng YOLO11 và ước tính tư thế bằng cách sử dụng các tập lệnh bên dưới có sẵn trong các ví dụ về thư viện mô-đun ứng dụng aitrios-rpi.

Lưu ý

Hãy nhớ thay thế model_filelabels.txt các thư mục theo môi trường của bạn trước khi chạy các tập lệnh này.

Các tập lệnh Python

import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics


class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)


device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum DPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_yolo_pose_ultralytics


class YOLOPose(Model):
    """YOLO pose estimation model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO pose estimation model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n-pose_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for pose estimation."""
        return pp_yolo_pose_ultralytics(output_tensors)


device = AiCamera(frame_rate=17)  # Optimal frame rate for maximum DPS of the YOLO-pose model running on the AI Camera
model = YOLOPose()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.4]

        annotator.annotate_keypoints(frame, detections)
        annotator.annotate_boxes(frame, detections, corner_length=20)
        frame.display()

Điểm chuẩn

Điểm chuẩn YOLOv8n, YOLO11n, YOLOv8n-pose và YOLO11n-pose dưới đây được nhóm Ultralytics chạy trên Raspberry Pi AI Camera với imx định dạng mô hình để đo tốc độ và độ chính xác.

Mô hình Định dạng Trạng thái Kích thước của packerOut.zip (MB) mAP50-95(B) Thời gian suy luận (ms/ảnh)
YOLOv8n imx 2.1 0.470 58.79
YOLO11n imx 2.2 0.517 58.82
YOLOv8n-pose imx 2.0 0.687 58.79
YOLO11n-pose imx 2.1 0.788 62.50

Lưu ý

Quá trình xác thực cho các điểm chuẩn trên được thực hiện bằng cách sử dụng bộ dữ liệu COCO128 cho các mô hình phát hiện và bộ dữ liệu COCO8-Pose cho các mô hình ước tính dáng.

Điều gì ẩn chứa bên trong?

Triển khai IMX500

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

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à tỉa bớt. 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ị có tài nguyên hạn chế, đả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 layer như chuẩn hóa hàng loạt vào các layer 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ách sử dụ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 tuyệt đối.
  3. Các Thuật Toán Lượng Tử Hóa Nâng Cao:
    • Shift Negative Correction (Hiệu chỉnh dịch chuyển âm): Giải quyết 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 lệ: Sử dụng z-score để phát hiện và loại bỏ các giá trị ngoại lệ.
    • Phân Cụm: Sử dụng lưới lượng tử hóa không đồng đều để phù hợp với phân phối tốt hơn.
    • Tìm kiếm Độ chính xác Hỗn hợp: Gán độ rộng bit lượng tử hóa khác nhau cho mỗi lớp dựa trên độ nhạy.
  4. Trực Quan Hóa: Sử dụng TensorBoard để quan sát thông tin chi tiết về hiệu suất mô hình, các 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 Huấn Luyện (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 (vài phút CPU)
  2. Lượng tử hóa sau huấn luyện 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: Vừa phải (2-3 giờ GPU)
  3. Huấn luyện nhận biết lượng tử hóa (QAT):
    • Độ phức tạp: Cao
    • Chi phí tính toán: Cao (12-36 giờ GPU)

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

  1. Lũy thừa của Hai (thân thiện với phần cứng)
  2. Đối xứng
  3. Đồng nhất

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

MCT giới thiệu tính năng tỉa thư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 tỉa thư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 đồng thời 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 có 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 dịch các mô hình để triển khai trên cảm biến IMX500 của Sony (ví dụ: Camera AI Raspberry Pi). Công cụ này tạo điều kiện thuận lợi cho việc chuyển đổi các mô hình Ultralytics YOLO11 được xử lý thông qua phần mềm Ultralytics, đả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 bao gồm dữ liệu thiết yếu và cấu hình dành riêng cho 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ó tính ứng dụng rộng rãi trong nhiều ngành. Dưới đây là một vài ví dụ:

  • Edge AI và IoT: 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ị tiêu thụ điện năng thấp là rất cần thiết.
  • Thiết Bị Đeo: Triển khai các mô hình được tối ưu hóa để xử lý AI quy mô nhỏ trên các thiết bị đeo theo dõi sức khỏe.
  • Thành phố thông minh: Sử dụng các mô hình YOLO11 được xuất từ IMX500 để giám sát giao thông và phân tích an toàn với khả năng xử lý nhanh hơn và độ trễ tối thiểu.
  • Phân tích Bán lẻ: Tăng cườ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.

Kết luận

Xuất các mô hình Ultralytics YOLO11 sang định dạng IMX500 của Sony cho phép bạn triển khai các 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 ảnh hưởng đáng kể đến độ 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 cách nào để xuất mô hình YOLO11 sang định dạng IMX500 cho Raspberry Pi AI Camera?

Để xuất mô hình YOLO11 sang định dạng IMX500, hãy sử dụng Python API hoặc lệnh CLI:

from ultralytics import YOLO

model = YOLO("yolo11n.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.

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 cung cấp 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
  • Xuất cả hình ảnh và siêu dữ liệu (kết quả suy luận) thay vì chỉ hình ảnh
  • Tăng cường quyền riêng tư bằng cách xử lý dữ liệu cục bộ mà không cần phụ thuộc vào đám mây
  • Khả năng xử lý theo thời gian thực lý tưởng cho các ứng dụng nhạy cảm về thời gian
  • Tối ưu hóa lượng tử hóa để triển khai mô hình hiệu quả trên các thiết bị có tài nguyên hạn chế

Cần những điều kiện tiên quyết về phần cứng và phần mềm nào để 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
  • Raspberry Pi AI Camera với cảm biến IMX500

Phần mềm:

  • Raspberry Pi OS Bookworm
  • Firmware và công cụ IMX500 (sudo apt install imx500-all)

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

Dựa trên các chuẩn mực Ultralytics trên Raspberry Pi AI Camera:

  • YOLO11n đạt được thời gian suy luận 62.50ms trên mỗi ảnh
  • mAP50-95 là 0.492 trên bộ dữ liệu COCO128
  • Kích thước mô hình chỉ 3.2MB sau 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.



📅 Đã tạo 9 tháng trước ✏️ Cập nhật 6 ngày trước

Bình luận