Ultralytics YOLO27:

Triển khai YOLO26 trên thiết bị di động và edge với ExecuTorch#

Việc triển khai các model thị giác máy tính trên thiết bị edge như smartphone, tablet và hệ thống nhúng đòi hỏi một runtime được tối ưu, cân bằng giữa hiệu năng và các giới hạn tài nguyên. ExecuTorch, giải pháp điện toán edge của PyTorch, cho phép thực hiện inference hiệu quả trên thiết bị với các model Ultralytics YOLO.

Hướng dẫn này trình bày cách export các model Ultralytics YOLO sang định dạng ExecuTorch, cho phép bạn triển khai model trên thiết bị di động và edge với hiệu năng được tối ưu.

Tại sao nên export sang ExecuTorch?#

PyTorch ExecuTorch mobile inference framework

ExecuTorch là giải pháp end-to-end của PyTorch để hỗ trợ inference trên thiết bị di động và edge. Được xây dựng với mục tiêu có tính portable và hiệu quả, ExecuTorch có thể chạy các chương trình PyTorch trên nhiều nền tảng điện toán khác nhau.

Các tính năng chính của ExecuTorch#

ExecuTorch cung cấp nhiều tính năng mạnh mẽ để triển khai các model Ultralytics YOLO trên thiết bị edge:

  • Định dạng Model Portable: ExecuTorch sử dụng định dạng .pte (PyTorch ExecuTorch), được tối ưu về kích thước và tốc độ tải trên các thiết bị hạn chế tài nguyên.

  • Backend XNNPACK: Tích hợp XNNPACK mặc định cung cấp inference được tối ưu cao trên CPU di động, mang lại hiệu năng xuất sắc mà không yêu cầu phần cứng chuyên dụng.

  • Sẵn sàng cho Quantization: Hệ sinh thái ExecuTorch hỗ trợ các kỹ thuật quantization để giảm kích thước model và cải thiện tốc độ inference; hiện tại Ultralytics export các model FP32 thông qua backend XNNPACK.

  • Hiệu quả Bộ nhớ: Quản lý bộ nhớ được tối ưu giúp giảm footprint bộ nhớ runtime, phù hợp với các thiết bị có RAM hạn chế.

  • Metadata của Model: Các model đã export bao gồm metadata (kích thước ảnh, tên class, v.v.) trong một file YAML riêng để dễ dàng tích hợp.

Các tùy chọn triển khai với ExecuTorch#

Các model ExecuTorch có thể được triển khai trên nhiều nền tảng edge và di động khác nhau:

  • Ứng dụng di động: Triển khai trên ứng dụng iOS và Android với hiệu năng native, cho phép phát hiện đối tượng theo thời gian thực trong ứng dụng di động.

  • Hệ thống nhúng: Chạy trên các thiết bị Linux nhúng như Raspberry Pi, NVIDIA Jetson và các hệ thống dựa trên ARM khác với hiệu năng được tối ưu.

  • Thiết bị Edge AI: Triển khai trên phần cứng edge AI chuyên dụng với các delegate tùy chỉnh để tăng tốc inference.

  • Thiết bị IoT: Tích hợp vào các thiết bị IoT để thực hiện inference trên thiết bị mà không yêu cầu kết nối cloud.

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

Export ExecuTorch hỗ trợ toàn bộ bảy task của Ultralytics. Phân đoạn ngữ nghĩa và ước tính độ sâu chỉ khả dụng với YOLO26, dòng duy nhất được cung cấp các head này.

TaskYOLOv8YOLO11YOLO26
Detect
Segment
Semantic
Depth
Classify
Pose
OBB

Export các Model Ultralytics YOLO26 sang ExecuTorch#

Việc chuyển đổi các model Ultralytics YOLO26 sang định dạng ExecuTorch cho phép triển khai hiệu quả trên thiết bị di động và edge.

Cài đặt#

Export ExecuTorch yêu cầu Python 3.10-3.13 và PyTorch >= 2.9.0 cùng với package executorch:

Cài đặt
# Install Ultralytics package
pip install ultralytics

Để xem hướng dẫn chi tiết và các best practice liên quan đến quá trình cài đặt, hãy tham khảo hướng dẫn Cài đặt YOLO26 của chúng tôi. Trong quá trình cài đặt các package cần thiết cho YOLO26, nếu gặp khó khăn, hãy tham khảo hướng dẫn Các vấn đề thường gặp để tìm giải pháp và mẹo xử lý.

