Chuyển đến nội dung

Xuất ONNX cho các Mô hình YOLO11

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

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

ONNX và ONNX Runtime

ONNX, viết tắt của Open Neural Network Exchange, là một dự án cộng đồng ban đầu được phát triển bởi Facebook và Microsoft. Sự phát triển liên tục của ONNX là một 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 này nhằm mục đích tạo ra một định dạng tệp mở được thiết kế để biểu diễn các mô hình máy học theo cách cho phép chúng được sử dụng trên các framework AI và phần cứng khác nhau.

Các mô hình ONNX có thể được sử dụng để chuyển đổi giữa các framework khác nhau một cách liền mạch. Ví dụ: một mô hình học sâu được huấn luyện trong PyTorch có thể được xuất sang định dạng ONNX và sau đó dễ dàng nhập vào TensorFlow.

ONNX

Ngoài ra, các mô hình ONNX có thể được sử dụng với ONNX Runtime. ONNX Runtime là một trình tăng tốc đa nền tảng linh hoạt cho các mô hình máy học, tương thích với các framework như PyTorch, TensorFlow, TFLite, scikit-learn, v.v.

ONNX Runtime tối ưu hóa việc thực thi các mô hình ONNX bằng cách tận dụng các khả năng cụ thể của phần cứng. Tối ưu hóa này cho phép các mô hình chạy hiệu quả và với hiệu suất cao trên nhiều nền tảng phần cứng khác nhau, bao gồm CPU, GPU và các bộ tăng tốc chuyên dụng.

ONNX với ONNX Runtime

Cho 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 mô hình và khả năng tương thích của máy học.

Các tính năng chính của mô hình ONNX

Khả năng của ONNX trong việc xử lý nhiều định dạng khác nhau có thể là nhờ các tính năng chính sau:

  • Biểu Diễn Mô Hình Chung: ONNX định nghĩa một tập hợp các toán tử chung (như tích chập, các lớp, v.v.) và một định dạng dữ liệu tiêu chuẩn. Khi một mô hình được chuyển đổi sang định dạng ONNX, kiến trúc và trọng số của nó sẽ được dịch sang biểu diễn chung này. Tính đồng nhất này đảm bảo rằng mô hình có thể được hiểu bởi bất kỳ framework nào hỗ trợ ONNX.

  • Kiểm Soát Phiên Bản và Khả Năng Tương Thích Ngược: ONNX duy trì một hệ thống kiểm soát phiên bản cho các toán tử của nó. Điều này đảm bảo rằng ngay cả khi tiêu chuẩn phát triển, các mô hình được tạo trong các phiên bản cũ hơn vẫn có thể sử dụng được. Khả năng tương thích ngược là một tính năng quan trọng giúp ngăn các mô hình trở nên lỗi thời một cách nhanh chóng.

  • Biểu Diễn Mô Hình Dạng Đồ Thị: ONNX biểu diễn các mô hình dưới dạng đồ thị tính toán. Cấu trúc dựa trên đồ thị này là một cách phổ quát để biểu diễn các mô hình học máy, trong đó các nút đại diện cho các phép toán hoặc tính toán và các cạnh đại diện cho các tensor luân chuyển giữa chúng. Định dạng này dễ dàng thích ứng với các framework khác nhau, vốn cũng biểu diễn các mô hình dưới dạng đồ thị.

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

Sử dụng phổ biến của ONNX

Trước khi đi sâu vào cách xuất các mô hình YOLO11 sang định dạng ONNX, hãy xem các mô hình ONNX thường được sử dụng ở đâu.

Triển khai trên CPU

Các mô hình ONNX thường được triển khai trên CPU do khả năng tương thích của chúng với ONNX Runtime. Runtime này được tối ưu hóa để thực thi trên CPU. Nó cải thiện đáng kể tốc độ suy luận và làm cho việc triển khai CPU theo thời gian thực trở nên khả thi.

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

Mặc dù các mô hình ONNX thường được sử dụng trên CPU, nhưng 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, đặc biệt là NVIDIA CUDA. Điều này cho phép thực thi hiệu quả trên GPU NVIDIA cho các tác vụ đòi hỏi sức mạnh tính toán cao.

  • Thiết Bị Di Động và Thiết Bị Cận Biên: ONNX mở rộng đến các thiết bị di động và thiết bị cận biên, hoàn hảo cho các tình huống suy luận theo thời gian thực và trên thiết bị. Nó nhẹ và tương thích với phần cứng cận biên.

  • Trình Duyệt Web: ONNX có thể chạy trực tiếp trong trình duyệt web, cung cấp năng lượng cho các ứng dụng AI dựa trên web tương tác và động.

