Tìm hiểu về phát hiện end-to-end trong Ultralytics YOLO26#
YOLO26 huấn luyện cả đầu one-to-many và đầu one-to-one. Theo mặc định, dự đoán và xác thực sử dụng đầu one-to-many cùng với loại bỏ phi cực đại (NMS). Cách này ưu tiên độ chính xác bằng cách sử dụng cùng trọng số đã huấn luyện. Đặt nms=False để thay vào đó sử dụng đầu one-to-one nhanh hơn, không cần NMS.
Một đối số điều khiển lựa chọn này trong dự đoán, xác thực, tracking, xuất và đánh giá benchmark:
nms | Dự đoán và xác thực | Export |
|---|---|---|
None (mặc định) | Đầu one-to-many; Ultralytics chạy NMS | Đầu ra one-to-many thô; bên tiêu thụ chạy NMS |
True | Giống None | Đầu one-to-many có tích hợp NMS nếu được hỗ trợ |
False | Đầu one-to-one không có loại bỏ theo IoU | Đầu ra one-to-one không cần NMS nếu được hỗ trợ |
None nghĩa là model không tích hợp bước hậu xử lý tùy chọn. Điều này không loại bỏ quy trình thông thường chuyển đầu ra model thành kết quả dự đoán hoặc metric xác thực. Phân loại, phân đoạn ngữ nghĩa, độ sâu và các model không có đầu phát hiện có thể lựa chọn vẫn giữ nguyên hành vi vốn có của tác vụ.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.predict("image.jpg") # one-to-many + NMS
metrics = model.val(data="coco.yaml") # one-to-many + NMS
results = model.predict("image.jpg", nms=False) # chọn suy luận không cần NMS
results = model.predict("image.jpg", nms=None) # chuyển lại sang one-to-many + NMS
model.export(format="onnx") # đầu ra one-to-many thô
model.export(format="onnx", nms=True) # tích hợp NMS
model.export(format="onnx", nms=False) # đầu ra one-to-one không cần NMSCách hoạt động của phát hiện end-to-end#
Cả hai đầu dùng chung backbone và neck, đồng thời được tối ưu trong quá trình huấn luyện. Đầu one-to-many đưa ra nhiều dự đoán ứng viên cho mỗi đối tượng; NMS loại bỏ các phát hiện chồng lấn. Đầu one-to-one học cách tạo một dự đoán duy nhất cho mỗi đối tượng. Việc chọn luồng suy luận không tắt cơ chế giám sát hai đầu. Quá trình xác thực trong lúc huấn luyện sử dụng đầu suy luận đã chọn, vì vậy việc chọn checkpoint và dừng sớm dựa trên cùng các dự đoán như khi triển khai.
| Head | Đầu ra phát hiện trước khi xử lý bên ngoài | Xử lý |
|---|---|---|
| One-to-many (mặc định) | (N, nc + 4, 8400) | Lọc theo độ tin cậy và NMS |
| One-to-one | (N, 300, 6) | Lọc theo độ tin cậy; không loại bỏ theo IoU |
Ở đây, N là batch size, nc là số lớp và 8400 là số lượng ứng viên tại imgsz=640. Các hàng phát hiện one-to-one chứa [x1, y1, x2, y2, confidence, class_id]. Các tác vụ phát hiện khác có thêm đầu ra:
| Tác vụ | Đầu ra end-to-end | Dữ liệu bổ sung |
|---|---|---|
| Phát hiện | (N, 300, 6) | — |
| Phân đoạn đối tượng | (N, 300, 6 + nm) và (N, nm, H, W) | Hệ số mask và prototype |
| Tư thế | (N, 300, 57) | 17 keypoint × 3 giá trị |
| OBB | (N, 300, 7) | Góc xoay |
Fusion loại bỏ các nhánh suy luận không được sử dụng, đồng thời gộp các lớp Conv và BatchNorm. Hãy giữ checkpoint huấn luyện ban đầu nếu bạn cần chuyển đổi head: fusion không thể khôi phục nhánh đã bị loại bỏ. Model chỉ còn head one-to-one vẫn giữ lại đường xử lý hiện có đó.
Đầu ra đã export#
Các model detection YOLOv8, YOLO11 và YOLO26 mặc định export dự đoán one-to-many thô. Export YOLO26 với nms=False để có detection không cần NMS.
nms=None | nms=False | |
|---|---|---|
| Đầu ra detection | (N, nc + 4, 8400) | (N, 300, 6) |
| Định dạng box | xywh | xyxy |
| Điểm số | Một điểm số cho mỗi class trên mỗi ứng viên | Confidence và ID class cho mỗi detection |
| Xử lý bên ngoài | Lọc theo độ tin cậy và NMS | Lọc theo confidence |
nms=True cũng tạo ra các detection đã xử lý, nhưng sử dụng head one-to-many và tích hợp NMS truyền thống. Tùy chọn này hữu ích khi bạn muốn runtime triển khai nhận được các detection mà không cần tự triển khai bước loại bỏ.
Graph của model đã export quyết định đầu ra. Truyền nms khi tải model không dựng lại graph; hãy export checkpoint nguồn với giá trị nms mong muốn để chọn đường đầu ra. Ultralytics sử dụng metadata của artifact để tránh áp dụng NMS hai lần.
Khả năng tương thích của định dạng export#
ONNX, TensorRT, CoreML, OpenVINO và một số định dạng khác hỗ trợ export không cần NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU và Qualcomm QNN sẽ chuyển về đường one-to-many khi các operator của chúng không hỗ trợ được đầu ra end-to-end. Cảnh báo định dạng sẽ giải thích việc chuyển về này.
- NMS tích hợp:
nms=Truechịu các hạn chế về tác vụ, độ chính xác và dynamic shape của từng định dạng. Những định dạng không hỗ trợ NMS tích hợp sẽ export đầu ra gốc để xử lý bên ngoài. - CoreML: NMS tích hợp hỗ trợ detect, segment và pose với shape tĩnh. Dùng
nms=Truecho các model detection cần pipeline NMS của Xcode Preview. - MNN: NMS tích hợp hỗ trợ detect và pose với
dynamic=False. - IMX: Detection, instance segmentation và pose yêu cầu NMS tích hợp, được tự động chọn.
- Hailo: YOLO26 mặc định sử dụng tensor thô với NMS trên host;
nms=Falsechọn đường one-to-one. Detection YOLOv8/YOLO11 sử dụng NMS của HailoRT. - Lượng tử hóa: Các phiên bản TensorRT trước 8.5.0, TensorRT 10.3.0 INT8 trên JetPack 6 và LiteRT INT8 hoặc
w8a16sẽ chuyển về đầu ra one-to-many.
Xem hướng dẫn tích hợp riêng để biết yêu cầu phần cứng. Để có tensor đầu ra FP16 đầy đủ, hãy dùng nms=None; chỉ số class end-to-end có thể khiến tensor đầu ra vẫn ở FP32 ngay cả khi model đã được lượng tử hóa.
Đánh đổi giữa độ chính xác và tốc độ#
Kết quả COCO đã công bố của YOLO26 cho thấy head one-to-many cải thiện mAP detection từ 0.6–0.8 điểm trên cả năm kích thước: chẳng hạn, 40.9 so với 40.1 ở YOLO26n và 57.5 so với 56.9 ở YOLO26x. Head one-to-one bỏ qua bước NMS và ưu tiên độ trễ thấp. Các kết quả này là cơ sở cho lựa chọn mặc định; chúng không đảm bảo mức tăng trên mọi dataset.
Các phép đo tốc độ không cần NMS đã công bố sử dụng nms=False. Hãy so sánh độ chính xác và độ trễ với cùng lựa chọn head, kích thước ảnh, độ chính xác và phần cứng.
Câu hỏi thường gặp#
Tham số này giới hạn số detection được trả về khi prediction và validation. Với các bản export end-to-end và có NMS tích hợp, giới hạn này nằm trong graph, vì vậy cần export lại để thay đổi; ngoại lệ là NMS tích hợp cho detection của CoreML, vốn không có giới hạn detection. Đầu ra end-to-end có thể chứa ít ứng viên hơn nếu ảnh có ít hơn
max_detanchor.Đúng, với
nms=Falsehoặcnms=Truekhi dùng giới hạn detection mặc định. Chỉ riêng shape không cho biết head nào đã được export. Một bản export detection COCO thô với thiết lập mặc định thường có shape(1, 84, 8400)tạiimgsz=640.Có. Cùng một tham số
nmssẽ chọn head detection khả dụng cho detect, instance segmentation, pose và OBB. Tham số này không thay thế việc tái tạo mask, giải mã keypoint, xử lý box xoay, xác suất phân loại, bản đồ class ngữ nghĩa hoặc giải mã depth.