Cách sử dụng#

Export model YOLO26 sang ExecuTorch rất đơn giản:

Định dạng ExecuTorch hỗ trợ các mode Export, PredictValidate. Hãy export model, sau đó load model đã export để chạy inference hoặc xác thực độ chính xác.

Export
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to ExecuTorch format
model.export(format="executorch")  # creates 'yolo26n_executorch_model'
Predict
from ultralytics import YOLO

# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")

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

# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

Các bản export ExecuTorch tạo một thư mục bao gồm file .pte và metadata. Sử dụng runtime ExecuTorch trong ứng dụng di động hoặc nhúng để load model .pte và thực hiện inference.

Đối số Export#

Khi export sang định dạng ExecuTorch, bạn có thể chỉ định các đối số sau:

Đối sốKiểuMặc địnhMô tả
formatstr'executorch'Đị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 strNoneExport FP32 cố định. Export ExecuTorch không hỗ trợ chuyển đổi độ chính xác FP16, INT8 hoặc W8A16 trong thời điểm export.
batchint1Chỉ định batch inference size của model export hoặc số image tối đa mà model đã export sẽ xử lý đồng thời trong mode predict.
devicestrNoneChỉ định thiết bị dùng để export: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps).

Cấu trúc Output#

Bản export ExecuTorch tạo một thư mục chứa model và metadata:

yolo26n_executorch_model/
├── model.pte               # ExecuTorch model file
└── metadata.yaml           # Model metadata (classes, image size, etc.)

Sử dụng Model ExecuTorch đã Export#

Sau khi export model, bạn cần tích hợp model vào ứng dụng đích bằng runtime ExecuTorch.

Tích hợp trên thiết bị di động#

Đối với ứng dụng di động (iOS/Android), bạn cần:

  1. Thêm Runtime ExecuTorch: Include thư viện runtime ExecuTorch vào project di động của bạn
  2. Load Model: Load file .pte trong ứng dụng của bạn
  3. Chạy Inference: Xử lý ảnh và nhận các prediction

iOS#

Ví dụ tích hợp iOS (Objective-C/C++):

// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples

#include <executorch/extension/module/module.h>

using namespace ::executorch::extension;

// Load the model
Module module("/path/to/model.pte");

// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});

// Run inference
const auto result = module.forward(tensor);

Android#

Thêm ExecuTorch Android AAR từ Maven Central:

dependencies {
    implementation("org.pytorch:executorch-android:<version>")
}

Ví dụ tích hợp Android (Kotlin):

import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor

// Load the model
val module = Module.load("/path/to/model.pte")

// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)

// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArray

Linux nhúng#

Đối với các hệ thống Linux nhúng, sử dụng API C++ của ExecuTorch:

#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>

using namespace ::executorch::extension;

// Load model
Module module("model.pte");

// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = from_blob(input_data.data(), {1, 3, 640, 640});

// Run inference
const auto outputs = module.forward(input_tensor);

Để biết thêm chi tiết về cách tích hợp ExecuTorch vào ứng dụng, hãy truy cập Tài liệu ExecuTorch.

Tối ưu hiệu năng#

Tối ưu kích thước Model#

Để giảm kích thước model khi triển khai:

  • Sử dụng Model nhỏ hơn: Bắt đầu với YOLO26n (nano) để có footprint nhỏ nhất
  • Giảm Độ phân giải Đầu vào: Sử dụng kích thước ảnh nhỏ hơn (ví dụ: imgsz=320 hoặc imgsz=416)
  • Quantization: Áp dụng các kỹ thuật quantization (được hỗ trợ trong các phiên bản ExecuTorch tương lai)

Tối ưu tốc độ Inference#

Để inference nhanh hơn:

  • Backend XNNPACK: Backend XNNPACK mặc định cung cấp inference CPU được tối ưu
  • Tăng tốc Phần cứng: Sử dụng các delegate dành riêng cho nền tảng (ví dụ: CoreML cho iOS)
  • Xử lý Batch: Xử lý nhiều ảnh khi có thể

Benchmark#

Đội ngũ Ultralytics đã benchmark các model YOLO26, so sánh tốc độ và độ chính xác giữa PyTorch và ExecuTorch.

