Ultralytics YOLO27:
Get Started

Xuất model YOLO26 sang ONNX#

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

Thông thường, khi triển khai 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 model Ultralytics YOLO26 sang định dạng ONNX giúp đơn giản hóa quá trình triển khai và đảm bảo hiệu năng tối ưu trên 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 model YOLO26 sang ONNX, đồng thời cải thiện khả năng mở rộng và hiệu quả của model trong các ứng dụng thực tế.



Xem: Kiểm thử inference ONNX: Ultralytics YOLO26 so với Ultralytics YOLO11 | YOLO26 inference nhanh hơn khoảng 43% 🚀

ONNX và ONNX Runtime#

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

Có thể dùng model ONNX để chuyển đổi liền mạch giữa các 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 nhập vào TensorFlow.

ONNX model portability across deep learning frameworks

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

ONNX Runtime tối ưu hóa việc thực thi model ONNX bằng cách tận dụng các khả năng riêng của phần cứng. Nhờ tối ưu hóa này, model có thể chạy hiệu quả với 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 bộ tăng tốc 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 đều cung cấp 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 về các tính năng chính sau:

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

  • 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 toán tử. Nhờ đó, model được tạo bằng phiên bản cũ vẫn có thể sử dụng ngay cả khi tiêu chuẩn phát triển. Tương thích ngược là tính năng thiết yếu giúp model không nhanh chóng trở nên lỗi thời.

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

  • Công cụ và hệ sinh thái: ONNX có 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 dễ dàng hơn và chuyển đổi model liền mạch giữa các framework khác nhau.

Các ứng dụng phổ biến của ONNX#

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

Triển khai trên CPU#

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 hóa để thực thi trên CPU. Runtime giúp cải thiện đáng kể tốc độ inference và khả thi hóa việc triển khai CPU theo thời gian thực.

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

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

  • Tăng tốc GPU: ONNX hỗ trợ đầy đủ tăng tốc GPU trên GPU NVIDIA thông qua CUDA và trên GPU AMD thông qua ROCm và MIGraphX.

  • Thiết bị biên và di động: ONNX hỗ trợ cả thiết bị biên lẫn thiết bị di động, rất phù hợp với các tình huống inference trực tiếp trên thiết bị và theo thời gian thực. ONNX có trọng lượng nhẹ, tương thích với phần cứng biên và là nền tảng cho các định dạng NPU của nhà cung cấp như Huawei Ascend, Qualcomm QNN dành cho thiết bị Snapdragon và RKNN dành 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à linh hoạt trên nền web.

Các tác vụ được hỗ trợ#

Xuất ONNX hỗ trợ cả bảy tác vụ của Ultralytics. Phân đoạn ngữ nghĩa và ước tính độ sâu chỉ có trên YOLO26, dòng model duy nhất được phát hành kèm các head này.

Tác vụYOLOv8YOLO11YOLO26
Phát hiện✅✅✅
Phân đoạn✅✅✅
Ngữ nghĩa❌❌✅
Độ sâu❌❌✅
Phân loại✅✅✅
Tư thế✅✅✅
OBB✅✅✅

Xuất model YOLO26 sang ONNX#

Bạn có thể mở rộng khả năng tương thích và tính linh hoạt khi triển khai model 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 cần thiết, 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 phương pháp thực hành tốt nhất liên quan đến quy trình cài đặt, hãy tham khảo hướng dẫn cài đặt YOLO26. Nếu gặp khó khăn khi cài đặt các package cần thiết cho YOLO26, hãy xem hướng dẫn về các sự cố thường gặp để tìm giải pháp và mẹo xử lý.

Cách sử dụng#

Trước khi tìm hiểu hướng dẫn sử dụng, hãy xem qua 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 dự án.

Định dạng ONNX hỗ trợ các chế độ Export, Predict và Validate. Hãy xuất model, sau đó tải model đã xuất để chạy inference hoặc xác thực độ chính xác.

Export
from ultralytics import YOLO

# Nạp model YOLO26
model = YOLO("yolo26n.pt")

# # Xuất model sang định dạng ONNX
model.export(format="onnx")  # tạo 'yolo26n.onnx'

# Xuất model ONNX lượng tử hóa INT8 với dữ liệu hiệu chuẩn
model.export(format="onnx", quantize=8, data="coco8.yaml")  # tạo 'yolo26n_int8.onnx'
Dự đoán
from ultralytics import YOLO

# Nạp model ONNX đã xuất
model = YOLO("yolo26n.onnx")

# Chạy suy luận
results = model("https://ultralytics.com/images/bus.jpg")
Xác thực
from ultralytics import YOLO

# Nạp model ONNX đã xuất
model = YOLO("yolo26n.onnx")

# # Đánh giá độ chính xác trên bộ dữ liệu COCO8
metrics = model.val(data="coco8.yaml")

Các tham số xuất model#

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 đối số để tối ưu hóa theo nhu cầu triển khai cụ thể:

