Ultralytics YOLO27:

Xuất YOLO26 Models sang ONNX#

Inference ONNX trên CPU nhanh hơn ~43%: YOLO26n so với YOLO11n
  • YOLO26n chạy nhanh hơn tới 43% so với YOLO11n khi inference ONNX trên CPU (Intel Xeon CPU @ 2.00 GHz). Xem trang model YOLO26 để biết so sánh đầy đủ.

Thông thường, khi triển khai các model thị giác máy tính, bạn sẽ cần một định dạng model vừa linh hoạt vừa tương thích với nhiều nền tảng.

Xuất các model Ultralytics YOLO26 sang định dạng ONNX giúp đơn giản hóa việc triển khai và đảm bảo hiệu năng tối ưu trong nhiều môi trường. Hướng dẫn này sẽ chỉ cho bạn cách dễ dàng chuyển đổi các model YOLO26 sang ONNX, đồng thời cải thiện khả năng mở rộng và hiệu quả của chúng trong các ứng dụng thực tế.



Watch: Ultralytics YOLO26 vs Ultralytics YOLO11 ONNX Inference Test | ~43% Faster Inference with YOLO26 🚀

ONNX và ONNX Runtime#

ONNX, viết tắt của Open Neural Network Exchange, là một dự án cộng đồng do Facebook và Microsoft phát triển ban đầu. ONNX hiện được phát triển dưới hình thức cộng tác với sự hỗ trợ của nhiều tổ chức như IBM, Amazon (thông qua AWS) và Google. Dự án hướng đến việc tạo ra một định dạng tệp mở để biểu diễn các model machine learning, cho phép sử dụng chúng trên nhiều framework AI và phần cứng khác nhau.

Các model ONNX có thể được sử dụng để chuyển đổi liền mạch giữa những framework khác nhau. Ví dụ, một model deep learning được huấn luyện bằng PyTorch có thể được xuất sang định dạng ONNX rồi dễ dàng import vào TensorFlow.

ONNX model portability across deep learning frameworks

Ngoài ra, các model ONNX có thể được sử dụng với ONNX Runtime. ONNX Runtime là một accelerator đa nền tảng linh hoạt dành cho các model machine learning, tương thích với những framework như PyTorch, TensorFlow, scikit-learn, v.v.

ONNX Runtime tối ưu hóa quá trình thực thi các model ONNX bằng cách tận dụng những khả năng riêng của phần cứng. Việc tối ưu hóa này giúp model chạy hiệu quả và đạt hiệu năng cao trên nhiều nền tảng phần cứng, bao gồm CPU, GPU và các accelerator chuyên dụng.

ONNX Runtime cross-platform inference acceleration

Dù được sử dụng độc lập hay kết hợp với ONNX Runtime, ONNX cung cấp một giải pháp linh hoạt cho việc triển khai model machine learning và khả năng tương thích.

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

Khả năng xử lý nhiều định dạng của ONNX có thể được quy cho những tính năng chính sau:

  • Biểu diễn model phổ biến: ONNX định nghĩa một tập hợp operator phổ biến (như phép tích chập, layer, v.v.) và một định dạng dữ liệu tiêu chuẩn. Khi một model được chuyển đổi sang định dạng ONNX, kiến trúc và trọng số của model sẽ được chuyển thành biểu diễn phổ biến này. Tính thống nhất đó đảm bảo model có thể được hiểu bởi bất kỳ framework nào hỗ trợ ONNX.

  • Quản lý phiên bản và tương thích ngược: ONNX duy trì hệ thống quản lý phiên bản cho các operator. Điều này đảm bảo rằng ngay cả khi tiêu chuẩn phát triển, các model được tạo bằng những phiên bản cũ hơn vẫn có thể sử dụng. Tương thích ngược là một tính năng quan trọng, giúp model không nhanh chóng trở nên lỗi thời.

  • Biểu diễn model dựa trên graph: ONNX biểu diễn model dưới dạng các graph tính toán. Cấu trúc dựa trên graph này là một cách phổ quát để biểu diễn các model machine learning, trong đó các node biểu thị operation hoặc phép tính, còn các edge biểu thị tensor truyền giữa chúng. Định dạng này dễ dàng thích ứng với nhiều framework khác nhau, vốn cũng biểu diễn model dưới dạng graph.

  • Công cụ và hệ sinh thái: ONNX có một hệ sinh thái công cụ phong phú hỗ trợ chuyển đổi, trực quan hóa và tối ưu hóa model. Những công cụ này giúp developer làm việc với model ONNX và chuyển đổi model liền mạch giữa các framework khác nhau.

