Meet YOLO26: next-gen vision AI.

Link to this sectionXuất khẩu Sony IMX500 cho Ultralytics YOLO11#

Hướng dẫn này bao gồm việc xuất và triển khai các model Ultralytics YOLO11 sang Raspberry Pi AI Camera có tích hợp cảm biến Sony IMX500.

Việc triển khai các model thị giác máy tính trên các thiết bị có tài nguyên 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 cho hiệu suất cao hơn sẽ tạo ra sự khác biệt đáng kể.

Định dạng model 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 các mạng neural. Nó cho phép bạn tối ưu hóa các model Ultralytics YOLO11 để đạt tốc độ cao và suy luận tiêu thụ điện năng 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 model của mình sang định dạng IMX500, giúp các model hoạt động hiệu quả hơn trên Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

Link to this sectionTại sao bạn nên xuất sang IMX500?#

Sony IMX500 Intelligent Vision Sensor là một phần cứng đột phá trong xử lý AI tại biên (edge AI). Đây là cảm biến thị giác thông minh đầu tiên trên thế giới tích hợp khả năng AI ngay trên chip. Cảm biến này giúp khắc phục nhiều thách thức trong AI tại biên, bao gồm các nút thắt cổ chai trong xử lý dữ liệu, mối quan ngại về quyền riêng tư và các giới hạn về hiệu suất. Trong khi các cảm biến khác chỉ truyền tải hình ảnh và khung hình, IMX500 truyền tải toàn bộ thông tin. 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.

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

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

  • Xuất 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 để tối thiểu hóa kích thước dữ liệu, giảm băng thông và 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 hướng đến con người như đếm người và theo dõi mật độ sử dụng.
  • Xử lý thời gian thực: Khả năng xử lý nhanh ngay trên cảm biến hỗ trợ việc ra quyết định theo thời gian thực, hoàn hảo cho các ứng dụng AI tại biên như hệ thống tự hành.

Trước khi bạn bắt đầu: Để đạt kết quả tốt nhất, hãy đảm bảo model YOLO11 của bạn đã đượ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ệuHướng dẫn tinh chỉnh siêu tham số của chúng tôi.

Link to this sectionCác tác vụ được hỗ trợ#

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

Các biến thể model được hỗ trợ

Việc xuất IMX được thiết kế và đánh giá hiệu năng cho YOLOv8nYOLO11n (nano). Các kiến trúc và quy mô model khác hiện không được hỗ trợ.

Link to this sectionVí dụ Sử dụng#

Xuất model Ultralytics YOLO11 sang định dạng IMX500 và thực hiện suy luận với model đã xuất.

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

Lưu ý

Ở đây chúng tôi 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 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 lượng 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")
Phân loại
 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)
Instance Segmentation
 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")
Xác thực
 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 cài đặt các phụ thuộc xuất bổ sung tại thời điểm chạy. Lần đầu tiên bạn 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.

Link to this sectionĐối số xuất#

Đối sốLoạiMặc địnhMô tả
formatstr'imx'Định dạng đích cho model đượ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.
imgszint hoặc tuple640Kích thước hình ảnh mong muốn cho đầu vào của model. Có thể là một số nguyên cho hình ảnh vuông hoặc một tuple (height, width) cho các kích thước cụ thể.
int8boolTrueKích hoạt lượng tử hóa INT8, giúp nén model thêm nữa 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 cho các thiết bị biên.
datastr'coco8.yaml'Đường dẫn đến tệp cấu hình dataset (mặc định: coco8.yaml), rất cần thiết cho việc lượng tử hóa.
fractionfloat1.0Chỉ định phân đoạn của dataset để sử dụng cho hiệu chuẩn lượng tử hóa INT8. Cho phép hiệu chuẩn trên một tập hợp con của toàn bộ dataset, hữu ích cho các thử nghiệm hoặc khi tài nguyên hạn chế. Nếu không được chỉ định trong khi INT8 đã được bật, toàn bộ dataset sẽ được sử dụng.
nmsboolFalseThêm Non-Maximum Suppression (NMS) vào model đã xuất. Khi True, các tham số conf, iou, và agnostic_nms cũng được chấp nhận.
devicestrNoneChỉ đị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 truyền tham 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 của Ultralytics về việc xuất.

Quá trình xuất sẽ tạo ra 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ẽ bao gồm tệp packerOut.zip, rất cần thiết để đóng gói model cho việc 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 tệp văn bản (labels.txt) liệt kê tất cả các nhãn liên quan đến 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

Link to this sectionSử dụng xuất IMX500 trong triển khai#

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

Link to this sectionĐiều kiện tiên quyết về 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. Raspberry Pi AI Camera

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

Link to this sectionĐiều kiện tiên quyết về 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 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 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 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, ước tính tư thế, phân loại và phân đoạn YOLO11 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ụ của thư viện mô-đun ứng dụng aitrios-rpi.

Lưu ý

Đảm bảo thay thế các thư mục model_filelabels.txt phù hợp với 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 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()

