Đánh giá benchmark model với Ultralytics YOLO#
Trực quan hóa benchmark#
Giới thiệu#
Sau khi huấn luyện và xác thực model, bước tiếp theo hợp lý là đánh giá hiệu năng của model trong nhiều tình huống thực tế. Chế độ benchmark trong Ultralytics YOLO26 đáp ứng mục đích này bằng cách cung cấp một framework mạnh mẽ để đánh giá tốc độ và độ chính xác của model trên nhiều định dạng export.
Xem bản xem trước YOLO27 chưa phát hành để tham khảo benchmark tốc độ sơ bộ.
Xem: Benchmark các model Ultralytics YOLO26 | Cách so sánh hiệu năng model trên các phần cứng khác nhau?
Vì sao benchmark lại quan trọng?#
- Ra quyết định dựa trên thông tin: Hiểu rõ sự đánh đổi giữa tốc độ và độ chính xác.
- Phân bổ tài nguyên: Tìm hiểu hiệu năng của các định dạng export khác nhau trên những phần cứng khác nhau.
- Tối ưu hóa: Tìm hiểu định dạng export nào mang lại hiệu năng tốt nhất cho trường hợp sử dụng cụ thể của bạn.
- Hiệu quả chi phí: Sử dụng tài nguyên phần cứng hiệu quả hơn dựa trên kết quả benchmark.
Các chỉ số chính trong chế độ benchmark#
- mAP50-95: Dành cho phát hiện đối tượng, phân đoạn instance, ước tính tư thế và OBB.
- mIoU: Dành cho phân đoạn ngữ nghĩa.
- delta1: Dành cho ước tính độ sâu.
- accuracy_top1: Dành cho phân loại ảnh.
- Thời gian suy luận: Thời gian xử lý mỗi ảnh, tính bằng mili giây.
Các định dạng export được hỗ trợ#
- ONNX: Tối ưu hiệu năng CPU
- TensorRT: Tối đa hóa hiệu quả GPU
- OpenVINO: Tối ưu hóa cho phần cứng Intel
- CoreML, TensorFlow SavedModel và các định dạng khác: Đáp ứng nhiều nhu cầu triển khai khác nhau.
- Export sang ONNX hoặc OpenVINO để tăng tốc CPU lên đến 3 lần.
- Export sang TensorRT để tăng tốc GPU lên đến 5 lần.
Ví dụ sử dụng#
Cài đặt Ultralytics kèm các dependency cho export trước khi chạy benchmark để tránh thiếu package.
pip install ultralytics[export]Chạy benchmark YOLO26n trên tất cả định dạng export được hỗ trợ (ONNX, TensorRT, v.v.). Xem mục Arguments bên dưới để biết danh sách đầy đủ các tùy chọn export.
from ultralytics.utils.benchmarks import benchmark
# Benchmark trên GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# Benchmark định dạng export cụ thể
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")Đối số#
Các đối số như model, data, imgsz, quantize, device, verbose và format giúp người dùng linh hoạt tinh chỉnh benchmark theo nhu cầu cụ thể và dễ dàng so sánh hiệu năng của các định dạng export khác nhau.
| Khóa | Giá trị mặc định | Mô tả |
|---|---|---|
model | None | Chỉ định đường dẫn đến file model. Chấp nhận cả định dạng .pt và .yaml, ví dụ: "yolo26n.pt" cho model đã huấn luyện trước hoặc file cấu hình. |
data | None | Đường dẫn đến YAML của dataset dùng để benchmark, thường bao gồm đường dẫn và cài đặt cho dữ liệu xác thực. Ví dụ: "coco8.yaml". Với phân loại, thay vào đó cần thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10). |
imgsz | 640 | Kích thước ảnh đầu vào của model. Phải là một số nguyên duy nhất đối với ảnh vuông (ví dụ: 640); benchmark() chỉ hỗ trợ kích thước ảnh vuông. |
quantize | None | Độ chính xác được yêu cầu: 16 (FP16) hoặc 8 (INT8; các phương pháp PTQ cần dữ liệu hiệu chuẩn data/fraction, còn phương pháp chỉ lượng tử hóa trọng số thì không); 32/không đặt sẽ dùng FP32 nếu định dạng hỗ trợ — định dạng không thể export FP32 sẽ từ chối 32 nếu được chỉ định tường minh hoặc chuyển về độ chính xác bắt buộc. Hàng PyTorch gốc không được export: chỉ 16 ảnh hưởng đến hàng này, chọn suy luận FP16, trong khi 8, 32 và không đặt sẽ chạy FP32. Sau đó, mỗi định dạng chạy suy luận ở độ chính xác runtime riêng. Thay thế các cờ half/int8 đã lỗi thời. |
device | None | Xác định thiết bị tính toán để benchmark, chẳng hạn "cpu" hoặc "cuda:0"; nếu không đặt, chương trình dùng GPU khả dụng đầu tiên, nếu không có thì dùng CPU. |
verbose | False | Nếu là True hoặc một số thực, các lỗi benchmark (ngoại trừ lỗi assertion) sẽ được raise thay vì ghi log lỗi; một số thực như 0.25 cũng yêu cầu chỉ số của mọi định dạng chạy thành công phải vượt ngưỡng đó. |
eps | 0.001 | Epsilon nhỏ (mili giây) được cộng vào thời gian suy luận trên mỗi ảnh trước khi chuyển đổi sang FPS, nhằm tránh phép chia cho 0. Hiếm khi cần thay đổi. |
format | '' | Chỉ benchmark định dạng export được chỉ định (ví dụ: format=onnx). Để trống để tự động kiểm tra mọi định dạng được hỗ trợ. |
Hàm benchmark() độc lập (from ultralytics.utils.benchmarks import benchmark) sử dụng các giá trị mặc định trong chữ ký riêng thay vì các giá trị trong bảng bên trên, đáng chú ý là model="yolo26n.pt", imgsz=160 và device="cpu"; truyền tường minh imgsz và device để khớp với CLI yolo benchmark.
Các định dạng xuất#
Benchmark sẽ tự động thử chạy trên tất cả định dạng export khả dụng được liệt kê bên dưới. Ngoài ra, bạn có thể chạy benchmark cho một định dạng cụ thể bằng đối số format, chấp nhận bất kỳ định dạng nào được đề cập bên dưới.
| Định dạng | Đối số format | Model | Metadata | Đối số |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None mặc định xuất đầu ra thô cho NMS bên ngoài. Đặt nms=False để chọn một head không dùng NMS hiện có; các định dạng không được hỗ trợ sẽ chuyển về luồng đầu ra gốc. Các mục nms ở trên xác định những định dạng có thể tích hợp NMS với nms=True.
Xem chi tiết đầy đủ về export trên trang Export.
Câu hỏi thường gặp#
Ultralytics YOLO26 cung cấp chế độ Benchmark để đánh giá hiệu năng model trên các định dạng export khác nhau. Chế độ này cung cấp thông tin về các chỉ số chính như độ chính xác trung bình (mAP50-95), độ chính xác và thời gian suy luận tính bằng mili giây. Bạn có thể chạy benchmark bằng lệnh Python hoặc CLI. Ví dụ, để benchmark trên GPU:
Ví dụfrom ultralytics.utils.benchmarks import benchmark # Benchmark trên GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)Để biết thêm chi tiết về các đối số benchmark, hãy truy cập mục Arguments.
Export model YOLO26 sang các định dạng khác nhau như ONNX, TensorRT và OpenVINO cho phép bạn tối ưu hiệu năng dựa trên môi trường triển khai. Ví dụ:
- ONNX: Tăng tốc CPU lên đến 3 lần.
- TensorRT: Tăng tốc GPU lên đến 5 lần.
- OpenVINO: Được tối ưu riêng cho phần cứng Intel.
Các định dạng này cải thiện tốc độ suy luận trên phần cứng mục tiêu, giúp model hoạt động hiệu quả hơn trong nhiều ứng dụng thực tế. Truy cập trang Export để xem thông tin đầy đủ.
Benchmark model YOLO26 là việc thiết yếu vì một số lý do:
- Ra quyết định dựa trên thông tin: Hiểu rõ sự đánh đổi giữa tốc độ và độ chính xác.
- Phân bổ tài nguyên: Đánh giá hiệu năng trên các tùy chọn phần cứng khác nhau.
- Tối ưu hóa: Xác định định dạng export nào mang lại hiệu năng tốt nhất cho các trường hợp sử dụng cụ thể.
- Hiệu quả chi phí: Tối ưu việc sử dụng phần cứng dựa trên kết quả benchmark.
Các chỉ số chính như mAP50-95, độ chính xác Top-1 và thời gian suy luận giúp thực hiện những đánh giá này. Tham khảo mục Các chỉ số chính để biết thêm thông tin.
YOLO26 hỗ trợ nhiều định dạng export, mỗi định dạng được thiết kế cho phần cứng và trường hợp sử dụng cụ thể:
- ONNX: Tốt nhất cho hiệu năng CPU.
- TensorRT: Lý tưởng để tối ưu hiệu quả GPU.
- OpenVINO: Được tối ưu cho phần cứng Intel.
- CoreML và TensorFlow: Hữu ích cho iOS và các ứng dụng ML nói chung.
Để xem danh sách đầy đủ các định dạng được hỗ trợ và ưu điểm tương ứng, hãy xem mục Các định dạng export được hỗ trợ.
Khi chạy benchmark, bạn có thể tùy chỉnh một số đối số theo nhu cầu cụ thể:
- model: Đường dẫn đến file model (ví dụ: "yolo26n.pt").
- data: Đường dẫn đến YAML của dataset (ví dụ:
"coco8.yaml"); với phân loại, thay vào đó cần thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ:imagenet10). - imgsz: Kích thước ảnh đầu vào vuông dưới dạng một số nguyên duy nhất, chẳng hạn
640. Chế độ benchmark sử dụng cùng một kích thước ảnh vuông cho PyTorch và các định dạng đã export để đảm bảo so sánh công bằng. - quantize: Độ chính xác được yêu cầu:
16cho FP16,8cho INT8 (hữu ích với thiết bị biên);32/không đặt sẽ dùng FP32 nếu định dạng hỗ trợ — định dạng không thể export FP32 sẽ từ chối32nếu được chỉ định tường minh hoặc chuyển về độ chính xác bắt buộc. Hàng PyTorch gốc không được export: chỉ16ảnh hưởng đến hàng này, chọn suy luận FP16, trong khi8,32và không đặt sẽ chạy FP32. Sau đó, mỗi định dạng chạy suy luận ở độ chính xác runtime riêng. - device: Chỉ định thiết bị tính toán (ví dụ: "cpu", "cuda:0").
- verbose: Raise khi benchmark thất bại thay vì ghi log; truyền một số thực để đồng thời yêu cầu chỉ số của mỗi định dạng vượt ngưỡng đó.
Để xem danh sách đầy đủ các đối số, hãy tham khảo mục Arguments.