Xuất mô hình YOLO11 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 trong triển khai bằng cách chuyển đổi các model YOLO11 sang định dạng ONNX. Ultralytics YOLO11 cung cấp một quy trình xuất đơn giản có thể cải thiện đáng kể hiệu suất model của bạn trên các nền tảng khác nhau.

Cài đặt

Để cài đặt gói cần thiết, hãy chạy:

Cài đặt

# Install the required package for YOLO11
pip install ultralytics

Để có hướng dẫn chi tiết và các phương pháp hay nhất liên quan đến quy trình cài đặt, hãy xem Hướng dẫn cài đặt YOLO11 của chúng tôi. Trong khi cài đặt các gói cần thiết cho YOLO11, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo Hướng dẫn về các vấn đề thường gặp của chúng tôi để biết các giải pháp và mẹo.

Cách sử dụng

Trước khi đi sâu vào hướng dẫn sử dụng, hãy nhớ xem qua phạm vi các mô hình YOLO11 do Ultralytics cung cấp. Điều này sẽ giúp bạn chọn mô hình phù hợp nhất cho các yêu cầu của dự án.

Cách sử dụng

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to ONNX format
model.export(format="onnx")  # creates 'yolo11n.onnx'

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

# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'

# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'

Các đối số xuất

Khi xuất mô hình YOLO11 của bạn sang định dạng ONNX, bạn có thể tùy chỉnh quy trình bằng cách sử dụng các đối số khác nhau để tối ưu hóa cho các nhu cầu triển khai cụ thể của bạn:

Đối số Loại Mặc định Mô tả
format str 'onnx' Dạng mục tiêu cho mô hình được xuất, xác định khả năng tương thích với các môi trường triển khai khác nhau.
imgsz int hoặc tuple 640 Kích thước hình ảnh mong muốn cho đầu vào của mô hình. Có thể là một số nguyên cho hình ảnh vuông hoặc một bộ giá trị (height, width) cho các kích thước cụ thể.
half bool False Cho phép lượng tử hóa FP16 (nửa độ chính xác), giảm kích thước mô hình và có khả năng tăng tốc độ suy luận trên phần cứng được hỗ trợ.
dynamic bool False Cho phép kích thước đầu vào động, tăng cường tính linh hoạt trong việc xử lý các kích thước hình ảnh khác nhau.
simplify bool True Đơn giản hóa đồ thị mô hình với onnxslim, có khả năng cải thiện hiệu suất và khả năng tương thích.
opset int None Chỉ định phiên bản ONNX opset để tương thích với các trình phân tích cú pháp và thời gian chạy ONNX khác nhau. Nếu không được đặt, sẽ sử dụng phiên bản được hỗ trợ mới nhất.
nms bool False Thêm Non-Maximum Suppression (NMS), rất cần thiết cho việc xử lý hậu kỳ phát hiện chính xác và hiệu quả.
batch int 1 Chỉ định kích thước suy luận theo lô của mô hình xuất hoặc số lượng hình ảnh tối đa mà mô hình đã xuất sẽ xử lý đồng thời ở chế độ predict chế độ.
device str None Chỉ định thiết bị để 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.

Triển khai các mô hình YOLO11 ONNX đã xuất

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

  • Tài liệu về ONNX Runtime Python API: Hướng dẫn này cung cấp thông tin cần thiết để tải và chạy các mô hình ONNX bằng ONNX Runtime.

  • Triển khai trên các thiết bị Edge: Hãy xem trang tài liệu này để biết các ví dụ khác nhau về triển khai các mô hình ONNX trên edge.

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

  • Triton Inference Server: Tìm hiểu cách triển khai các mô hình ONNX của bạn với Triton Inference Server của NVIDIA để có các triển khai hiệu suất cao, có khả năng mở rộng.

Tóm tắt

