Ultralytics YOLO27:
Get Started

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 model Ultralytics YOLO11 lên Raspberry Pi AI Camera có cảm biến Sony IMX500.

Việc triển khai model thị giác máy tính trên các 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 hóa để tăng tốc độ sẽ tạo ra khác biệt rất lớn.

Định dạng model IMX500 được thiết kế để sử dụng ít năng lượng nhất có thể mà vẫn mang lại hiệu suất nhanh cho mạng neural. Định dạng này cho phép tối ưu hóa model Ultralytics YOLO11 để suy luận nhanh và tiết kiệm điện. Trong hướng dẫn này, chúng tôi sẽ trình bày cách xuất và triển khai model sang định dạng IMX500, giúp 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 lĩnh vực 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 tắc nghẽn xử lý dữ liệu, vấn đề quyền riêng tư và giới hạn 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 cung cấp bức tranh toàn diện. Cảm biến xử lý dữ liệu trực tiếp, cho phép thiết bị tạo ra thông tin chuyên sâu theo thời gian thực.

Xuất Sony IMX500 cho model YOLO11#

IMX500 được thiết kế để thay đổi cách 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 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 giảm nhiều độ chính xác. Đây là lựa chọn lý tưởng cho 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 nhờ giảm độ trễ và xử lý dữ liệu nhanh tại chỗ 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ì 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 lẫn 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 đề quyền riêng tư, phù hợp với những ứng dụng lấy con người làm trung tâm như đếm người và theo dõi số người hiện diện.
  • Xử lý theo thời gian thực: Khả năng xử lý nhanh ngay trên cảm biến hỗ trợ đưa ra quyết định theo thời gian thực, lý tưởng cho 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ị kỹ lưỡng để 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ệu và Hướng dẫn tinh chỉnh siêu tham số.

Các tác vụ được hỗ trợ#

Xuất IMX500 hỗ trợ bốn trong số bảy tác vụ của Ultralytics và chỉ áp dụng cho YOLOv8n và YOLO11n: các họ model, kích thước 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.

Tác vụYOLOv8YOLO11YOLO26
Phát hiện✅✅❌
Phân đoạn✅✅❌
Ngữ nghĩa❌❌❌
Độ sâu❌❌❌
Phân loại✅✅❌
Tư thế✅✅❌
OBB❌❌❌

Ví dụ sử dụng#

Xuấ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ế độ Xuất, Dự đoán và Xác thực. Suy luận và xác thực được thực hiện trên Raspberry Pi AI Camera (IMX500).

Lưu ý

Ở đây, chúng ta chỉ thực hiện suy luận để đả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, hãy chuyển đến mục Sử dụng xuất IMX500 khi triển khai.

Phát hiện đối tượng
from ultralytics import YOLO

# Tải model PyTorch YOLO11n
model = YOLO("yolo11n.pt")

# # Xuất model
model.export(format="imx", data="coco8.yaml")  # mặc định xuất với lượng tử hóa PTQ

# Tải model đã xuất
imx_model = YOLO("yolo11n_imx_model")

# Chạy suy luận
results = imx_model("https://ultralytics.com/images/bus.jpg")
Ước tính tư thế
from ultralytics import YOLO

# Tải model PyTorch YOLO11n-pose
model = YOLO("yolo11n-pose.pt")

# # Xuất model
model.export(format="imx", data="coco8-pose.yaml")  # mặc định xuất với lượng tử hóa PTQ

# Tải model đã xuất
imx_model = YOLO("yolo11n-pose_imx_model")

# Chạy suy luận
results = imx_model("https://ultralytics.com/images/bus.jpg")
Phân loại
from ultralytics import YOLO

# Tải model PyTorch YOLO11n-cls
model = YOLO("yolo11n-cls.pt")

# # Xuất model
model.export(format="imx", data="imagenet10")  # mặc định xuất với lượng tử hóa PTQ

# Tải model đã xuất
imx_model = YOLO("yolo11n-cls_imx_model")

# Chạy suy luận
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
Phân đoạn instance
from ultralytics import YOLO

# Tải model PyTorch YOLO11n-seg
model = YOLO("yolo11n-seg.pt")

# # Xuất model
model.export(format="imx", data="coco8-seg.yaml")  # mặc định xuất với lượng tử hóa PTQ

# Tải model đã xuất
imx_model = YOLO("yolo11n-seg_imx_model")

# Chạy suy luận
results = imx_model("https://ultralytics.com/images/bus.jpg")
Xác thực
from ultralytics import YOLO

# Tải model IMX500 đã xuất
model = YOLO("yolo11n_imx_model")

# # Đánh giá độ chính xác trên bộ dữ liệu COCO8
metrics = model.val(data="coco8.yaml")
Cảnh báo

Xuất IMX chỉ được hỗ trợ trên Linux với Python 3.9 trở lên và yêu cầu Java 17 trở lên. Gói Ultralytics cài đặt thêm các phần phụ thuộc để xuất trong thời gian chạy. Lần đầu chạy lệnh xuất, bạn có thể cần khởi động lại console để đảm bảo lệnh hoạt động chính xác.

Các tham số xuất model#

