Xuấ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.
Triển khai các mô hình computer vision 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ể gặp nhiều khó khăn. Việc sử dụng định dạng mô hình được tối ưu hóa cho hiệu suất nhanh hơn sẽ tạo ra sự khác biệt lớn.
Định dạng mô hình IMX500 được thiết kế để sử dụng mức năng lượng tối thiểu đồng thời mang lại hiệu suất nhanh cho mạng neural. Nó cho phép bạn tối ưu hóa các mô hình Ultralytics YOLO11 của mình để thực hiện inferencing tốc độ cao và tiêu thụ ít năng lượng. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn quy trình xuất và triển khai các mô hình của bạn sang định dạng IMX500 đồng thời giúp các mô hình của bạn hoạt động tốt trên Raspberry Pi AI Camera.
Tại sao bạn nên xuất sang IMX500?#
IMX500 Intelligent Vision Sensor của Sony là một phần cứng mang tính đột phá trong xử lý 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 trên chip. Cảm biến này giúp vượt qua nhiều thách thức trong edge AI, bao gồm các điểm nghẽn xử lý dữ liệu, các vấn đề về quyền riêng tư và những hạn chế về hiệu suất. Trong khi các cảm biến khác chỉ đơn thuần truyền đi hình ảnh và khung hình, IMX500 kể lại 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 các thông tin chi tiết theo thời gian thực.
Xuấ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 mô hình đã được lượng tử hóa (quantized). Lượng tử hóa giúp các mô hình nhỏ hơn và nhanh hơn mà không làm mất đi nhiều accuracy. Nó rất lý tưởng cho các tài nguyên hạn chế của edge computing, 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 cục bộ mà không phụ thuộc vào đám mây. Việc xử lý cục bộ cũng giúp giữ cho dữ liệu người dùng được riêng tư và bảo mật vì nó không được gửi đến một 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ắt đầu: Để có kết quả tốt nhất, hãy đảm bảo mô hình YOLO11 của bạn đã chuẩn bị kỹ lưỡng cho việc xuất bằng cách làm theo Model Training Guide, Data Preparation Guide và Hyperparameter Tuning Guide của chúng tôi.
Các tác vụ được hỗ trợ#
Tính năng xuất IMX500 hỗ trợ bốn trong số bảy tác vụ của Ultralytics, và chỉ dành cho YOLOv8n và YOLO11n: các họ model, tỷ lệ và kiến trúc khác không được hỗ trợ, và việc xuất một model phân đoạn ngữ nghĩa, OBB hoặc ước tính độ sâu sẽ gây ra lỗi.
Ví 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. Inference và validation chạy trên Raspberry Pi AI Camera (IMX500).
Tại đây, chúng tôi thực hiện inference chỉ để đảm bảo mô hình hoạt động như mong đợi. Tuy nhiên, để triển khai và thực hiện inference trên Raspberry Pi AI Camera, vui lòng chuyển đến phần Using IMX500 Export in Deployment.
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") 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") 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) 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") 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")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.
Đối số xuất#
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
format | str | '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. |
imgsz | int hoặc tuple | 640 | Kích thước ảnh mong muốn cho đầu vào của mô hình. Có thể là một số nguyên cho ảnh vuông hoặc một tuple (height, width) cho các kích thước cụ thể. |
quantize | int hoặc str | 8/auto | Độ chính xác lượng tử hóa. 8 (INT8/PTQ) được bật tự động cho IMX500; "w8a16" xuất trọng số INT8 với các activation FP16. Không hỗ trợ xuất chỉ FP32 và FP16. Thay thế các cờ half/int8 đã lỗi thời. |
data | str | None | Đường dẫn đến YAML dataset, rất cần thiết cho việc lượng tử hóa; phân loại (classification) thay vào đó sẽ nhận một thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu bỏ qua với quantize=8 hoặc 'w8a16', Ultralytics sẽ chọn dataset hiệu chuẩn mặc định cho tác vụ mô hình. |
fraction | float, int, hoặc list | 1.0 | Tập hợp con hiệu chuẩn dưới dạng tỷ lệ, số lượng ảnh hoặc [train, val] tỷ lệ/số lượng; một danh sách giới hạn train hoặc val, trong khi test vẫn giữ nguyên toàn bộ. |
nms | bool | False | Thêm Non-Maximum Suppression (NMS) vào mô hình đã xuất. Khi True, conf, iou và agnostic_nms cũng được chấp nhận. |
device | str | None | Chỉ định thiết bị để xuất: GPU (device=0), CPU (device=cpu). |
Nếu bạn đang 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ề quá trình xuất, hãy truy cập trang tài liệu của Ultralytics về việc xuất model.
Quá trình xuất sẽ tạo ra 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 <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 mô hình 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 mô hình.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtSử 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.
Đ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:
- Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
- 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
Điều kiện tiên quyết về phần mềm#
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-upgradeBướ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-allBước 3: Khởi động lại Raspberry Pi để các thay đổi có hiệu lực
sudo rebootBước 4: Cài đặt Aitrios Raspberry Pi application module library
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitBước 5: Chạy các tác vụ nhận diện đối tượng (object detection), ước tính tư thế (pose estimation), phân loại (classification) và phân đoạn (segmentation) của YOLO11 bằng cách sử dụng các tập lệnh bên dưới có sẵn trong aitrios-rpi-application-module-library examples.
Hãy nhớ thay thế các thư mục model_file và labels.txt theo môi trường của bạn trước khi chạy các tập lệnh này.
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()Điểm chuẩn (Benchmarks)#
Các điểm chuẩn (benchmark) của YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls và YOLO11n-cls dưới đây được chạy bởi đội ngũ Ultralytics trên Raspberry Pi AI Camera với định dạng mô hình imx đo lường tốc độ và độ chính xác.
| Mô hình | Định dạng | Kích thước (pixel) | Kích thước của packerOut.zip (MB) | mAP50-95(B) | Thời gian suy luận (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Mô hình | Định dạng | Kí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-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
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.
Có gì bên dưới lớp vỏ?#
Bộ công cụ nén model Sony (MCT)#
Sony's Model Compression Toolkit (MCT) là một công cụ mạnh mẽ để tối ưu hóa các mô hình deep learning thông qua lượng tử hóa (quantization) và tỉa mạng (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 nâng cao để giảm kích thước mô hình 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 cho việc triển khai các mô hình trên các thiết bị bị giới hạn tài nguyên, đảm bảo inference 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 model mạng neural:
- 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 đó.
- 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.
- 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.
- 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.
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:
- 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)
- 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)
- 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:
- Lũy thừa của hai (thân thiện với phần cứng)
- Đối xứng
- Đồng nhất
Cắ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.
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 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.
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 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.
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 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 IMX500 website của Sony.
Câu hỏi thường gặp#
Để 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 defaultQuá trình xuất sẽ tạo một thư mục chứa các tệp 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 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
Để 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)
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.