Tìm hiểu về phát hiện end-to-end trong Ultralytics YOLO26#
YOLO26 huấn luyện cả nhánh một-nhiều và nhánh một-một. Quá trình dự đoán và xác thực sử dụng nhánh một-nhiều với Non-Maximum Suppression (NMS) theo mặc định. Điều 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 để sử dụng nhánh một-một không có NMS nhanh hơn.
Một tham số điều khiển lựa chọn trên dự đoán, xác thực, theo dõi, xuất và đánh giá chuẩn:
nms | Dự đoán và xác thực | Export |
|---|---|---|
None (mặc định) | Nhánh một-nhiều; Ultralytics chạy NMS | Đầu ra một-nhiều thô; hệ thống tiêu thụ chạy NMS |
True | Giống như None | Nhánh một-nhiều có tích hợp NMS ở những nơi được hỗ trợ |
False | Nhánh một-một không có khử IoU | Đầu ra một-một không có NMS ở những nơi được hỗ trợ |
None nghĩa là không có quá trình hậu xử lý tùy chọn nào được tích hợp trong mô hình. Tham số này không loại bỏ quá trình thông thường chuyển đổi đầu ra mô hình thành kết quả dự đoán hoặc chỉ số xác thực. Phân loại, phân đoạn ngữ nghĩa, chiều sâu và các mô hình không có nhánh phát hiện có thể chọn giữ lại hành vi gố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) # opt into NMS-free inference
results = model.predict("image.jpg", nms=None) # switch back to one-to-many + NMS
model.export(format="onnx") # raw one-to-many outputs
model.export(format="onnx", nms=True) # embed NMS
model.export(format="onnx", nms=False) # NMS-free one-to-one outputsCơ chế hoạt động của phát hiện end-to-end#
Cả hai nhánh đều chia sẻ phần xương sống (backbone) và cổ (neck) và được tối ưu hóa trong quá trình huấn luyện. Nhánh một-nhiều cung cấp 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 chéo. Nhánh một-một học cách tạo ra một dự đoán duy nhất cho mỗi đối tượng. Việc chọn đường dẫn suy luận không vô hiệu hóa việc giám sát hai nhánh. Quá trình xác thực trong khi huấn luyện sử dụng nhánh suy luận đã chọn, do đó việc chọn điểm kiểm tra (checkpoint) và dừng sớm tuân theo các dự đoán giống như khi triển khai.
| Head | Đầu ra phát hiện trước khi xử lý bên ngoài | Xử lý |
|---|---|---|
| Một-nhiều (mặc định) | (N, nc + 4, 8400) | Lọc độ tin cậy và NMS |
| Một-một | (N, 300, 6) | Lọc độ tin cậy; không có khử IoU |
Ở đây N là kích thước lô (batch size), nc là số lượng lớp, và 8400 là số lượng ứng viên tại imgsz=640. Các hàng phát hiện một-một chứa [x1, y1, x2, y2, confidence, class_id]. Các tác vụ phát hiện khác mang các đầu ra bổ sung:
| Task | Đầu ra đầu cuối | Dữ liệu bổ sung |
|---|---|---|
| Detection | (N, 300, 6) | — |
| Phân đoạn thực thể | (N, 300, 6 + nm) và (N, nm, H, W) | Hệ số mặt nạ và mẫu |
| Pose | (N, 300, 57) | 17 điểm mốc × 3 giá trị |
| OBB | (N, 300, 7) | Góc xoay |
Quá trình hợp nhất (fusion) loại bỏ các nhánh suy luận không sử dụng cũng như gập các lớp Conv và BatchNorm. Giữ lại điểm kiểm tra huấn luyện gốc nếu bạn cần chuyển đổi nhánh: hợp nhất không thể khôi phục một nhánh đã bị xóa. Mô hình chỉ còn lại nhánh một-một sẽ giữ lại đường dẫn khả dụng đó.
Các đầu ra đã xuất#
Các mô hình phát hiện YOLOv8, YOLO11 và YOLO26 xuất các dự đoán một-nhiều thô theo mặc định. Xuất YOLO26 với nms=False để có các phát hiện không có NMS.
nms=None | nms=False | |
|---|---|---|
| Đầu ra phát hiện | (N, nc + 4, 8400) | (N, 300, 6) |
| Định dạng hộp | xywh | xyxy |
| Điểm số | Một điểm số cho mỗi lớp trên mỗi ứng viên | Độ tin cậy và ID lớp cho mỗi phát hiện |
| Xử lý bên ngoài | Lọc độ tin cậy và NMS | Lọc độ tin cậy |
nms=True cũng tạo ra các phát hiện đã xử lý, nhưng sử dụng nhánh một-nhiều và tích hợp NMS truyền thống. Tính năng này hữu ích khi thời gian chạy triển khai của bạn cần nhận các phát hiện mà không phải tự thực hiện việc khử.
Đồ thị của mô hình đã xuất quyết định đầu ra của mô hình đó. Việc truyền nms khi tải mô hình không xây dựng lại đồ thị; hãy xuất điểm kiểm tra nguồn với giá trị nms mong muốn để chọn đường dẫn đầu ra. Ultralytics sử dụng siêu dữ liệu của tạo tác để tránh áp dụng NMS hai lần.
Khả năng tương thích của format Export#
ONNX, TensorRT, CoreML, OpenVINO và một số định dạng khác hỗ trợ xuất không có NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU và Qualcomm QNN quay trở lại đường dẫn một-nhiều khi các toán tử của chúng không thể hỗ trợ đầu ra đầu cuối. Các cảnh báo định dạng giải thích lý do quay trở lại.
- NMS tích hợp:
nms=Truetuân theo các giới hạn về tác vụ, độ chính xác và hình dạng động của từng định dạng. Các định dạng không hỗ trợ NMS tích hợp sẽ xuất đầu ra gốc để xử lý bên ngoài. - CoreML: NMS tích hợp hỗ trợ phát hiện, phân đoạn và tạo dáng với các hình dạng tĩnh. Sử dụng
nms=Truecho các mô hình phát hiện cần chuỗi NMS của Xcode Preview. - MNN: NMS tích hợp hỗ trợ phát hiện và tạo dáng với
dynamic=False. - IMX: Phát hiện, phân đoạn thực thể và tạo dáng yêu cầu NMS tích hợp, được chọn tự động.
- Hailo: YOLO26 sử dụng các ten-xơ thô với NMS máy chủ theo mặc định;
nms=Falsechọn đường dẫn một-một của nó. Phát hiện YOLOv8/YOLO11 sử dụng HailoRT NMS. - 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
w8a16quay trở lại đầu ra một-nhiều.
Xem các hướng dẫn tích hợp riêng lẻ để biết các yêu cầu phần cứng. Đối với các ten-xơ đầu ra FP16 đầy đủ, hãy sử dụng nms=None; các chỉ mục lớp đầu cuối có thể giữ các ten-xơ đầu ra ở định dạng FP32 ngay cả khi mô hình được lượng tử hóa.
Đánh đổi giữa độ chính xác và tốc độ#
Các kết quả COCO của YOLOv26 đã công bố cho thấy nhánh một-nhiều cải thiện mAP phát hiện thêm 0,6–0,8 điểm trên năm thang đo: ví dụ, 40,9 so với 40,1 đối với YOLO26n, và 57,5 so với 56,9 đối với YOLO26x. Nhánh một-một tránh được bước NMS và ưu tiên độ trễ. Những kết quả này tạo động lực cho lựa chọn mặc định; chúng không đảm bảo sự gia tăng trên mọi tập dữ liệu.
Các phép đo tốc độ không có NMS đã công bố sử dụng nms=False. So sánh độ chính xác và độ trễ bằng cách sử dụng cùng lựa chọn nhánh, kích thước ảnh, độ chính xác và phần cứng.
FAQ#
Nó giới hạn các phát hiện trả về bởi quá trình dự đoán và xác thực. Đối với các bản xuất end-to-end và nhúng NMS, giới hạn là một phần của đồ thị, vì vậy cần xuất lại để thay đổi nó; phát hiện nhúng NMS của CoreML là ngoại lệ và không có giới hạn phát hiện. Đầu ra end-to-end có thể chứa ít ứng viên hơn khi hình ảnh cung cấp ít hơn
max_detanchor.Có, đối với
nms=Falsehoặcnms=Truevới giới hạn phát hiện mặc định. Riêng hình dạng không xác định được nhánh nào đã được xuất. Một bản xuất phát hiện COCO thô mặc định thường có hình dạng(1, 84, 8400)tạiimgsz=640thay vào đó.Có. Cùng một tham số
nmschọn nhánh phát hiện khả dụng cho phát hiện, phân đoạn thực thể, tạo dáng và OBB. Tham số này không thay thế việc tái tạo mặt nạ, giải mã điểm mốc, xử lý hộp xoay, xác suất phân loại, bản đồ lớp ngữ nghĩa hoặc giải mã chiều sâu.