Trong hướng dẫn này, bạn đã học cách xuất các mô hình Ultralytics YOLO11 sang định dạng ONNX để tăng khả năng tương tác và hiệu suất của chúng trên nhiều nền tảng khác nhau. 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 hỗ trợ bởi Ultralytics YOLO11, cho phép bạn triển khai các mô hình của mình trong hầu hết mọi môi trường. Tùy thuộc vào nhu cầu cụ thể của bạn, bạn cũng có thể muốn khám phá các tùy chọn xuất khác như TensorRT để có hiệu suất GPU tối đa hoặc CoreML cho các 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 bạn muốn biết thêm về các tích hợp Ultralytics YOLO11 khác, hãy truy cập trang hướng dẫn tích hợp của chúng tôi. Bạn sẽ tìm thấy rất nhiều tài nguyên và thông tin chi tiết hữu ích ở đó.

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

Làm cách nào để xuất các mô hình YOLO11 sang định dạng ONNX bằng Ultralytics?

Để xuất các mô hình YOLO11 của bạn 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 the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to ONNX format
model.export(format="onnx")  # creates 'yolo11n.onnx'

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

# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'

# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'

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

Những ưu điểm khi sử dụng ONNX Runtime để triển khai các mô hình YOLO11 là gì?

Sử dụng ONNX Runtime để triển khai các mô hình YOLO11 mang lại một số lợi thế:

  • Khả năng tương thích đa nền tảng: ONNX Runtime hỗ trợ nhiều nền tảng khác nhau, chẳng hạn như Windows, macOS và Linux, đảm bảo các mô hình của bạn chạy trơn tru 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 cho CPU, GPU và các bộ tăng tốc chuyên dụng, mang lại khả năng suy luận hiệu suất cao.
  • Khả năng tương tác giữa các framework: Các mô hình được huấn luyện trong các framework phổ biến như PyTorch hoặc TensorFlow có thể dễ dàng được chuyển đổi sang định dạng ONNX và chạy bằng ONNX Runtime.
  • Tối ưu hóa hiệu suất: ONNX Runtime có thể cung cấp khả năng tăng tốc CPU lên đến 3 lần so với các mô hình PyTorch gốc, khiến nó trở nên lý tưởng cho các tình huống triển khai mà tài nguyên GPU bị hạn chế.

Tìm hiểu thêm bằng cách xem tài liệu về ONNX Runtime.

Những tùy chọn triển khai nào khả dụng cho các mô hình YOLO11 được xuất sang ONNX?

Các mô hình YOLO11 được xuất sang ONNX có thể được triển khai trên nhiều nền tảng khác nhau, bao gồm:

  • CPU: Sử dụng ONNX Runtime để tối ưu hóa suy luận trên CPU.
  • GPU: Tận dụng NVIDIA CUDA để tăng tốc GPU hiệu suất cao.
  • Thiết bị biên: Chạy các mô hình nhẹ trên các thiết bị biên và di động để suy luận theo thời gian thực, trên thiết bị.
  • Trình duyệt web: Thực thi các mô hình trực tiếp trong trình duyệt web cho các ứng dụng tương tác dựa trên web.
  • 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 khám phá hướng dẫn của chúng tôi về các tùy chọn triển khai mô hình.

Tại sao tôi nên sử dụng định dạng ONNX cho các mô hình Ultralytics YOLO11?

Sử dụng định dạng ONNX cho các mô hình Ultralytics YOLO11 mang lại nhiều lợi ích:

  • Khả năng tương tác: ONNX cho phép các mô hình được chuyển đổi giữa các framework học máy khác nhau một cách liền mạch.
  • Tối ưu hóa hiệu suất: ONNX Runtime có thể nâng cao hiệu suất mô hình bằng cách sử 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 khác nhau, cho phép bạn sử dụng cùng một mô hình 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 toàn 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 các mô hình YOLO11 sang ONNX.

Làm cách nào để khắc phục sự cố khi xuất các mô hình YOLO11 sang ONNX?

Khi xuất các mô hình YOLO11 sang ONNX, bạn có thể gặp phải các vấn đề thường gặp như sự không tương thích về các phần phụ thuộc hoặc các hoạt động không được hỗ trợ. Để khắc phục các sự cố này:

  1. Xác minh rằng bạn đã cài đặt đúng phiên bản của các phần phụ thuộc 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 các thông báo lỗi để tìm manh mối và tham khảo hướng dẫn Các vấn đề thường gặp của Ultralytics.
  4. Hãy thử sử dụng các đối số xuất khác nhau như simplify=True hoặc điều chỉnh opset phiên bản.
  5. Đối với các vấn đề về kích thước đầu vào động, hãy đặt dynamic=True trong quá trình xuất.

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



📅 Đã tạo 1 năm trước ✏️ Cập nhật 4 tháng trước

Bình luận