Meet YOLO26: next-gen vision AI.

Link to this sectionXuất Model với Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Link to this sectionGiới thiệu#

Mục tiêu cuối cùng của việc huấn luyện một model là triển khai nó cho các ứng dụng thực tế. Chế độ Export trong Ultralytics YOLO26 cung cấp hàng loạt tùy chọn linh hoạt để xuất model đã huấn luyện sang các định dạng khác nhau, giúp model 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 giới thiệu cho bạn các sắc thái của việc xuất model, minh họa cách đạt được khả năng tương thích và hiệu suất tối đa.



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

Link to this sectionTại sao nên chọn chế độ Export 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: Giúp model của bạn có thể triển khai phổ quát 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 giúp việc xuất model nhanh chóng và trực diện.

Link to this sectionCác tính năng chính của chế độ Export#

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

  • Xuất một lần bấm: Các lệnh đơn giản để xuất sang các định dạng khác nhau.
  • Xuất theo lô: Xuất các model có khả năng suy luận theo lô (batch inference).
  • Suy luận được tối ưu hóa: Các model đã 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 model 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.

Link to this sectionVí dụ Sử dụng#

Xuất model YOLO26n sang một định dạng khác như ONNX hoặc TensorRT. Xem phần Arguments bên dưới để có danh sách đầy đủ các tham 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")

Link to this sectionTham 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 model YOLO sang các định dạng khác nhau. Những 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 model đã xuất trên nhiều nền tảng và môi trường. Cấu hình đúng cách đảm bảo model 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 model đã 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 deployment environments khác nhau.
imgszint hoặc tuple640Kích thước ảnh mong muốn cho đầu vào của model. Có thể là một số nguyên cho ả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 model và cải thiện hiệu suất inference. Không tương thích với định dạng NCNN hoặc các thiết bị CUDA. Đối với DEEPX, nó kích hoạt tối ưu hóa trình biên dịch cao hơn giúp giảm độ trễ suy luận và tăng thời gian biên dịch.
quantizeint hoặc strNoneĐộ chính xác lượng tử hóa: 16 (FP16, giảm kích thước model và có thể tăng tốc suy luận trên phần cứng được hỗ trợ) hoặc 8 (INT8/PTQ, nén model thêm nữa với mức giảm độ chính xác tối thiểu, chủ yếu dành cho thiết bị biên; cần dữ liệu/tỷ lệ data/fraction hiệu chỉnh); 32/không thiết lập là FP32. Các định dạng xuất hỗ trợ độ chính xác trọng số/kích hoạt hỗn hợp cũng chấp nhận ký hiệu 'w8a8'/'w16a16'/'w8a16'. Thay thế cho các cờ half/int8 đã lỗi thời (half=True16, int8=True8, vẫn được chấp nhận kèm cảnh báo lỗi thời). Chỉ các độ chính xác được định dạng mục tiêu hỗ trợ mới được cho phép (xem bên dưới).
dynamicboolFalseCho phép kích thước đầu vào động đối với các định dạng xuất TorchScript, ONNX, OpenVINO, TensorRT và CoreML, giúp tăng tính linh hoạt khi xử lý các kích thước ảnh khác nhau.
simplifyboolTrueĐơn giản hóa đồ thị model cho các bản 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 opset ONNX để tương thích với các trình phân tích và runtime ONNX khác nhau. Nếu không được đặt, phiên bản mới nhất được hỗ trợ sẽ được sử dụng.
workspacefloat hoặc NoneNoneĐặt kích thước không gian làm việc tối đa theo GiB cho các tối ưu hóa TensorRT, cân bằng giữa mức sử dụng bộ nhớ và hiệu suất. Sử dụng None để TensorRT tự động cấp phát lên đến mức tối đa của thiết bị.
nmsboolFalseThêm Non-Maximum Suppression (NMS) vào model đã xuất khi được hỗ trợ (xem Export Formats), giúp cải thiện hiệu quả hậu xử lý phát hiện. Không khả dụng cho các model end2end.
batchint1Chỉ định kích thước suy luận theo lô của model xuất hoặc số lượng ảnh tối đa mà model xuất sẽ xử lý đồng thời trong chế độ predict. Đối với các bản xuất Edge TPU, tham số này được tự động đặt thành 1.
devicestrNoneChỉ định thiết bị để xuất: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps), Huawei Ascend NPU (device=npu hoặc device=npu:0), hoặc DLA cho NVIDIA Jetson (device=dla:0 hoặc device=dla:1). Các bản xuất TensorRT tự động sử dụng GPU, nhưng TensorRT 11.0 không hỗ trợ DLA.
datastrNoneĐường dẫn đến tệp cấu hình dataset, rất cần thiết cho việc hiệu chuẩn lượng tử hóa INT8. Nếu không được chỉ định khi INT8 được bật, Ultralytics sẽ chọn một tập dữ liệu hiệu chuẩn đặc thù cho tác vụ khi cần thiết, hoặc sử dụng tập dữ liệu mặc định cho tác vụ của model.
fractionfloat1.0Chỉ định phân đoạn của dataset để sử dụng cho hiệu chuẩn lượng tử hóa INT8. Cho phép hiệu chuẩn trên một tập hợp con của toàn bộ dataset, hữu ích cho các thử nghiệm hoặc khi tài nguyên hạn chế. Nếu không được chỉ định trong khi INT8 đã được bật, toàn bộ dataset sẽ được sử dụng.
end2endboolNoneGhi đè chế độ end-to-end trong các model YOLO hỗ trợ suy luận không cần NMS (YOLO26, YOLOv10). Đặt thành False cho phép bạn xuất các model này để tương thích với quy trình hậu xử lý dựa trên NMS truyền thống. Xem End-to-End Detection guide để biết chi tiết.

