ONNX (Open Neural Network Exchange)
Khám phá định dạng Open Neural Network Exchange (ONNX). Tìm hiểu cách xuất Ultralytics YOLO26 sang ONNX để triển khai đa nền tảng nhanh chóng và tối ưu hóa phần cứng.
ONNX (Open Neural Network Exchange) là một định dạng mã nguồn mở được thiết kế để đại diện cho các model machine learning, cho phép khả năng tương tác giữa nhiều framework và công cụ AI khác nhau. Nó đóng vai trò như một trình biên dịch phổ quát cho deep learning, cho phép các lập trình viên xây dựng model trong một framework—ví dụ như PyTorch, TensorFlow hoặc Scikit-learn—và triển khai chúng một cách liền mạch trong một môi trường khác đã được tối ưu hóa cho việc inference. Bằng cách xác định một tập hợp các operator chung và một định dạng tệp tiêu chuẩn, ONNX loại bỏ nhu cầu về các tập lệnh chuyển đổi tùy chỉnh phức tạp vốn thường được yêu cầu để đưa các model từ nghiên cứu vào môi trường sản xuất. Sự linh hoạt này rất quan trọng đối với các quy trình AI hiện đại, nơi việc huấn luyện có thể diễn ra trên các GPU đám mây mạnh mẽ trong khi mục tiêu triển khai lại là các phần cứng đa dạng như thiết bị biên, điện thoại di động hoặc trình duyệt web.
Link to this sectionVai trò của ONNX trong AI hiện đại#
Trong bối cảnh phát triển nhanh chóng của trí tuệ nhân tạo, các nhà nghiên cứu và kỹ sư thường sử dụng nhiều công cụ khác nhau cho các giai đoạn khác nhau của vòng đời phát triển. Một nhà khoa học dữ liệu có thể ưu tiên sự linh hoạt của PyTorch để thử nghiệm và huấn luyện, trong khi một kỹ sư sản xuất lại cần hiệu suất tối ưu của TensorRT hoặc OpenVINO để triển khai. Nếu không có một định dạng trao đổi tiêu chuẩn, việc di chuyển model giữa các hệ sinh thái này sẽ rất khó khăn và dễ gây ra lỗi.
ONNX thu hẹp khoảng cách này bằng cách cung cấp định nghĩa chung về đồ thị tính toán. Khi một model được xuất sang ONNX, nó được tuần tự hóa thành một định dạng ghi lại cấu trúc mạng (các layer, các kết nối) và các tham số (weights, biases) theo cách độc lập với framework. Điều này cho phép các inference engine được tinh chỉnh đặc biệt cho tăng tốc phần cứng—như ONNX Runtime—thực thi model một cách hiệu quả trên nhiều nền tảng, bao gồm Linux, Windows, macOS, Android và iOS.
Link to this sectionLợi ích chính khi sử dụng ONNX#
Việc áp dụng định dạng Open Neural Network Exchange mang lại nhiều lợi thế chiến lược cho các dự án AI:
- Khả năng tương tác giữa các framework: Các lập trình viên có thể chuyển đổi giữa các framework mà không bị phụ thuộc vào một hệ sinh thái duy nhất. Bạn có thể huấn luyện một model bằng Ultralytics Python API thân thiện với người dùng và xuất nó để sử dụng trong ứng dụng C++ hoặc môi trường JavaScript dựa trên web.
- Tối ưu hóa phần cứng: Nhiều nhà sản xuất phần cứng cung cấp các execution provider chuyên dụng giao tiếp với ONNX. Điều này có nghĩa là một tệp
.onnxduy nhất có thể được tăng tốc trên các GPU NVIDIA, CPU Intel hoặc NPU di động (Neural Processing Units) bằng cách sử dụng các công cụ như OpenVINO hoặc CoreML. - Inference nhanh hơn: ONNX Runtime áp dụng các tối ưu hóa đồ thị—như hợp nhất node (node fusion) và gấp hằng số (constant folding)—có thể giảm đáng kể độ trễ inference. Điều này rất cần thiết cho các ứng dụng thời gian thực như xe tự hành hoặc các dây chuyền sản xuất tốc độ cao.
- Đơn giản hóa triển khai: Thay vì duy trì các quy trình triển khai riêng biệt cho từng framework huấn luyện, các đội ngũ kỹ thuật có thể tiêu chuẩn hóa trên ONNX làm định dạng phân phối, giúp hợp lý hóa các quy trình ModelOps.
Link to this sectionCác ứng dụng trong thực tế#
Sự linh hoạt của ONNX khiến nó trở thành thành phần thiết yếu trong nhiều ngành công nghiệp đa dạng. Dưới đây là hai ví dụ cụ thể về ứng dụng của nó:
Link to this sectionEdge AI trên thiết bị di động#
Consider a mobile application designed for real-time crop health monitoring. The model might be trained on a powerful cloud server using a large dataset of plant images. However, the app needs to run offline on a farmer's smartphone. By exporting the trained model to ONNX, developers can integrate it into the mobile app using ONNX Runtime Mobile. This allows the phone's processor to run object detection locally, identifying pests or diseases instantly without needing an internet connection.
Link to this sectionInference trên web đa nền tảng#
In e-commerce, a "virtual try-on" feature might use pose estimation to overlay clothing on a user's webcam feed. Training this model might happen in Python, but the deployment target is a web browser. Using ONNX, the model can be converted and run directly in the user's browser via ONNX Runtime Web. This utilizes the client's device capabilities (WebGL or WebAssembly) to perform computer vision tasks, ensuring a smooth, privacy-preserving experience since video data never leaves the user's computer.
Link to this sectionSo sánh với các thuật ngữ liên quan#
Việc phân biệt ONNX với các định dạng và công cụ model khác là rất hữu ích:
- vs. TensorRT: Trong khi ONNX là một định dạng trao đổi, TensorRT là một inference engine và bộ tối ưu hóa dành riêng cho GPU NVIDIA. Một quy trình phổ biến bao gồm việc xuất model sang ONNX trước, sau đó phân tích cú pháp tệp ONNX đó vào TensorRT để đạt được thông lượng tối đa trên phần cứng NVIDIA.
- vs. TensorFlow SavedModel: SavedModel là định dạng tuần tự hóa gốc của TensorFlow. Mặc dù mạnh mẽ trong hệ sinh thái Google, nó ít tương thích rộng rãi hơn ONNX. Các công cụ thường được sử dụng để chuyển đổi SavedModel sang ONNX nhằm đạt được khả năng hỗ trợ nền tảng rộng hơn.
- vs. CoreML: CoreML là framework của Apple cho machine learning trên thiết bị. Mặc dù khác biệt, các model thường được chuyển đổi từ PyTorch sang ONNX, sau đó từ ONNX sang CoreML (hoặc trực tiếp) để chạy hiệu quả trên iPhone và iPad.
Link to this sectionXuất sang ONNX với Ultralytics#
Hệ sinh thái Ultralytics đơn giản hóa quy trình chuyển đổi các model tiên tiến như YOLO26 sang định dạng ONNX. Chức năng xuất được tích hợp trực tiếp vào thư viện, xử lý việc duyệt đồ thị phức tạp và ánh xạ operator một cách tự động.
Ví dụ sau đây minh họa cách xuất một model YOLO26 đã được huấn luyện sẵn sang định dạng ONNX để triển khai:
from ultralytics import YOLO
# Load the YOLO26n model (Nano version recommended for edge deployment)
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
# The 'dynamic' argument enables variable input sizes
path = model.export(format="onnx", dynamic=True)
print(f"Model exported successfully to: {path}")Sau khi xuất, tệp .onnx này có thể được sử dụng trong Ultralytics Platform để quản lý hoặc triển khai trực tiếp đến các thiết bị biên bằng ONNX Runtime, giúp việc triển khai thị giác máy tính hiệu suất cao trở nên khả thi trong hầu hết mọi môi trường.






