Ultralytics YOLO27:

Xuất Sony IMX500 cho Ultralytics YOLO11#

Hướng dẫn này trình bày cách xuất và triển khai các model Ultralytics YOLO11 lên Raspberry Pi AI Cameras được trang bị cảm biến Sony IMX500.

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

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

Raspberry Pi AI Camera with Sony IMX500 sensor

Tại sao 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 mang tính độ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 tích hợp trên chip. Cảm biến này giúp giải quyết nhiều thách thức trong AI biên, bao gồm nút thắt xử lý dữ liệu, vấn đề quyền riêng tư và các giới hạn về hiệu năng. Trong khi các cảm biến khác chỉ truyền hình ảnh và khung hình, IMX500 có thể xử lý toàn bộ dữ liệu. Cảm biến xử lý dữ liệu trực tiếp trên thiết bị, cho phép các thiết bị tạo ra thông tin chuyên sâu theo thời gian thực.

Xuất model YOLO11 của Sony IMX500#

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 cloud để xử lý.

IMX500 hoạt động với các model đã lượng tử hóa. Lượng tử hóa giúp model nhỏ hơn và nhanh hơn mà không làm mất nhiều độ chính xác. Đây là lựa chọ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 ứng dụng phản hồi nhanh bằng cách giảm độ trễ và xử lý dữ liệu cục bộ nhanh chóng mà không phụ thuộc vào cloud. Việc xử lý cục bộ cũng giúp dữ liệu người dùng được riêng tư và bảo mật vì dữ liệu không được gửi đến máy chủ từ xa.

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

  • Đầu ra metadata: Thay vì chỉ truyền hình ảnh, IMX500 có thể xuất cả hình ảnh và metadata (kết quả suy luận), hoặc chỉ xuất metadata để giảm kích thước dữ liệu, giảm băng thông và hạ chi phí.
  • Giải quyết vấn đề 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ư, phù hợp với các ứng dụng lấy con người làm trung tâm như đếm người và theo dõi mức độ sử dụng không gian.
  • Xử lý theo thời gian thực: Khả năng xử lý nhanh trên cảm biến hỗ trợ ra quyết định theo thời gian thực, rất phù hợp với các ứng dụng AI biên như hệ thống tự hành.

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

Các Task được hỗ trợ#

Tính năng xuất IMX500 hỗ trợ bốn trong bảy tác vụ của Ultralytics và chỉ dành cho YOLOv8nYOLO11n: các họ model, scale và kiến trúc khác không được hỗ trợ; việc xuất model phân đoạn ngữ nghĩa, OBB hoặc ước tính độ sâu sẽ gây ra lỗi.

TaskYOLOv8YOLO11YOLO26
Detect
Segment
Semantic
Depth
Classify
Pose
OBB

Ví dụ sử dụng#

Xuất một model Ultralytics YOLO11 sang định dạng IMX500 và chạy suy luận bằng model đã xuất.

Định dạng IMX500 hỗ trợ các chế độ Export, PredictValidate. Suy luận và validation được chạy trên Raspberry Pi AI Camera (IMX500).

Lưu ý

Ở đây, chúng ta thực hiện suy luận chỉ để đảm bảo model 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 tính nă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")
Ướ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")
Classification
from ultralytics import YOLO

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

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

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

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
Phân đoạn đối tượng
from ultralytics import YOLO

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

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

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

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
Validate
from ultralytics import YOLO

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

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")
Cảnh báo

Gói Ultralytics sẽ cài đặt các dependency bổ sung cho việc xuất trong thời gian chạy. Khi chạy lệnh export lần đầu, bạn có thể cần khởi động lại console để đảm bảo lệnh hoạt động chính xác.

Đối số Export#