Đ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, hạn chế về phần cứng và mục tiêu hiệu suất. Việc chọn đúng định dạng và cài đặt là cần thiết để đạt được sự cân bằng tốt nhất giữa kích thước model, tốc độ và accuracy.

Link to this sectionCác định dạng xuất#

Các định dạng xuất YOLO26 có sẵn nằm 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 tham số format, ví dụ: format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc kiểm chứng trực tiếp trên các model đã xuất, ví dụ: yolo predict model=yolo26n.onnx. Các ví dụ sử dụng được hiển thị cho model của bạn sau khi quá trình xuất hoàn tất. Các model cũng có thể được xuất trực tiếp từ trình duyệt trên Ultralytics Platform mà không cần bất kỳ thiết lập cục bộ nào.

Định dạngTham số formatMô hìnhMetadataTham số
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, quantize, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device

Link to this sectionCác tùy chọn lượng tử hóa#

Sử dụng đối số quantize để yêu cầu độ chính xác khi xuất model. Các giá trị chuỗi không phân biệt chữ hoa chữ thường và Ultralytics sẽ chuẩn hóa các bí danh được chấp nhận trước khi xuất:

Giá trị yêu cầuGiá trị chuẩn hóaÝ nghĩa
8, "8", "int8", "w8a8"8Trọng số và kích hoạt INT8
16, "16", "fp16", "w16a16"16Trọng số và kích hoạt FP16
32, "32", "fp32", "w32a32"32Xuất FP32; độ chính xác giống như khi để trống quantize
"w8a16""w8a16"Trọng số INT8 với kích hoạt 16-bit (FP16; INT16 trên LiteRT)
"w8a32""w8a32"Trọng số INT8 với kích hoạt FP32 (LiteRT dynamic INT8, không cần hiệu chuẩn)

Các cờ kế thừa half=Trueint8=True vẫn được chấp nhận kèm cảnh báo lỗi thời và được chuyển tiếp đến quantize=16quantize=8.

Không phải định dạng xuất nào cũng hỗ trợ mọi độ chính xác. Các yêu cầu quantize rõ ràng sẽ tạo ra độ chính xác đó hoặc thất bại trước khi xuất:

Định dạngFP32 (32/không đặt)FP16 (16)INT8 (8)W8A16 ("w8a16")Lưu ý
PyTorchN/AN/AN/AĐịnh dạng huấn luyện/checkpoint gốc.
TorchScript✅ Chỉ dành cho GPUXuất TorchScript FP16 yêu cầu device=0; xuất trên CPU là FP32.
ONNXINT8 sử dụng phương pháp lượng tử hóa tĩnh và dữ liệu hiệu chuẩn của ONNX Runtime.
OpenVINOINT8 sử dụng phương pháp lượng tử hóa hậu huấn luyện NNCF.
TensorRTINT8 cần dữ liệu hiệu chuẩn đại diện.
CoreMLCoreML INT8 là lượng tử hóa trọng số; W8A16 sử dụng trọng số INT8 với activation FP16.
TF SavedModelXuất INT8 sử dụng phương pháp hiệu chuẩn của TensorFlow.
TF GraphDefKhông thực hiện chuyển đổi độ chính xác tại thời điểm xuất.
Edge TPU✅ tự độngEdge TPU yêu cầu INT8; nó sẽ tự động được kích hoạt khi không được thiết lập.
PaddlePaddleKhông thực hiện chuyển đổi độ chính xác tại thời điểm xuất.
MNNINT8 là lượng tử hóa trọng số thông qua chuyển đổi MNN.
NCNNĐịnh dạng runtime dành cho thiết bị di động/nhúng.
IMX500✅ tự độngIMX500 yêu cầu lượng tử hóa; INT8 sẽ tự động được kích hoạt khi không được thiết lập.
RKNN✅ phụ thuộc vào chipRK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B hỗ trợ FP16 hoặc INT8; các biến thể RV1103/RV1106 chỉ hỗ trợ INT8.
ExecuTorchKhông thực hiện chuyển đổi độ chính xác tại thời điểm xuất.
Axelera✅ tự độngXuất Axelera yêu cầu INT8; nó sẽ tự động được kích hoạt khi không được thiết lập.
DEEPX✅ tự độngXuất DEEPX yêu cầu INT8; nó sẽ tự động được kích hoạt khi không được thiết lập.
Qualcomm QNN✅ tự độngXuất QNN HTP được cố định ở trọng số INT8 với activation 16-bit.
LiteRTINT8 tĩnh (8) và "w8a16" (trọng số int8 + kích hoạt int16) sử dụng dữ liệu hiệu chuẩn; cũng hỗ trợ "w8a32" dynamic INT8 (không cần hiệu chuẩn). quantize=16 không phải là một kiểu export riêng biệt; một model FP32 chạy ở chế độ FP16 tại thời điểm thực thi thông qua GPU delegate.

Đối với các bản export INT8 và W8A16, hãy cung cấp dữ liệu hiệu chuẩn đại diện bằng data, ví dụ data="coco8.yaml", trừ khi tài liệu tích hợp mục tiêu có quy định mặc định hoặc hành vi tự động kích hoạt. Lược đồ "w8a32" (dynamic INT8) của LiteRT không cần dữ liệu hiệu chuẩn.

Link to this sectionCâu hỏi thường gặp#

Link to this sectionLàm thế nào để xuất model YOLO26 sang định dạng ONNX?#

Việc xuất model 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 model.

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")

Để 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 ONNX integration guide.

Link to this sectionLợi ích của việc sử dụng TensorRT để xuất model là gì?#

Sử dụng TensorRT để xuất model mang lại những cải thiện hiệu suất đáng kể. Các model YOLO26 được xuất sang TensorRT có thể đạt tốc độ GPU nhanh hơn tới 5 lần, rất 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 model cho một thiết lập phần cứng cụ thể.
  • Tốc độ: Đạt được 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ề việc tích hợp TensorRT, hãy xem TensorRT integration guide.

Link to this sectionLàm thế nào để bật lượng tử hóa INT8 khi xuất model YOLO26 của tôi?#

Lượng tử hóa INT8 là một cách tuyệt vời để nén model và tăng tốc suy luận, đặc biệt là trên các thiết bị edge. 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="onnx", quantize=8, data="coco8.yaml")

Lượng tử hóa INT8 có thể được áp dụng cho các định dạng như ONNX, TensorRT, OpenVINO, CoreMLRockchip RKNN. Để có kết quả lượng tử hóa tối ưu, hãy cung cấp một tập dữ liệu đại diện bằng tham số data. Xem Các tùy chọn lượng tử hóa để biết các giá trị quantize được chấp nhận và các định dạng hỗ trợ.

Link to this sectionTại sao kích thước đầu vào động lại quan trọng khi xuất model?#

Kích thước đầu vào động cho phép model đã xuất xử lý các kích thước ả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 model 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 cờ dynamic=True trong quá trình xuất:

Ví dụ
from ultralytics import YOLO

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

Việc đặt kích thướ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.

Link to this sectionCác tham số xuất chính cần cân nhắc để tối ưu hóa hiệu suất model là gì?#

Việc hiểu và cấu hình các tham số xuất là rất quan trọng để tối ưu hóa hiệu suất model:

  • format: Định dạng mục tiêu cho model đã xuất (ví dụ: onnx, torchscript, tensorflow).
  • imgsz: Kích thước ảnh mong muốn cho đầu vào của model (ví dụ: 640 hoặc (height, width)).
  • quantize: Độ chính xác lượng tử hóa, chẳng hạn như 8/"int8", 16/"fp16", 32/"fp32", hoặc các lược đồ trọng số/kích hoạt hỗn hợp "w8a16""w8a32" (LiteRT dynamic INT8) trên các định dạng được hỗ trợ. Xem Tùy chọn Lượng tử hóa.
  • optimize: Áp dụng các tối ưu hóa cụ thể cho môi trường di động hoặc môi trường bị hạn chế.