Các cách sử dụng ONNX phổ biến#

Trước khi tìm hiểu cách xuất model YOLO26 sang định dạng ONNX, hãy cùng xem các model ONNX thường được sử dụng ở đâu.

Triển khai trên CPU#

Các model ONNX thường được triển khai trên CPU nhờ khả năng tương thích với ONNX Runtime. Runtime này được tối ưu cho việc thực thi trên CPU. Nó cải thiện đáng kể tốc độ inference và giúp khả thi hóa việc triển khai trên CPU theo thời gian thực.

Các tùy chọn triển khai được hỗ trợ#

Mặc dù các model ONNX thường được sử dụng trên CPU, chúng cũng có thể được triển khai trên những nền tảng sau:

  • Tăng tốc GPU: ONNX hỗ trợ đầy đủ tăng tốc GPU, đặc biệt là NVIDIA CUDA. Để huấn luyện và inference native trên GPU AMD, hãy sử dụng PyTorch ROCm; tệp ONNX vẫn yêu cầu một runtime tương thích với AMD.

  • Thiết bị edge và mobile: ONNX mở rộng đến các thiết bị edge và mobile, rất phù hợp cho các kịch bản inference trên thiết bị và theo thời gian thực. ONNX nhẹ, tương thích với phần cứng edge và là nền tảng cho các định dạng NPU của vendor như Huawei Ascend, Qualcomm QNN cho thiết bị Snapdragon và RKNN cho NPU Rockchip.

  • Trình duyệt web: ONNX có thể chạy trực tiếp trong trình duyệt web, hỗ trợ các ứng dụng AI tương tác và động trên nền web.

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

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

TaskYOLOv8YOLO11YOLO26
Detect
Segment
Semantic
Depth
Classify
Pose
OBB

Xuất model YOLO26 sang ONNX#

Bạn có thể mở rộng khả năng tương thích của model và tính linh hoạt khi triển khai bằng cách chuyển đổi model YOLO26 sang định dạng ONNX. Ultralytics YOLO26 cung cấp quy trình xuất đơn giản, có thể cải thiện đáng kể hiệu năng model trên nhiều nền tảng khác nhau.

Cài đặt#

Để cài đặt package bắt buộc, hãy chạy:

Cài đặt
# Install the required package for YOLO26
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#

Trước khi bắt đầu xem hướng dẫn sử dụng, hãy tham khảo danh sách các model YOLO26 do Ultralytics cung cấp. Điều này sẽ giúp bạn chọn model phù hợp nhất với yêu cầu của project.

Định dạng ONNX hỗ trợ các mode Export, PredictValidate. Hãy xuất model, sau đó load model đã xuất để 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 ONNX format
model.export(format="onnx")  # creates 'yolo26n.onnx'

# Export an INT8-quantized ONNX model with calibration data
model.export(format="onnx", quantize=8, data="coco8.yaml")  # creates 'yolo26n_int8.onnx'
Predict
from ultralytics import YOLO

# Load the exported ONNX model
model = YOLO("yolo26n.onnx")

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

# Load the exported ONNX model
model = YOLO("yolo26n.onnx")

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

Đối số Export#

Khi xuất model YOLO26 sang định dạng ONNX, bạn có thể tùy chỉnh quy trình bằng nhiều argument để tối ưu cho nhu cầu triển khai cụ thể:

