Link to this sectionXuất Model với Ultralytics YOLO#
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à.
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.
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ại | Mặc định | Mô tả |
|---|---|---|---|
format | str | '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. |
imgsz | int hoặc tuple | 640 | Kí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ể. |
keras | bool | False | Cho 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. |
optimize | bool | False | Á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. |
half | bool | False | Kích hoạt lượng tử hóa FP16 (bán chính xác), giúp giảm kích thước model và có khả năng tăng tốc độ suy luận trên các phần cứng được hỗ trợ. Không tương thích với lượng tử hóa INT8 hoặc các định dạng xuất chỉ dùng CPU. Chỉ khả dụng cho một số định dạng nhất định, ví dụ: ONNX (xem bên dưới). |
int8 | bool | False | Kích hoạt lượng tử hóa INT8, giúp nén thêm model 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. TensorRT 11+ sử dụng lượng tử hóa Q/DQ tường minh của ModelOpt; TensorRT 7-10 sử dụng PTQ với một bộ hiệu chuẩn. |
dynamic | bool | False | Cho 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. |
simplify | bool | True | Đơ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. |
opset | int | None | Chỉ đị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. |
workspace | float hoặc None | None | Đặ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ị. |
nms | bool | False | Thê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. |
batch | int | 1 | Chỉ đị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. |
device | str | None | Chỉ đị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. |
data | str | 'coco8.yaml' | Đường dẫn đến tệp cấu hình dataset, cần thiết cho hiệu chuẩn lượng tử hóa INT8. Nếu không được chỉ định trong khi INT8 đã được bật, coco8.yaml sẽ được sử dụng làm dự phòng cho hiệu chuẩn. |
fraction | float | 1.0 | Chỉ đị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. |
end2end | bool | None | Ghi đè 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ạng | Tham số format | Mô hình | Metadata | Tham số |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
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.
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:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")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ư ONNX, TensorRT, OpenVINO, CoreML và Rockchip RKNN. Để có kết quả lượng tử hóa tối ưu, hãy cung cấp một dataset đại diện bằng cách sử dụng tham số data.
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:
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ụ:640hoặc(height, width)).half:Bật lượng tử hóa FP16, giảm kích thước model 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 môi trường di động hoặc môi trường bị hạn chế.int8:Bật lượng tử hóa INT8, rất có lợi cho việc triển khai edge AI.
Để 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 detection models (ví dụ: yolo26n.pt), đầu ra thường là một tensor đơn lẻ có hình dạng (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 xuất (và có thể là động).
Đố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 sectionTại sao output0 lại là FP32 khi xuất với half=True và end2end=True?#
Khi xuất với half=True (hoặc int8=True), 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 end2end=True được bật, quá trình hậu xử lý (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.