Xuất mô hình với 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 YOLO11 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 các sắc thái của việc xuất mô hình, giới thiệu 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 nên chọn Chế độ Xuất của YOLO11?
- 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
Ví dụ sử dụng
Xuất mô hình YOLO11n 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 đối số xuất.
Ví dụ
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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=yolo11n.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ại | Mặc định | Mô tả |
---|---|---|---|
format |
str |
'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. |
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 (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 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. |
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ợ. Không tương thích với lượng tử hóa INT8 hoặc xuất chỉ CPU cho ONNX. |
int8 |
bool |
False |
Kí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). |
dynamic |
bool |
False |
Cho phép kích thước đầu vào động cho các định dạng xuất ONNX, TensorRT và OpenVINO, tăng cường tính linh hoạt trong việc xử lý các kích thước ảnh khác nhau. Tự động được đặt thành True Khi sử dụng TensorRT với INT8. |
simplify |
bool |
True |
Đơ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. |
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. |
workspace |
float hoặc None |
None |
Đặ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ị. |
nms |
bool |
False |
Thêm Non-Maximum Suppression (NMS) vào mô hình đã xuất khi được hỗ trợ (xem Định dạng xuất), cải thiện hiệu quả xử lý hậu kỳ phát hiện. Không khả dụng cho các mô hình end2end. |
batch |
int |
1 |
Chỉ đị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. |
device |
str |
None |
Chỉ đị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. |
data |
str |
'coco8.yaml' |
Đường dẫn đến tập dữ liệu tệp cấu hình (mặc định: coco8.yaml ), 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, một tập dữ liệu mặc định sẽ được chỉ định. |
fraction |
float |
1.0 |
Chỉ đị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. |
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 YOLO11 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, ví dụ: yolo predict model=yolo11n.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ạng | format Đối số |
Mô hình | Metadata (Siêu dữ liệu) | Các đối số |
---|---|---|---|---|
PyTorch | - | yolo11n.pt |
✅ | - |
TorchScript | torchscript |
yolo11n.torchscript |
✅ | imgsz , half , dynamic , optimize , nms , batch , device |
ONNX | onnx |
yolo11n.onnx |
✅ | imgsz , half , dynamic , simplify , opset , nms , batch , device |
OpenVINO | openvino |
yolo11n_openvino_model/ |
✅ | imgsz , half , dynamic , int8 , nms , batch , data , fraction , device |
TensorRT | engine |
yolo11n.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , nms , batch , data , fraction , device |
CoreML | coreml |
yolo11n.mlpackage |
✅ | imgsz , half , int8 , nms , batch , device |
TF SavedModel | saved_model |
yolo11n_saved_model/ |
✅ | imgsz , keras , int8 , nms , batch , device |
TF GraphDef | pb |
yolo11n.pb |
❌ | imgsz , batch , device |
TF Lite | tflite |
yolo11n.tflite |
✅ | imgsz , half , int8 , nms , batch , data , fraction , device |
TF Edge TPU | edgetpu |
yolo11n_edgetpu.tflite |
✅ | imgsz , device |
TF.js | tfjs |
yolo11n_web_model/ |
✅ | imgsz , half , int8 , nms , batch , device |
PaddlePaddle | paddle |
yolo11n_paddle_model/ |
✅ | imgsz , batch , device |
MNN | mnn |
yolo11n.mnn |
✅ | imgsz , batch , int8 , half , device |
NCNN | ncnn |
yolo11n_ncnn_model/ |
✅ | imgsz , half , batch , device |
IMX500 | imx |
yolo11n_imx_model/ |
✅ | imgsz , int8 , data , fraction , device |
RKNN | rknn |
yolo11n_rknn_model/ |
✅ | imgsz , batch , name , device |
Câu hỏi thường gặp
Làm cách nào để xuất mô hình YOLO11 sang định dạng ONNX?
Xuất mô hình YOLO11 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("yolo11n.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=yolo11n.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 tiến đáng kể về hiệu suất. Các mô hình YOLO11 được xuất sang TensorRT có thể đạt được tốc độ GPU nhanh hơn tới 5 lần, khiến nó trở nê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 YOLO11 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("yolo11n.pt") # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.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("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.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.