Đối sốKiểuMặc địnhMô tả
formatstr'onnx'Đị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 strNoneĐộ chính xác lượng tử hóa: 16 (FP16) hoặc 8 (lượng tử hóa tĩnh INT8 bằng ONNX Runtime sử dụng ảnh hiệu chuẩn từ data, tạo ra một mô hình _int8.onnx); 32/chưa thiết lập là FP32. Một checkpoint được huấn luyện bằng quantize=8 luôn xuất INT8 dưới dạng các nút Q/DQ từ các phạm vi mà nó chứa, không cần hiệu chuẩn và dưới tên .onnx thông thường. Thay thế các cờ half/int8 đã lỗi thời.
datastrNoneYAML tập dữ liệu được sử dụng cho việc hiệu chuẩn INT8; bài toán phân loại thay vào đó nhận một thư mục tập dữ liệu hoặc một tên tập dữ liệu có sẵn. Nếu bỏ qua với quantize=8, Ultralytics sẽ chọn tập dữ liệu hiệu chuẩn mặc định cho tác vụ mô hình; một checkpoint được huấn luyện bằng quantize=8 không cần cái nào.
fractionfloat, int hoặc list1.0Tập con hiệu chuẩn dưới dạng tỷ lệ, số lượng ảnh hoặc các tỷ lệ/số lượng [train, val, test]. Với danh sách gồm hai mục, test để trống, còn 0 sẽ bỏ qua mục này.
dynamicboolFalseCho phép kích thước input động, tăng tính linh hoạt khi xử lý các kích thước ảnh khác nhau.
simplifyboolTrueĐơn giản hóa graph của model bằng onnxslim, có khả năng cải thiện hiệu năng và khả năng tương thích.
opsetintNoneChỉ định phiên bản opset ONNX để tương thích với các parser và runtime ONNX khác nhau. Nếu không thiết lập, hệ thống sẽ sử dụng phiên bản mới nhất được hỗ trợ.
nmsbool, tùy chọnNoneChọn đầu ra thô (None, mặc định), NMS tích hợp (True), hoặc phần đầu không có NMS (False).
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).

Để biết thêm chi tiết về quy trình export, hãy truy cập trang tài liệu Ultralytics về export.

Triển khai model YOLO26 ONNX đã xuất#

Sau khi xuất thành công các model Ultralytics YOLO26 sang định dạng ONNX, bước tiếp theo là triển khai những model này trong nhiều môi trường khác nhau. Để xem hướng dẫn chi tiết về cách triển khai model ONNX, hãy tham khảo các tài nguyên sau:

  • Tài liệu ONNX Runtime Python API: Hướng dẫn này cung cấp thông tin thiết yếu để load và chạy model ONNX bằng ONNX Runtime.

  • Triển khai trên thiết bị edge: Xem trang tài liệu này để tìm các ví dụ khác nhau về triển khai model ONNX trên thiết bị edge.

  • Các tutorial ONNX trên GitHub: Bộ sưu tập các tutorial toàn diện, bao quát nhiều khía cạnh của việc sử dụng và triển khai model ONNX trong các kịch bản khác nhau.

  • Triton Inference Server: Tìm hiểu cách triển khai model ONNX với Triton Inference Server của NVIDIA để có các phiên bản triển khai hiệu năng cao và khả năng mở rộng.

Tóm tắt#

Trong hướng dẫn này, bạn đã tìm hiểu cách xuất model Ultralytics YOLO26 sang định dạng ONNX để tăng khả năng tương tác và hiệu năng trên nhiều nền tảng. Bạn cũng đã được giới thiệu về ONNX Runtime và các tùy chọn triển khai ONNX.

Xuất ONNX chỉ là một trong nhiều định dạng xuất được Ultralytics YOLO26 hỗ trợ, cho phép bạn triển khai model trong gần như mọi môi trường. Tùy theo nhu cầu cụ thể, bạn cũng có thể khám phá các tùy chọn xuất khác như TensorRT để đạt hiệu năng GPU tối đa hoặc CoreML cho thiết bị Apple.

Để biết thêm chi tiết về cách sử dụng, hãy truy cập tài liệu chính thức của ONNX.

Ngoài ra, nếu muốn tìm hiểu thêm về các tích hợp Ultralytics YOLO26 khác, hãy truy cập trang hướng dẫn tích hợp của chúng tôi. Tại đó, bạn sẽ tìm thấy nhiều tài nguyên và thông tin hữu ích.