Hiệu năng
ModelĐịnh dạngTrạng tháiKích thước (MB)metrics/mAP50-95(B)Thời gian suy luận (ms/im)
YOLO26nPyTorch5.30.4790314.80
YOLO26nExecuTorch9.40.4800142
YOLO26sPyTorch19.50.5730930.90
YOLO26sExecuTorch36.50.5780376.1
Lưu ý

Thời gian suy luận không bao gồm bước tiền xử lý/hậu xử lý.

Khắc phục sự cố#

Các sự cố thường gặp#

Vấn đề: Python version error

Giải pháp: ExecuTorch yêu cầu Python 3.10 đến 3.13. Hãy tạo một môi trường với phiên bản được hỗ trợ:

# Using conda
conda create -n executorch python=3.10
conda activate executorch

Vấn đề: Export fails during first run

Giải pháp: Đảm bảo bạn đã cài đặt wheel executorch dựng sẵn mới nhất:

pip install --upgrade executorch

Vấn đề: Import errors for ExecuTorch modules

Giải pháp: Đảm bảo ExecuTorch được cài đặt đúng cách:

pip install executorch --force-reinstall

Để được hỗ trợ khắc phục sự cố, hãy truy cập GitHub Issues của Ultralytics hoặc Tài liệu ExecuTorch.

Tóm tắt#

Export model YOLO26 sang định dạng ExecuTorch cho phép triển khai hiệu quả trên thiết bị di động và edge. Với khả năng tích hợp native với PyTorch, hỗ trợ đa nền tảng và hiệu năng được tối ưu, ExecuTorch là lựa chọn xuất sắc cho các ứng dụng edge AI.

Các điểm chính:

  • ExecuTorch cung cấp khả năng triển khai edge native với PyTorch cùng hiệu năng xuất sắc
  • Export đơn giản với tham số format='executorch'
  • Các model được tối ưu cho CPU di động thông qua backend XNNPACK
  • Hỗ trợ các nền tảng iOS, Android và Linux nhúng
  • Yêu cầu Python 3.10-3.13 và PyTorch >= 2.9.0

FAQ#

  • Export model YOLO26 sang ExecuTorch bằng Python hoặc CLI:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="executorch")

    hoặc

    yolo export model=yolo26n.pt format=executorch
  • Export ExecuTorch yêu cầu:

    • Python 3.10 đến 3.13
    • Package executorch (cài đặt qua pip install executorch)
    • PyTorch (được cài đặt tự động cùng với ultralytics)

    Lưu ý: Package executorch cung cấp các wheel dựng sẵn (với backend XNNPACK), vì vậy không cần thêm bước biên dịch nào trong quá trình export.

  • Có thể load trực tiếp các model ExecuTorch bằng YOLO() để thực hiện inference và validation trong Python (xem các ví dụ Predict/Validate ở trên); đồng thời, các model này cũng có thể được triển khai trên thiết bị di động và edge bằng các thư viện runtime ExecuTorch.

  • ExecuTorch hỗ trợ:

    • Di động: iOS và Android
    • Linux nhúng: Raspberry Pi, NVIDIA Jetson và các thiết bị ARM khác
    • Desktop: Linux, macOS và Windows (dành cho phát triển)
  • Cả ExecuTorch và LiteRT đều phù hợp để triển khai trên thiết bị di động:

    • ExecuTorch: Tích hợp PyTorch tốt hơn, workflow PyTorch native và hệ sinh thái đang phát triển
    • LiteRT: Trưởng thành hơn, hỗ trợ phần cứng rộng hơn, có nhiều ví dụ triển khai hơn và chạy cùng một model trên Android, iOS và trình duyệt

    Hãy chọn ExecuTorch nếu bạn đã sử dụng PyTorch và muốn một lộ trình triển khai native. Hãy chọn LiteRT để có khả năng tương thích tối đa và bộ công cụ trưởng thành.

  • Có! ExecuTorch hỗ trợ tăng tốc phần cứng thông qua nhiều backend khác nhau:

    • GPU di động: Thông qua các delegate Vulkan, Metal hoặc OpenCL
    • NPU/DSP: Thông qua các delegate dành riêng cho nền tảng
    • Mặc định: XNNPACK cho inference CPU được tối ưu

    Tham khảo Tài liệu ExecuTorch để biết cách thiết lập dành riêng cho từng backend.

Bình luận