Chuyển đến nội dung

Xuất mô hình với Ultralytics YOLO

Hệ sinh thái và tích hợp Ultralytics YOLO

Giới thiệu

Mục tiêu cuối cùng của việc huấn luyện một mô hình là triển khai nó cho các ứng dụng thực tế. Chế độ xuất trong Ultralytics YOLO26 cung cấp một loạt các tùy chọn linh hoạt để xuất mô hình đã huấn luyện của bạn sang các định dạng khác nhau, giúp nó có thể triển khai trên nhiều nền tảng và thiết bị khác nhau. Hướng dẫn toàn diện này nhằm mục đích hướng dẫn bạn qua các sắc thái của việc xuất mô hình, trình bày cách đạt được khả năng tương thích và hiệu suất tối đa.



Xem: Cách xuất mô hình Ultralytics YOLO đã huấn luyện tùy chỉnh và chạy suy luận trực tiếp trên Webcam.

Tại sao chọn Chế độ xuất của YOLO26?

  • Tính linh hoạt: Xuất sang nhiều định dạng, bao gồm ONNX, TensorRT, CoreML và nhiều định dạng khác.
  • Hiệu suất: Tăng tốc GPU lên đến 5 lần với TensorRT và tăng tốc CPU lên đến 3 lần với ONNX hoặc OpenVINO.
  • Khả năng tương thích: Làm cho mô hình của bạn có thể triển khai phổ biến trên nhiều môi trường phần cứng và phần mềm.
  • Dễ sử dụng: CLI và Python API đơn giản để xuất mô hình nhanh chóng và dễ dàng.

Các tính năng chính của Chế độ Xuất

Dưới đây là một số chức năng nổi bật:

  • Xuất chỉ với một cú nhấp chuột: Các lệnh đơn giản để xuất sang các định dạng khác nhau.
  • Xuất hàng loạt: Xuất các mô hình có khả năng suy luận theo lô.
  • Tối ưu hóa suy luận: Các mô hình đã xuất được tối ưu hóa để có thời gian suy luận nhanh hơn.
  • Video hướng dẫn: Các hướng dẫn chuyên sâu để có trải nghiệm xuất mượt mà.

Mẹo

  • Xuất sang ONNX hoặc OpenVINO để tăng tốc CPU lên đến 3 lần.
  • Xuất sang TensorRT để tăng tốc GPU lên đến 5 lần.

Ví dụ sử dụng

Xuất một mô hình YOLO26n sang một định dạng khác như ONNX hoặc TensorRT. Xem phần Đối số bên dưới để biết danh sách đầy đủ các đối số xuất.

Ví dụ

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

Các đối số

Bảng này trình bày chi tiết các cấu hình và tùy chọn có sẵn để xuất các mô hình YOLO sang các định dạng khác nhau. Các cài đặt này rất quan trọng để tối ưu hóa hiệu suất, kích thước và khả năng tương thích của mô hình đã xuất trên các nền tảng và môi trường khác nhau. Cấu hình phù hợp đảm bảo rằng mô hình đã sẵn sàng để triển khai trong ứng dụng dự kiến với hiệu quả tối ưu.

