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ế để biểu diễn các mô hình học máy, cho phép tính tương thích giữa nhiều framework và công cụ AI khác nhau. Nó đóng vai trò như một bộ dịch vạn năng cho học sâu, cho phép các lập trình viên xây dựng mô hình trong một framework—chẳng hạn như PyTorch, TensorFlow, hoặc Scikit-learn—và triển khai chúng một cách mượt mà trong một môi trường khác được tối ưu hóa cho quá trình suy luận. Bằng cách định nghĩa một tập hợp các toán tử chung và một định dạng tệp chuẩn, ONNX loại bỏ nhu cầu sử dụng các tập lệnh chuyển đổi phức tạp, tùy chỉnh vốn trước đây từng cần thiết để đưa các mô hình từ giai đoạn nghiên cứu sang giai đoạn sản xuất. Tính linh hoạt này đóng vai trò cốt lõi đố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à 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.
Vai 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 các công cụ khác nhau cho các giai đoạn khác nhau trong vòng đời phát triển. Một nhà khoa học dữ liệu có thể ưu tiên tính 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 được tối ưu hóa của TensorRT hoặc OpenVINO để triển khai. Nếu không có một định dạng trao đổi chuẩn, việc chuyển đổi một mô hình giữa các hệ sinh thái này sẽ trở nên khó khăn và dễ phát sinh lỗi.
ONNX thu hẹp khoảng cách này bằng cách cung cấp một định nghĩa chia sẻ về đồ thị tính toán. Khi một mô hình được xuất sang ONNX, nó sẽ được tuần tự hóa thành một định dạng nắm bắt cấu trúc mạng (các lớp, kết nối) và các tham số (trọng số, độ lệch) theo cách độc lập với framework. Điều này cho phép các công cụ suy luận được tinh chỉnh riêng cho việc tăng tốc phần cứng—chẳng hạn như ONNX Runtime—thực thi mô hình một cách hiệu quả trên nhiều nền tảng, bao gồm Linux, Windows, macOS, Android và iOS.
Lợ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:
- Tính tương thích 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 mô hình bằng cách sử dụng Ultralytics Python API thân thiện với người dùng và xuất nó để sử dụng trong một ứng dụng C++ hoặc một 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 nhà cung cấp thực thi chuyên biệt tương thích 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 GPU NVIDIA, CPU Intel hoặc các NPU di động (Bộ xử lý thần kinh) bằng cách sử dụng các công cụ như OpenVINO hoặc CoreML. - Suy luận nhanh hơn: ONNX Runtime áp dụng các tối ưu hóa đồ thị—chẳng hạn như hợp nhất nút và gấp hằng số—có thể làm giảm đáng kể độ trễ suy luận. Đ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 dây chuyền sản xuất tốc độ cao.
- Đơn giản hóa việc triển khai: Thay vì duy trì các đường ống 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 ONNX làm định dạng phân phối, giúp hợp lý hóa các quy trình ModelOps.
Cá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ó:
Edge AI trên thiết bị di động#
Hãy xem xét một ứng dụng di động được thiết kế để giám sát sức khỏe cây trồng theo thời gian thực. Mô hình có thể được huấn luyện trên một máy chủ đám mây mạnh mẽ bằng cách sử dụng tập dữ liệu lớn chứa hình ảnh thực vật. Tuy nhiên, ứng dụng cần chạy ngoại tuyến trên điện thoại thông minh của người nông dân. Bằng cách xuất mô hình đã huấn luyện sang ONNX, các lập trình viên có thể tích hợp nó vào ứng dụng di động bằng ONNX Runtime Mobile. Điều này cho phép bộ xử lý của điện thoại chạy phát hiện đối tượng cục bộ, xác định sâu bệnh ngay lập tức mà không cần kết nối internet.
Inference trên web đa nền tảng#
Trong thương mại điện tử, tính năng "thử đồ ảo" có thể sử dụng ước tính tư thế để phủ quần áo lên nguồn cấp dữ liệu webcam của người dùng. Quá trình huấn luyện mô hình này có thể diễn ra bằng Python, nhưng mục tiêu triển khai lại là trình duyệt web. Sử dụng ONNX, mô hình có thể được chuyển đổi và chạy trực tiếp trong trình duyệt của người dùng thông qua ONNX Runtime Web. Điều này tận dụng các khả năng của thiết bị khách (WebGL hoặc WebAssembly) để thực hiện các tác vụ thị giác máy tính, đảm bảo trải nghiệm mượt mà và bảo mật vì dữ liệu video không bao giờ rời khỏi máy tính của người dùng.
So 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:
- So với TensorRT: Trong khi ONNX là một định dạng trao đổi, TensorRT lại là một công cụ suy luận 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 mô hình sang ONNX trước, sau đó phân tích cú pháp tệp ONNX đó sang TensorRT để đạt được thông lượng tối đa trên phần cứng NVIDIA.
- So với TensorFlow SavedModel: SavedModel là định dạng tuần tự hóa gốc cho TensorFlow. Mặc dù mạnh mẽ trong hệ sinh thái Google, nó ít tương thích phổ biến hơn so với ONNX. Các công cụ thường tồn tại để chuyển đổi SavedModels sang ONNX nhằm đạt được khả năng hỗ trợ nền tảng rộng rãi hơn.
- So với CoreML: CoreML là framework của Apple dành cho học máy trên thiết bị. Mặc dù khác biệt, các mô hình thường xuyên được chuyển đổi từ PyTorch sang ONNX, rồi từ ONNX sang CoreML (hoặc trực tiếp) để chạy hiệu quả trên iPhone và iPad.
Xuất sang ONNX với Ultralytics#
Hệ sinh thái Ultralytics đơn giản hóa quá trình chuyển đổi các mô hình tiên tiến như YOLO26 sang định dạng ONNX. Tính năng xuất được tích hợp trực tiếp vào thư viện, tự động xử lý việc duyệt qua đồ thị phức tạp và ánh xạ toán tử.
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 được xuất, tệp .onnx này có thể được sử dụng trong Ultralytics Platform để quản lý hoặc được triển khai trực tiếp tới các thiết bị biên bằng cách sử dụng ONNX Runtime, giúp thị giác máy tính hiệu suất cao có thể tiếp cận được trong hầu hết mọi môi trường.