Để 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 GPU NVIDIA, CoreML cho thiết bị Apple, hoặc Edge TPU cho thiết bị Google Coral.

Link to this sectionCác tensor đầu ra đại diện cho cái gì trong các model YOLO đã xuất?#

Khi bạn xuất một model 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 model. Việc hiểu các đầu ra này là rất quan trọng cho việc triển khai suy luận tùy chỉnh.

Đối với các mô hình phát hiện YOLO26 (ví dụ: yolo26n.pt), tính năng xuất end-to-end được bật theo mặc định trong các định dạng hỗ trợ nó, vì vậy đầu ra có cấu trúc dạng (batch_size, max_detections, 6) với các giá trị [x1, y1, x2, y2, confidence, class_id]. Với max_det=300 mặc định, cấu trúc này thường là (batch_size, 300, 6). Một số định dạng bị hạn chế sẽ tự động quay trở lại bố cục đầu ra truyền thống khi các toán tử end-to-end không được hỗ trợ.

Đối với các mô hình phát hiện không phải end-to-end, hoặc các mô hình YOLO26 được xuất với end2end=False, đầu ra thường là một tensor đơn lẻ có cấu trúc (batch_size, 4 + num_classes, num_predictions), trong đó các kênh đại diện cho tọa độ khung hình cộng với điểm số theo từng lớp, và num_predictions phụ thuộc vào độ phân giải đầu vào khi xuất (và có thể thay đổi linh hoạt).

Đối với segmentation models (ví dụ: yolo26n-seg.pt), bạn thường sẽ nhận được hai đầu ra: tensor thứ nhất có hình dạng (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 (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 ra các mặt nạ thể hiện. Kích thước phụ thuộc vào độ phân giải đầu vào xuất (và có thể là động).

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

Các ví dụ trong ONNX inference examples minh họa cách xử lý các đầu ra này cho từng loại model.

Link to this sectionUltralytics có API suy luận C++ chính thức không?#

Ultralytics hiện không cung cấp API suy luận C++ chuyên dụng cho các model YOLO. Để triển khai bằng C++, hãy export model sang một định dạng runtime như ONNX, TensorRT, TorchScript, hoặc MNN, sau đó tải artifact đã export bằng API C++ native của runtime đó.

Ví dụ, export một model phát hiện với yolo export model=yolo26n.pt format=onnx và chạy file .onnx bằng ONNX Runtime C++, hoặc export với format=engine và chạy engine TensorRT từ một ứng dụng TensorRT C++. Khi bạn sử dụng hậu xử lý C++ tùy chỉnh, hãy khớp layout tensor đầu ra với tác vụ và cài đặt export của bạn; các bản export phát hiện end-to-end của YOLO26 thường trả về (batch, max_det, 6), trong khi các bản export không phải end-to-end trả về tensor dự đoán thô đòi hỏi hậu xử lý bên ngoài.

Link to this sectionTại sao output0 lại ở dạng FP32 khi xuất các model đã được lượng tử hóa với end2end=True?#

Khi xuất với quantize=16 (FP16) hoặc quantize=8 (INT8), hầu hết các tensor được chuyển đổi sang độ chính xác thấp hơn để giảm kích thước model và cải thiện hiệu suất. Tuy nhiên, khi bật end2end=True, quá trình xử lý hậu kỳ (bao gồm các chỉ số lớp) được nhúng trực tiếp vào đồ thị đã xuất.

Tensor output0 chứa các chỉ số lớp, được biểu diễn nội bộ dưới dạng các giá trị dấu phẩy động. FP16 không thể biểu diễn đáng tin cậy các giá trị số nguyên trên 2048 do độ chính xác mantissa bị hạn chế. Để tránh khả năng mất độ chính xác hoặc ID lớp không chính xác, output0 được giữ ở định dạng FP32 một cách cố ý.

Hành vi này là dự kiến và cũng áp dụng cho các bản xuất có độ chính xác thấp hơn hoặc được lượng tử hóa, nơi độ trung thực của chỉ số lớp phải được bảo toàn.

Nếu yêu cầu đầu ra FP16 đầy đủ, hãy xuất với end2end=False và thực hiện hậu xử lý từ bên ngoài.

Bình luận