Ultralytics YOLO27:
Get Started

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:

nmsDự đoán và xác thựcExport
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
TrueGiố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ụ.

Chọn luồng đầu ra
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 NMS

Cá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àiXử 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-endDữ 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=Nonenms=False
Đầu ra detection(N, nc + 4, 8400)(N, 300, 6)
Định dạng boxxywhxyxy
Điểm sốMột điểm số cho mỗi class trên mỗi ứng viênConfidence và ID class cho mỗi detection
Xử lý bên ngoàiLọc theo độ tin cậy và NMSLọ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=True chị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=True cho 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=False chọ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 w8a16 sẽ 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_det anchor.

  • Đúng, với nms=False hoặc nms=True khi 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ại imgsz=640.

  • Có. Cùng một tham số nms sẽ 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.

Bình luận