Đối sốLoạiMặc địnhMô tả
formatstr'torchscript'Định dạng mục tiêu cho mô hình đã xuất, chẳng hạn như 'onnx', 'torchscript', 'engine' (TensorRT) hoặc các định dạng khác. Mỗi định dạng cho phép khả năng tương thích với các môi trường triển khai.
imgszint hoặc tuple640Kí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 (ví dụ: 640 cho 640×640) hoặc một tuple (height, width) cho các kích thước cụ thể.
kerasboolFalseCho phép xuất sang định dạng Keras cho TensorFlow SavedModel, cung cấp khả năng tương thích với TensorFlow serving và các API.
optimizeboolFalseÁp dụng tối ưu hóa cho thiết bị di động khi xuất sang TorchScript, có khả năng giảm kích thước mô hình và cải thiện hiệu suất suy luận. Không tương thích với định dạng NCNN hoặc thiết bị CUDA.
halfboolFalseCho phép lượng tử hóa FP16 (bán 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ợ. Không tương thích với lượng tử hóa INT8 hoặc CPU -chỉ xuất. Chỉ khả dụng cho một số định dạng nhất định, ví dụ: ONNX (xem bên dưới).
int8boolFalseKích hoạt lượng tử hóa INT8, nén thêm mô hình và tăng tốc suy luận với mức giảm độ chính xác tối thiểu, chủ yếu dành cho các thiết bị biên. Khi được sử dụng với TensorRT, sẽ thực hiện lượng tử hóa sau huấn luyện (PTQ).
dynamicboolFalseCho phép kích thước đầu vào động cho các bản export ONNX, TensorRT và OpenVINO, 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. Tự động đặt thành True Khi sử dụng TensorRT với INT8.
simplifyboolTrueĐơn giản hóa đồ thị mô hình cho xuất ONNX với onnxslim, có khả năng cải thiện hiệu suất và khả năng tương thích với các công cụ suy luận.
opsetintNoneChỉ đị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.
workspacefloat hoặc NoneNoneĐặt kích thước không gian làm việc tối đa tính bằng GiB cho TensorRT tối ưu hóa, cân bằng việc sử dụng bộ nhớ và hiệu suất. Sử dụng None để TensorRT tự động phân bổ lên đến mức tối đa của thiết bị.
nmsboolFalseThêm Non-Maximum Suppression (NMS) vào mô hình đã export khi được hỗ trợ (xem Định dạng Export), cải thiện hiệu quả xử lý hậu kỳ detect. Không khả dụng cho các mô hình end2end.
batchint1Chỉ định kích thước lô suy luận 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 trong predict mode. Đối với xuất Edge TPU, giá trị này tự động được đặt thành 1.
devicestrNoneChỉ định thiết bị để xuất: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps) hoặc DLA cho NVIDIA Jetson (device=dla:0 hoặc device=dla:1). Xuất TensorRT tự động sử dụng GPU.
datastr'coco8.yaml'Đường dẫn đến tập dữ liệu tệp cấu hình, cần thiết cho việc hiệu chỉnh lượng tử hóa INT8. Nếu không được chỉ định khi bật INT8, coco8.yaml sẽ được sử dụng làm phương án dự phòng để hiệu chỉnh.
fractionfloat1.0Chỉ định tỷ lệ phần trăm của tập dữ liệu được sử dụng để hiệu chỉnh lượng tử hóa INT8. Cho phép hiệu chỉnh trên một tập hợp con của toàn bộ tập dữ liệu, hữu ích cho các thử nghiệm hoặc khi tài nguyên bị hạn chế. Nếu không được chỉ định khi bật INT8, toàn bộ tập dữ liệu sẽ được sử dụng.
end2endboolNoneGhi đè chế độ đầu cuối trong YOLO các mô hình hỗ trợ NMS suy luận không cần (YOLO26, YOLOv10 ). Đặt nó thành False cho phép bạn xuất các mô hình này để tương thích với hệ thống truyền thống. NMS quy trình xử lý hậu kỳ dựa trên.

Việc điều chỉnh các tham số này cho phép tùy chỉnh quy trình xuất để phù hợp với các yêu cầu cụ thể, chẳng hạn như môi trường triển khai, giới hạn phần cứng và mục tiêu hiệu suất. Việc chọn định dạng và cài đặt phù hợp là điều cần thiết để đạt được sự cân bằng tốt nhất giữa kích thước mô hình, tốc độ và độ chính xác.

Định dạng xuất

Các định dạng xuất YOLO26 có sẵn được liệt kê trong bảng dưới đây. Bạn có thể xuất sang bất kỳ định dạng nào bằng cách sử dụng format đối số, ví dụ: format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc xác thực trực tiếp trên các mô hình đã xuất, tức là, yolo predict model=yolo26n.onnx. Các ví dụ sử dụng được hiển thị cho mô hình của bạn sau khi quá trình xuất hoàn tất.

Định dạngformat Đối sốMô hìnhMetadata (Siêu dữ liệu)Các đối số
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, device
Axeleraaxelerayolo26n_axelera_model/imgsz, int8, data, fraction, device

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

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

Việc xuất mô hình YOLO26 sang định dạng ONNX rất đơn giản với Ultralytics. Nó cung cấp cả phương pháp python và CLI để xuất mô hình.

Ví dụ

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

Để biết thêm chi tiết về quy trình, bao gồm các tùy chọn nâng cao như xử lý các kích thước đầu vào khác nhau, hãy tham khảo hướng dẫn tích hợp ONNX.

Những lợi ích của việc sử dụng TensorRT để xuất mô hình là gì?

Sử dụng TensorRT để xuất mô hình mang lại những cải thiện đáng kể về hiệu suất. Các mô hình YOLO26 được xuất sang TensorRT có thể đạt được tốc độ tăng tốc GPU lên tới 5 lần, làm cho nó lý tưởng cho các ứng dụng suy luận thời gian thực.

  • Tính linh hoạt: Tối ưu hóa các mô hình cho một thiết lập phần cứng cụ thể.
  • Tốc độ: Đạt được khả năng suy luận nhanh hơn thông qua các tối ưu hóa nâng cao.
  • Khả năng tương thích: Tích hợp mượt mà với phần cứng NVIDIA.

Để tìm hiểu thêm về tích hợp TensorRT, hãy xem hướng dẫn tích hợp TensorRT.

Làm cách nào để bật lượng tử hóa INT8 khi xuất mô hình YOLO26 của tôi?

