Ultralytics YOLO27:

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đánh giá chuẩn:

nmsDự đoán và xác thựcExport
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
TrueGiống như NoneNhánh một-nhiều có tích hợp NMS ở những nơi được hỗ trợ
FalseNhá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ụ.

Chọn đường dẫn đầ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)  # 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 outputs

Cơ 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àiXử 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ốiDữ liệu bổ sung
Detection(N, 300, 6)
Phân đoạn thực thể(N, 300, 6 + nm)(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=Nonenms=False
Đầu ra phát hiện(N, nc + 4, 8400)(N, 300, 6)
Định dạng hộpxywhxyxy
Đ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àiLọc độ tin cậy và NMSLọ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=True tuâ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=True cho 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=False chọ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 w8a16 quay 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_det anchor.

  • Có, đối với nms=False hoặc nms=True vớ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ại imgsz=640 thay vào đó.

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

Bình luận