Đối sốKiểuMặc địnhMô tả
formatstr'onnx'Định dạng đích của model đã xuất, 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 đầu vào model. Có thể là số nguyên cho ảnh vuông hoặc tuple (height, width) để chỉ định 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 với ảnh hiệu chuẩn từ data, tạo ra model _int8.onnx); 32/không đặt là FP32. Checkpoint được huấn luyện với quantize=8 luôn xuất INT8 dưới dạng các node Q/DQ theo các phạm vi mà checkpoint lưu giữ, không cần hiệu chuẩn và dùng tên .onnx thông thường. Thay thế các flag half/int8 đã lỗi thời.
datastrNoneYAML dataset dùng để hiệu chuẩn INT8; với phân loại, thay vào đó hãy dùng thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu không chỉ định quantize=8, Ultralytics sẽ chọn dataset hiệu chuẩn mặc định cho tác vụ của model; checkpoint được huấn luyện với quantize=8 thì không cần dataset.
fractionfloat, int hoặc list1.0Tập con hiệu chuẩn dưới dạng tỷ lệ, số lượng ảnh hoặc tỷ lệ/số lượng [train, val, test]. Danh sách gồm hai mục giữ test ở dạng đầy đủ, còn 0 sẽ bỏ qua mục này.
dynamicboolFalseCho phép kích thước đầu vào động, tăng tính linh hoạt khi xử lý ảnh có kích thước khác nhau.
simplifyboolTrueĐơn giản hóa đồ thị 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 để đảm bảo tương thích với các parser và runtime ONNX khác nhau. Nếu không đặt, tùy chọn này sẽ dùng phiên bản mới nhất được hỗ trợ.
nmsbool, không bắt buộcNoneChọn đầu ra thô (None, mặc định), NMS nhúng (True) hoặc head không có NMS (False).
batchint1Chỉ định kích thước batch suy luận của model khi xuất hoặc số lượng ảnh tối đa mà model đã xuất xử lý đồng thời ở chế độ predict.
devicestrNoneChỉ định thiết bị dùng để xuất: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps).

Để 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.

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

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

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

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

  • Hướng dẫn ONNX trên GitHub: Bộ sưu tập hướng dẫn toàn diện về nhiều khía cạnh của việc sử dụng và triển khai model ONNX trong các tình huống khác nhau.

  • Triton Inference Server: Tìm hiểu cách triển khai model ONNX bằng Triton Inference Server của NVIDIA để có các quy trình triển khai hiệu năng cao, có khả năng mở rộng.

Inference trên GPU AMD với MIGraphX#

Ultralytics chạy model ONNX đã xuất trên GPU AMD thông qua execution provider MIGraphX của ONNX Runtime. Trên hệ thống ROCm (HIP), backend ONNX cài plugin onnxruntime-ep-migraphx trong lần sử dụng đầu tiên và tự động chọn MIGraphXExecutionProvider mà không cần thay đổi code; tất cả tác vụ YOLO26 đều được hỗ trợ. Xem hướng dẫn inference trên GPU AMD để biết các yêu cầu tiên quyết, cách cài đặt, cách sử dụng, kết quả benchmark và bộ nhớ đệm chương trình đã biên dịch.

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 hầu như mọi môi trường. Tùy theo nhu cầu cụ thể, bạn cũng có thể tìm hiểu các tùy chọn xuất khác như TensorRT để đạt hiệu năng GPU tối đa hoặc CoreML dành 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.

Câu hỏi thường gặp#

  • Để 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
    
    # Nạp model YOLO26
    model = YOLO("yolo26n.pt")
    
    # # Xuất model sang định dạng ONNX
    model.export(format="onnx")  # tạo 'yolo26n.onnx'
    
    # Nạp model ONNX đã xuất
    onnx_model = YOLO("yolo26n.onnx")
    
    # Chạy suy luận
    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 về xuất model.

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

    • 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 riêng cho phần cứng CPU, GPU và bộ tăng tốc chuyên dụng, mang lại hiệu năng inference cao.
    • Khả năng tương tác giữa các framework: Có thể dễ dàng chuyển đổi model được huấn luyện bằng các framework phổ biến như PyTorch hoặc TensorFlow sang định dạng ONNX và chạy bằng ONNX Runtime.
    • Tối ưu hiệu năng: ONNX Runtime có thể tăng tốc CPU đến 3 lần so với model PyTorch gốc, phù hợp với các tình huống 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ó thể triển khai các model YOLO26 được export sang ONNX trên nhiều nền tảng, bao gồm:

    • CPU: Sử dụng ONNX Runtime để tối ưu hóa suy luận trên CPU.
    • GPU NVIDIA: Tận dụng NVIDIA CUDA để tăng tốc GPU hiệu năng cao.
    • GPU AMD: Sử dụng AMD ROCm và nhà cung cấp thực thi MIGraphX để tăng tốc GPU hiệu năng cao trên Linux.
    • Thiết bị biên: Chạy các model nhẹ trên thiết bị biên và thiết bị di động để suy luận trực tiếp trên thiết bị theo thời gian thực.
    • 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 để suy luận có khả năng mở rộng.

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

  • Sử dụng định dạng ONNX cho các 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 dùng cùng một model trên các nền tảng khác nhau mà không cần chỉnh sửa.
    • 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ề export model YOLO26 sang ONNX.

  • Khi export model YOLO26 sang ONNX, bạn có thể gặp một số sự cố phổ biến như dependency không khớp hoặc thao tác không được hỗ trợ. Để khắc phục các 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 cần thiết.
    2. Kiểm tra tài liệu ONNX chính thức để biết các toán tử 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ử dùng các đối số export khác, chẳng hạn như simplify=True, hoặc điều chỉnh phiên bản opset.
    5. Nếu gặp sự cố với kích thước đầu vào động, hãy đặt 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