Lượng tử hóa INT8 là một cách tuyệt vời để nén mô hình và tăng tốc suy luận, đặc biệt là trên các thiết bị biên. Dưới đây là cách bạn có thể bật lượng tử hóa INT8:

Ví dụ

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo26n.pt format=engine int8=True # export TensorRT model with INT8 quantization

Lượng tử hóa INT8 có thể được áp dụng cho nhiều định dạng khác nhau, chẳng hạn như TensorRT, OpenVINO, và CoreML. Để có kết quả lượng tử hóa tối ưu, hãy cung cấp một tập dữ liệu sử dụng data tham số.

Tại sao kích thước đầu vào động lại quan trọng khi xuất mô hình?

Kích thước đầu vào động cho phép mô hình đã xuất xử lý các kích thước hình ảnh khác nhau, mang lại sự linh hoạt và tối ưu hóa hiệu quả xử lý cho các trường hợp sử dụng khác nhau. Khi xuất sang các định dạng như ONNX hoặc TensorRT, việc bật kích thước đầu vào động đảm bảo rằng mô hình có thể thích ứng với các hình dạng đầu vào khác nhau một cách liền mạch.

Để bật tính năng này, hãy sử dụng dynamic=True cờ trong khi xuất:

Ví dụ

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo26n.pt format=onnx dynamic=True

Định cỡ đầu vào động đặc biệt hữu ích cho các ứng dụng mà kích thước đầu vào có thể thay đổi, chẳng hạn như xử lý video hoặc khi xử lý hình ảnh từ các nguồn khác nhau.

Những đối số xuất quan trọng nào cần xem xét để tối ưu hóa hiệu suất mô hình?

Hiểu và định cấu hình các đối số xuất rất quan trọng để tối ưu hóa hiệu suất mô hình:

  • format: Định dạng mục tiêu cho mô hình đã xuất (ví dụ: onnx, torchscript, tensorflow).
  • imgsz: Kích thước hình ảnh mong muốn cho đầu vào mô hình (ví dụ: 640 hoặc (height, width)).
  • half: Cho phép lượng tử hóa FP16, giảm kích thước mô hình và có khả năng tăng tốc suy luận.
  • optimize: Áp dụng các tối ưu hóa cụ thể cho thiết bị di động hoặc môi trường bị hạn chế.
  • int8: Cho phép lượng tử hóa INT8, rất có lợi cho edge AI triển khai.

Để triển khai trên các nền tảng phần cứng cụ thể, hãy cân nhắc sử dụng các định dạng xuất chuyên dụng như TensorRT cho NVIDIA GPU, CoreML cho các thiết bị Apple hoặc Edge TPU cho các thiết bị Google Coral.

Các tensor đầu ra đại diện cho điều gì trong các mô hình YOLO đã xuất?

Khi bạn xuất một mô hình YOLO sang các định dạng như ONNX hoặc TensorRT, cấu trúc tensor đầu ra phụ thuộc vào tác vụ của mô hình. Việc hiểu các đầu ra này rất quan trọng đối với các triển khai suy luận tùy chỉnh.

Cho mô hình detect (ví dụ: yolo26n.pt), đầu ra thường là một tensor duy nhất có hình dạng như (batch_size, 4 + num_classes, num_predictions) trong đó các kênh đại diện cho tọa độ hộp cộng với điểm số trên mỗi lớp, và num_predictions phụ thuộc vào độ phân giải đầu vào khi xuất (và có thể động).

Cho mô hình segment (ví dụ: yolo26n-seg.pt), bạn thường sẽ nhận được hai đầu ra: tensor đầu tiên có hình dạng như (batch_size, 4 + num_classes + mask_dim, num_predictions) (hộp, điểm số lớp và hệ số mặt nạ), và tensor thứ hai có hình dạng như (batch_size, mask_dim, proto_h, proto_w) chứa các nguyên mẫu mặt nạ được sử dụng với các hệ số để tạo mặt nạ thể hiện. Kích thước phụ thuộc vào độ phân giải đầu vào khi xuất (và có thể động).

Cho mô hình pose (ví dụ: yolo26n-pose.pt), tensor đầu ra thường có hình dạng như (batch_size, 4 + num_classes + keypoint_dims, num_predictions), ở đâu keypoint_dims phụ thuộc vào đặc tả pose (ví dụ: số lượng điểm chính và liệu độ tin cậy có được bao gồm hay không), và num_predictions phụ thuộc vào độ phân giải đầu vào khi xuất (và có thể động).

Các ví dụ trong ví dụ suy luận ONNX minh họa cách xử lý các đầu ra này cho từng loại mô hình.



📅 Được tạo 2 năm trước ✏️ Cập nhật 2 ngày trước
glenn-jocherBurhan-QUltralyticsAssistantambitious-octopusKayzwerraimbekovmpderrengerY-T-Gjk4eMatthewNoyceRizwanMunawar

Bình luận