FAQ#

  • Để xuất model YOLO26 sang định dạng ONNX bằng Ultralytics, hãy làm theo các bước sau:

    Cách sử dụng
    from ultralytics import YOLO
    
    # Load a YOLO26 model
    model = YOLO("yolo26n.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")  # creates 'yolo26n.onnx'
    
    # Load the exported ONNX model
    onnx_model = YOLO("yolo26n.onnx")
    
    # Run inference
    results = onnx_model("https://ultralytics.com/images/bus.jpg")

    Để biết thêm chi tiết, hãy truy cập tài liệu export.

  • Sử dụng ONNX Runtime để triển khai model YOLO26 mang lại một số ưu điểm:

    • Khả năng tương thích đa nền tảng: ONNX Runtime hỗ trợ nhiều nền tảng như Windows, macOS và Linux, đảm bảo model chạy ổn định trên các môi trường khác nhau.
    • Tăng tốc phần cứng: ONNX Runtime có thể tận dụng các tối ưu hóa dành riêng cho phần cứng CPU, GPU và accelerator chuyên dụng, mang lại inference hiệu năng cao.
    • Khả năng tương tác giữa các framework: Các model được huấn luyện bằng những framework phổ biến như PyTorch hoặc TensorFlow có thể dễ dàng chuyển đổi sang định dạng ONNX và chạy bằng ONNX Runtime.
    • Tối ưu hóa hiệu năng: ONNX Runtime có thể giúp CPU nhanh hơn tới 3 lần so với model PyTorch native, rất phù hợp cho các kịch bản triển khai có tài nguyên GPU hạn chế.

    Tìm hiểu thêm trong tài liệu ONNX Runtime.

  • Các model YOLO26 được xuất sang ONNX có thể được triển khai trên nhiều nền tảng, bao gồm:

    • CPU: Sử dụng ONNX Runtime để inference trên CPU được tối ưu hóa.
    • GPU: Tận dụng NVIDIA CUDA để tăng tốc GPU hiệu năng cao.
    • Thiết bị edge: Chạy các model nhẹ trên thiết bị edge và mobile để inference theo thời gian thực trên thiết bị.
    • Trình duyệt web: Thực thi model trực tiếp trong trình duyệt web cho các ứng dụng web tương tác.
    • Dịch vụ đám mây: Triển khai trên các nền tảng đám mây hỗ trợ định dạng ONNX để inference có khả năng mở rộng.

    Để biết thêm thông tin, hãy xem hướng dẫn của chúng tôi về các tùy chọn triển khai model.

  • Sử dụng định dạng ONNX cho model Ultralytics YOLO26 mang lại nhiều lợi ích:

    • Khả năng tương tác: ONNX cho phép chuyển model liền mạch giữa các framework machine learning khác nhau.
    • Tối ưu hóa hiệu năng: ONNX Runtime có thể cải thiện hiệu năng model bằng cách tận dụng các tối ưu hóa dành riêng cho phần cứng.
    • Tính linh hoạt: ONNX hỗ trợ nhiều môi trường triển khai, cho phép bạn sử dụng cùng một model trên các nền tảng khác nhau mà không cần sửa đổi.
    • Tiêu chuẩn hóa: ONNX cung cấp một định dạng tiêu chuẩn được hỗ trợ rộng rãi trong ngành, đảm bảo khả năng tương thích lâu dài.

    Tham khảo hướng dẫn toàn diện về xuất model YOLO26 sang ONNX.

  • Khi xuất model YOLO26 sang ONNX, bạn có thể gặp các sự cố phổ biến như dependency không khớp hoặc operation không được hỗ trợ. Để khắc phục những vấn đề này:

    1. Xác minh rằng bạn đã cài đặt đúng phiên bản của các dependency bắt buộc.
    2. Kiểm tra tài liệu ONNX chính thức để biết các operator và tính năng được hỗ trợ.
    3. Xem lại thông báo lỗi để tìm manh mối và tham khảo hướng dẫn Các sự cố thường gặp của Ultralytics.
    4. Thử sử dụng các argument export khác như simplify=True hoặc điều chỉnh phiên bản opset.
    5. Đối với các sự cố về kích thước input động, hãy thiết lập dynamic=True trong quá trình export.

    Nếu sự cố vẫn tiếp diễn, hãy liên hệ bộ phận hỗ trợ của Ultralytics để được trợ giúp thêm.

Bình luận