Xuất dữ liệ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 lên 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 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ể rất phức tạp. Sử dụng một định dạng model được tối ưu hóa để có hiệu suất nhanh hơn sẽ tạo ra sự khác biệt lớn.
Định dạng model IMX500 được thiết kế để sử dụng mức năng lượng tối thiểu trong khi vẫn mang lại hiệu suất nhanh chóng cho các mạng thần kinh. Nó cho phép bạn tối ưu hóa các model Ultralytics YOLO11 của mình để thực hiện suy luận tốc độ cao và 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 cách xuất và triển khai model của mình sang định dạng IMX500, đồng thời giúp việc chạy model hiệu quả hơn 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 có khả năng AI tích hợp 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 về xử lý dữ liệu, các mối quan ngại 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ỉ truyền tải hình ảnh và khung hình, IMX500 kể một câu chuyện trọn vẹn hơ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 thông tin chi tiết theo thời gian thực.
Xuất dữ liệu 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 phải gửi dữ liệu lên cloud để xử lý.
IMX500 hoạt động với các model đã được lượng tử hóa (quantized). Lượng tử hóa giúp các model nhỏ hơn và nhanh hơn mà không làm giảm đáng kể độ chính xác. Đây là giải pháp lý tưởng cho các nguồn 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 chỗ, không phụ thuộc vào cloud. Việc xử lý tại chỗ cũng giúp bảo vệ quyền riêng tư và an toàn dữ liệu người dùng vì chúng không được gửi đến máy chủ từ xa.
Các tính năng chính của IMX500:
- Xuất dữ liệu 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à giảm chi phí.
- Giải quyết các mối quan 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 vấn đề 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 mức độ chiếm dụng không gian.
- Xử lý thời gian thực: Xử lý nhanh ngay trên cảm biến hỗ trợ việc ra quyết định thời gian thực, hoàn hảo cho các ứng dụng Edge AI 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 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ệu và Hướng dẫn tinh 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 model bao gồm các tác vụ sau sang định dạng IMX500.
Việc xuất sang IMX được thiết kế và đo kiểm (benchmark) cho YOLOv8n và YOLO11n (nano). Các kiến trúc và quy mô model khác hiện không được hỗ trợ.
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.
Tại đâ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.
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")Gói Ultralytics cài đặt thêm các phần phụ thuộc (dependencies) xuất khi 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 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' | Định dạng mục tiêu cho model đã 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 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ể. |
int8 | bool | True | Kích hoạt lượng tử hóa INT8, 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. |
data | str | '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 (quantization). |
fraction | float | 1.0 | Chỉ định phần trăm dataset cần 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 con của toàn bộ dataset, 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 trong khi INT8 đã được bật, toàn bộ dataset sẽ được sử dụng. |
nms | bool | False | Thê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. |
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 để quá trình 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 model.
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, đây là tệp 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 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.
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.
Yêu cầu phần cứng
Hãy chắc chắn rằng bạn có các phần cứng sau:
- Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Kết nối Raspberry Pi AI camera với cổng 15-pin MIPI CSI trên Raspberry Pi và cấp nguồn cho Raspberry Pi
Yêu cầu 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 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 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 dưới đây có sẵn trong ví dụ về aitrios-rpi-application-module-library.
Đảm bảo thay thế các thư mục model_file và labels.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.
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()Các 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 với định dạng model imx nhằm đo lường tốc độ và độ chính xác.
| Model | Định dạng | Kích thước (pixels) | Kích thước của packerOut.zip (MB) | mAP50-95(B) | Thời gian inference (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 |
| Model | Định dạng | Kích thước (pixels) | Kích thước của packerOut.zip (MB) | acc (top1) | acc (top5) | Thời gian inference (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 benchmark trên được thực hiện bằ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 trong?
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 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 model trên các thiết bị hạn chế về tài nguyên, đả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 model mạng thần kinh:
- Tối ưu hóa đồ thị (Graph Optimizations): 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 (fold) 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.
- Các thuật toán lượng tử hóa tiên tiến:
- Shift Negative Correction: Giải quyết các vấn đề hiệu suất do 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.
- Clustering: Sử dụng các 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 Mixed-Precision: Gán độ rộng bit lượng tử hóa khác nhau cho từng 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 (phút 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: Trung bình (2-3 giờ 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ờ GPU)
MCT cũng hỗ trợ nhiều lược đồ lượng tử hóa khác nhau cho trọng số và kích hoạt:
- Power-of-Two (thân thiện với phần cứng)
- Đối xứng (Symmetric)
- Đồng nhất (Uniform)
Structured Pruning (Cắt tỉa cấu trúc)
MCT giới thiệu tính năng cắt tỉa model có cấu trúc, nhận thức 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 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 cho việc sử dụng tài nguyên dấu chân bộ nhớ trọng số được nhắm mục tiêu. Có sẵn thông qua các 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 Cameras). Công cụ này tạo điều kiện thuận lợi cho việc 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 được chỉ định. Quy trình xuất sau khi lượng tử hóa model bao gồm việc tạo 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 hợp lý 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ế
Xuất sang định dạng IMX500 có khả năng ứng dụng rộng rãi trong nhiều 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ụ điện năng thấp là điều cần thiết.
- Thiết bị đeo (Wearable Devices): Triển khai các model đã tối ưu hóa 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 đã export 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 khả nă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 vào các hệ thống điểm bán hàng (POS) hoặc kệ hàng thông minh.
Kết luận
Việc export 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 inference hiệu quả trên các camera dùng 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 độ inference 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, vui lòng tham khảo trang web IMX500 của Sony.
Câu hỏi thường gặp (FAQ)
Làm thế nào để tôi export một model YOLO11 sang định dạng IMX500 cho Raspberry Pi AI Camera?
Để export 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 export 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.
Những lợi ích chính khi sử dụng định dạng IMX500 cho việc 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 ở edge:
- Xử lý AI trên chip giúp giảm độ trễ và mức tiêu thụ điện năng
- Xuất ra cả hình ảnh và metadata (kết quả inference) thay vì chỉ xuất 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 phụ thuộc vào cloud
- 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
Cần có những yêu cầu tiên quyết nào về phần cứng và phần mềm để triển khai IMX500?
Để 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ác công cụ IMX500 (
sudo apt install imx500-all)
Tô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 benchmark của Ultralytics trên Raspberry Pi AI Camera:
- YOLO11n đạt thời gian inference 62.50ms trên mỗi hình ảnh
- mAP50-95 là 0.492 trên tập dữ liệu COCO128
- Kích thước model chỉ còn 3.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 thực hiện inference 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.