Đối sốKiểuMặc địnhMô tả
formatstr'imx'Định dạng đích của model đã export, xác định khả năng tương thích với nhiều môi trường triển khai.
imgszint hoặc tuple640Kích thước ảnh mong muốn cho input của model. Có thể là một số nguyên đối với ảnh vuông hoặc một tuple (height, width) cho các kích thước cụ thể.
quantizeint hoặc str8/autoĐộ chính xác lượng tử hóa. 8 (INT8/PTQ) được tự động bật cho IMX500; "w8a16" xuất các trọng số INT8 với activation FP16. Không hỗ trợ xuất chỉ FP32 và FP16. Thay thế các flag half/int8 đã lỗi thời.
datastrNoneĐường dẫn đến YAML của dataset, bắt buộc cho quá trình lượng tử hóa; với bài toán classification, thay vào đó cần cung cấp thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu bỏ qua cùng với quantize=8 hoặc 'w8a16', Ultralytics sẽ chọn dataset calibration mặc định cho tác vụ của model.
fractionfloat, int hoặc list1.0Tập con hiệu chuẩn dưới dạng tỷ lệ, số lượng ảnh hoặc các tỷ lệ/số lượng [train, val, test]. Với danh sách gồm hai mục, test để trống, còn 0 sẽ bỏ qua mục này.
nmsbool, tùy chọnNoneChọn đầu ra dạng thô (None, mặc định), NMS được nhúng (True), hoặc phần đầu không có NMS (False). IMX yêu cầu nms=True cho các tác vụ phát hiện (detect), phân đoạn (segment) và ước lượng tư thế (pose) và tự động chọn phần đầu này.
devicestrNoneChỉ định thiết bị dùng để xuất: GPU (device=0), CPU (device=cpu).
Mẹo

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

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

Quá trình export sẽ tạo một model ONNX để validation 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ẽ chứa file packerOut.zip, cần thiết để đóng gói model triển khai trên phần cứng IMX500. Ngoài ra, thư mục <model-name>_imx_model sẽ chứa một file văn bản (labels.txt) liệt kê tất cả nhãn gắn với model.

Cấu trúc thư mục
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Sử dụng tính năng xuất IMX500 trong triển khai#

Sau khi xuất model Ultralytics YOLO11n sang định dạng IMX500, bạn có thể triển khai model lên Raspberry Pi AI Camera để thực hiện suy luận.

Yêu cầu 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. Camera Raspberry Pi AI

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

Yêu cầu phần mềm#

Lưu ý

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

Bước 1: Mở cửa sổ terminal và thực thi 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, thành phần cần thiết để 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 module ứng dụng Aitrios Raspberry Pi.

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

Bước 5: Chạy các tác vụ phát hiện đối tượng, ước tính pose, classification và segmentation YOLO11 bằng các script dưới đây, hiện có trong các ví dụ của aitrios-rpi-application-module-library.

Lưu ý

Hãy đảm bảo thay thế các thư mục model_filelabels.txt theo môi trường của bạn trước khi chạy các script này.

Các script 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 FPS 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()

Benchmark#

Các benchmark YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls và YOLO11n-cls dưới đây được đội ngũ Ultralytics chạy trên Raspberry Pi AI Camera với định dạng model imx để đo tốc độ và độ chính xác.