Link to this sectionĐiểm chuẩn (Benchmarks)#

Các điểm chuẩn YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls và YOLO11n-cls bên dưới được đội ngũ Ultralytics thực hiện trên Raspberry Pi AI Camera với định dạng model imx để đo lường tốc độ và độ chính xác.

Mô hìnhĐị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
Mô hìnhĐị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 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 model phát hiện, bộ dữ liệu COCO8-Pose cho các model ước tính tư thế và ImageNet10 cho các model phân loại.

Link to this sectionCó gì bên dưới lớp vỏ?#

Sony IMX500 YOLO model deployment workflow

Link to this sectionBộ công cụ nén model Sony (MCT)#

Bộ công cụ nén model của Sony (MCT) là một công cụ mạnh mẽ để tối ưu hóa các model deep learning thông qua lượng tử hóa và cắt tỉa (pruning). 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 model 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 cho việc triển khai các model trên các thiết bị bị giới hạn tài nguyên, đảm bảo suy luận hiệu quả và giảm độ trễ.

Link to this sectionCá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 model mạng neural:

  1. Tối ưu hóa đồ thị: Chuyển đổi các 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 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ách sử dụng các chỉ số như Mean-Square-Error, No-Clipping, và Mean-Average-Error.
  3. Thuật toán lượng tử hóa nâng cao:
    • Hiệu chỉnh sai số â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 nhiễu (Outliers Filtering): Sử dụng z-score để phát hiện và loại bỏ các nhiễu.
    • Phân cụm: Sử dụng lưới lượng tử hóa không đồng nhất để 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 các độ 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 model, các giai đoạn lượng tử hóa và cấu hình độ rộng bit.

Link to this sectionLượ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: Vừa phải (2-3 giờ trên GPU)
  3. Huấn luyện có nhận thức về lượng tử hóa (QAT):
    • Độ phức tạp: Cao
    • Chi phí tính toán: Cao (12-36 giờ trên 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

Link to this sectionCắt tỉa có cấu trúc (Structured Pruning)#

MCT giới thiệu tính năng cắt tỉa model có cấu trúc, nhận diện 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 SIMD (Single Instruction, Multiple Data) 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 giúp giảm kích thước và độ phức tạp của model 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 bộ nhớ trọng số có mục tiêu. Có sẵn thông qua API Keras và PyTorch.

Link to this sectionCô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 model để triển khai trên cảm biến IMX500 của Sony (ví dụ: Raspberry Pi AI Camera). Công cụ này hỗ trợ quá trình chuyển đổi các model Ultralytics YOLO11 được xử lý 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 đã chỉ định. Quy trình xuất sau khi lượng tử hóa model bao gồm việc tạo ra các tệp nhị phân đóng gói dữ liệu thiết yếu và các cấu hình dành riêng cho thiết bị, giúp tối ưu hóa quy trình triển khai trên Raspberry Pi AI Camera.

Link to this sectionCá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 các ngành công nghiệp. Dưới đây là một số 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 việc xử lý thời gian thực trên các thiết bị tiêu thụ năng lượng thấp là rất cần thiết.
  • Thiết bị đeo (Wearable Devices): Triển khai các model được tối ưu hóa cho việc 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ẻ: Tăng cường giám sát tại 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 (POS) hoặc kệ hàng thông minh.

Link to this sectionKế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 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 model 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.

Link to this sectionCâu hỏi thường gặp#

Link to this sectionLàm thế nào để tôi xuất một model YOLO11 sang định dạng IMX500 cho Raspberry Pi AI Camera?#

Để xuất mộ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

Quá trình xuất sẽ tạo ra một thư mục chứa các tệp cần thiết để triển khai, bao gồm packerOut.zip.

Link to this sectionNhững lợi ích chính của việc sử dụng định dạng IMX500 cho triển khai Edge AI là gì?#

Định dạng IMX500 mang lại một số ưu điểm quan trọng cho việc triển khai tại biên (edge):

  • Xử lý AI trên chip giúp giảm độ trễ và tiêu thụ năng lượng
  • Xuất cả hình ảnh và siêu dữ liệu (kết quả suy luận) thay vì chỉ 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 model hiệu quả trên các thiết bị hạn chế về tài nguyên

Link to this sectionNhững điều kiện tiên quyết về phần cứng và phần mềm nào cần thiết cho việc triển khai IMX500?#

Để triển khai các model IMX500, bạn cần có:

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ác công cụ IMX500 (sudo apt install imx500-all)

Link to this sectionTôi có thể mong đợi hiệu suất như thế nào từ các model YOLO11 trên IMX500?#

Dựa trên các bài kiểm tra điểm chuẩn của Ultralytics trên Raspberry Pi AI Camera:

  • YOLO11n đạt thời gian suy luận 58,82ms mỗi hình ảnh
  • mAP50-95 đạt 0,517 trên tập dữ liệu COCO128
  • Kích thước model chỉ còn 2,2MB 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 Edge AI.

Bình luận