Đối sốKiểuMặc địnhMô tả
formatstr'imx'Định dạng đích của model đã xuất, 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 đầu vào model. Có thể là số nguyên cho ảnh vuông hoặc tuple (height, width) để chỉ định kích thước cụ thể.
quantizeint hoặc str8/autoĐộ chính xác lượng tử hóa. 8 (INT8/PTQ) là bắt buộc và được tự động bật cho IMX500. Không hỗ trợ chỉ xuất FP32 và FP16. Thay thế các flag half/int8 đã lỗi thời.
datastrNoneĐường dẫn đến YAML của dataset, cần thiết cho quá trình lượng tử hóa; riêng tác vụ phân loại cần thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu không chỉ định, Ultralytics sẽ chọn dataset hiệu chuẩn 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 tỷ lệ/số lượng [train, val, test]. Danh sách gồm hai mục giữ test ở dạng đầy đủ, còn 0 sẽ bỏ qua mục này.
nmsbool, không bắt buộcNoneChọn đầu ra thô (None, mặc định), NMS tích hợp (True) hoặc head không dùng NMS (False). IMX yêu cầu nms=True cho detect, segment và pose, đồng thời tự động chọn tùy chọn 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, hãy truyền đối số device=0 để tăng tốc quá trình xuất.

Để 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 model.

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

Yêu cầu phần cứng#

Đả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 và 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à chạy 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 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 phát hiện đối tượng, ước tính pose, phân loại và phân đoạn YOLO11 bằng các script dưới đây, có trong các ví dụ của thư viện module ứng dụng aitrios-rpi.

Lưu ý

Đảm bảo thay thế các thư mục model_file và labels.txt cho phù hợp với môi trường của bạn trước khi chạy các script này.

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 nhóm Ultralytics thực hiện trên Raspberry Pi AI Camera bằng đị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/ảnh)
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)độ chính xác (top1)độ chính xác (top5)Thời gian suy luận (ms/ảnh)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Lưu ý

Việc xác thực các benchmark trên sử dụng dataset COCO128 cho model phát hiện, dataset COCO8-Pose cho model ước tính pose và ImageNet10 cho model phân loại.

Có gì bên trong?#

Sony IMX500 YOLO model deployment workflow

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

Bộ công cụ nén model của Sony (MCT) là công cụ mạnh mẽ để tối ưu hóa các model học sâu thông qua lượng tử hóa và cắt tỉa. 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 được MCT hỗ trợ#

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

  1. Tối ưu hóa đồ thị: 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 lớp như batch normalization vào những lớp đứ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ư Sai số bình phương trung bình, Không cắt ngưỡng và Sai số tuyệt đối trung bình.
  3. Thuật toán lượng tử hóa nâng cao:
    • Hiệu chỉnh giá trị âm bị dịch chuyển: Khắc phục các vấn đề về hiệu năng do lượng tử hóa activation đối xứng gây ra.
    • Lọc giá trị ngoại lai: Sử dụng z-score để phát hiện và loại bỏ các giá trị ngoại lai.
    • Phân cụm: Sử dụng lưới lượng tử hóa không đồng nhất để khớp 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 từng lớp dựa trên độ nhạy.
  4. Trực quan hóa: Sử dụng TensorBoard để quan sát thông tin chuyên sâu 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ó thể sử dụng thông qua 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ó thể sử dụng thông qua API Keras và PyTorch.
    • Độ 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ợ nhiều lược đồ 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

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

MCT giới thiệu phương pháp cắt tỉa model có cấu trúc, nhận biết phần cứng và đượ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 các khả năng Đơn lệnh, đa dữ liệu (SIMD) của nền tảng đích bằng cách cắt tỉa các nhóm SIMD. Phương pháp này giảm kích thước và độ phức tạp của model, đồ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 một cách có mục tiêu đối với dung lượng bộ nhớ của trọng số. Có thể sử dụng thông qua API Keras và PyTorch.

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

Công cụ chuyển đổi IMX500 là thành phần không thể thiếu trong bộ công cụ IMX500, cho phép biên dịch model để triển khai trên cảm biến IMX500 của Sony (ví dụ: 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 model 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 model sẽ tạo ra các tệp 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 thực tế#

Xuất sang định dạng IMX500 có thể được ứ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: Cho phép phát hiện đối tượng trên drone hoặc camera an ninh, nơi việc xử lý theo thời gian thực trên thiết bị công suất thấp là thiết yếu.
  • Thiết bị đeo: Triển khai các model được tối ưu hóa cho 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 model YOLO11 được 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ẻ: Tăng cường giám sát trong cửa hàng bằng cách triển khai các model được tối ưu hóa trong hệ thống điểm bán hàng hoặc kệ hàng thông minh.

Kết luận#

Xuất model Ultralytics YOLO11 sang định dạng IMX500 của Sony cho phép bạn triển khai model để suy luận hiệu quả trên camera sử dụng 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 ả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#

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

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # Xuất với lượng tử hóa PTQ theo mặc định

    Quy 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 dạng IMX500 mang lại một số ưu điểm quan trọng khi 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 đá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
    • Lượng tử hóa được tối ưu hóa để 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 model IMX500, bạn cần:

    Phần cứng:

    • Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
    • Raspberry Pi AI Camera có 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 bài benchmark của Ultralytics trên Raspberry Pi AI Camera:

    • YOLO11n đạt thời gian suy luận 58.82ms cho mỗi hình ảnh
    • mAP50-95 đạt 0.517 trên tập dữ liệu COCO128
    • Kích thước model chỉ 2.2MB sau khi lượng tử hóa

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

Bình luận