ModelĐịnh dạngKích thước (pixel)Kích thước của packerOut.zip (MB)mAP50-95(B)Thời gian suy luận (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModelĐịnh dạngKích thước (pixel)Kích thước của packerOut.zip (MB)acc (top1)acc (top5)Thời gian suy luận (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Lưu ý

Việc kiểm định cho các benchmark trên được thực hiện bằng cách sử dụng tập dữ liệu COCO128 cho các model phát hiện, tập dữ liệu COCO8-Pose cho các model ước lượng tư thế và ImageNet10 cho các model phân loại.

Bên trong hoạt động như thế nào?#

Sony IMX500 YOLO model deployment workflow

Bộ công cụ nén model Sony (MCT)#

Bộ công cụ nén model Sony (MCT) là một công cụ mạnh để tối ưu các model deep learning thông qua lượng tử hóa và pruning. Công cụ hỗ trợ nhiều phương pháp lượng tử hóa và cung cấp các thuật toán nâng cao để giảm kích thước model cũng như độ 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 khi triển khai model trên các thiết bị có tài nguyên hạn chế, giúp đảm bảo suy luận hiệu quả và giảm độ trễ.

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

MCT của Sony cung cấp nhiều tính năng được thiết kế để tối ưu các model mạng neural:

  1. Tối ưu hóa graph: Chuyển đổi model thành các phiên bản hiệu quả hơn bằng cách gộp các layer như batch normalization vào các layer đứng 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 metric như Mean-Square-Error, No-Clipping và Mean-Average-Error.
  3. Các thuật toán lượng tử hóa nâng cao:
    • Hiệu chỉnh dịch âm: Giải quyết các vấn đề về hiệu năng do lượng tử hóa activation đối xứng gây ra.
    • Lọc outlier: Sử dụng z-score để phát hiện và loại bỏ các outlier.
    • Clustering: Sử dụng các grid lượng tử hóa không đồng nhất để khớp phân phối tốt hơn.
    • Tìm kiếm mixed-precision: Gán độ rộng bit lượng tử hóa khác nhau cho từng layer 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 năng model, 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 model 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 các API Keras và PyTorch.
    • Độ phức tạp: Thấp
    • Chi phí tính toán: Thấp (vài phút trên CPU)
  2. Lượng tử hóa sau huấn luyện dựa trên gradient (GPTQ):
    • Có sẵn thông qua các API Keras và PyTorch.
    • Độ phức tạp: Trung bình
    • Chi phí tính toán: Trung bình (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ợ nhiều scheme lượng tử hóa cho trọng số và activation:

  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

Pruning có cấu trúc#

MCT giới thiệu cơ chế pruning model có cấu trúc và 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 đích bằng cách pruning các nhóm SIMD. Điều này làm giảm kích thước và độ phức tạp của model, đồng thời tối ưu việc sử dụng channel, phù hợp với kiến trúc SIMD để sử dụng tài nguyên có mục tiêu đối với footprint bộ nhớ của trọng số. Có sẵn thông qua các API Keras và PyTorch.

Công cụ chuyển đổi IMX500 (Compiler)#

IMX500 Converter Tool là thành phần quan trọng trong bộ công cụ IMX500, cho phép compile các model để triển khai trên cảm biến IMX500 của Sony (chẳng hạn như Raspberry Pi AI Cameras). Công cụ này hỗ trợ chuyển đổi các model Ultralytics YOLO11 đã được xử lý bằng 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 export sau khi lượng tử hóa model bao gồm việc tạo các file nhị phân chứa dữ liệu thiết yếu và cấu hình dành riêng cho thiết bị, giúp đơn giản hóa quy trình triển khai trên Raspberry Pi AI Camera.

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

Việc xuất sang định dạng IMX500 có khả năng ứng dụng rộng rãi trong nhiều ngành. Dưới đây là một số ví dụ:

  • AI biên và IoT: Bật tính năng phát hiện đối tượng trên drone hoặc camera an ninh, nơi xử lý theo thời gian thực trên các thiết bị tiêu thụ ít điện năng là yếu tố thiết yếu.
  • Thiết bị đeo: Triển khai các model được tối ưu cho 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 model YOLO11 đã xuất sang IMX500 để 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 trong cửa hàng bằng cách triển khai các model đã tối ưu trong hệ thống điểm bán hàng hoặc kệ hàng thông minh.

Kết luận#

Việc xuất các model Ultralytics YOLO11 sang định dạng IMX500 của Sony cho phép bạn triển khai model để thực hiện 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 nâng cao, bạn có thể giảm kích thước model và cải thiện tốc độ suy luận mà không làm ả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.

FAQ#

  • Để xuất model 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

    Quy trình export sẽ tạo một thư mục chứa các file cần thiết cho việc triển khai, bao gồm packerOut.zip.

  • Định dạng IMX500 mang lại một số ưu điểm 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 cả hình ảnh và metadata (kết quả suy luận) thay vì chỉ xuất hình ảnh
    • Tăng cường quyền riêng tư nhờ xử lý dữ liệu cục bộ mà không phụ thuộc vào cloud
    • 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
    • Lượng tử hóa được tối ưu để triển khai model hiệu quả trên các thiết bị có tài nguyên hạn chế
  • Để triển khai các model 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)
  • Dựa trên các benchmark của Ultralytics trên Raspberry Pi AI Camera:

    • YOLO11n đạt thời gian inference 58.82ms trên mỗi ảnh
    • mAP50-95 đạt 0.517 trên dataset COCO128
    • Kích thước model chỉ 2.2MB sau khi quantization

    Điều này cho thấy định dạng IMX500 cung cấp khả năng inference real-time hiệu quả trong khi vẫn duy trì độ chính xác tốt cho các ứng dụng edge AI.

Bình luận