Anchor-Free Detectors
Detector không dựa trên anchor dự đoán box từ điểm hoặc keypoint mà không cần anchor box định sẵn. Cách FCOS, CenterNet và các model YOLO hiện đại tìm đối tượng.
Bộ phát hiện không dùng anchor là các model phát hiện đối tượng dự đoán trực tiếp từng bounding box từ một điểm trên feature map, hoặc từ các keypoint như góc hay tâm của đối tượng, mà không cần tập anchor box định sẵn. Một vị trí gần đối tượng dự đoán khoảng cách từ vị trí đó đến bốn cạnh của đối tượng; hoặc đỉnh trên heatmap đánh dấu tâm đối tượng và mạng hồi quy chiều rộng, chiều cao. Cách này loại bỏ kích thước anchor, tỷ lệ khung hình và ngưỡng ghép anchor mà bộ phát hiện dựa trên anchor phải tinh chỉnh cho từng tập dữ liệu; đầu không dùng anchor đã trở thành thiết kế tiêu chuẩn cho phát hiện thời gian thực.
Cách phát hiện không dùng anchor hoạt động#
Bộ phát hiện không dùng anchor thuộc hai nhóm:
- Bộ phát hiện dựa trên điểm như FCOS: Mỗi ô ở mọi tầng feature map đều là một ứng viên. FCOS (2019) dự đoán điểm số lớp và bốn khoảng cách tới các cạnh trái, trên, phải và dưới tại mỗi vị trí nằm trong một đối tượng; ngoài ra, mô hình còn dự đoán điểm centerness để giảm trọng số các box được dự đoán từ những điểm cách xa tâm đối tượng.
- Bộ phát hiện dựa trên keypoint như CornerNet và CenterNet: CornerNet (2018) dự đoán heatmap cho góc trên bên trái và góc dưới bên phải, rồi ghép các góc thuộc cùng một đối tượng bằng embedding đã học. CenterNet dự đoán heatmap tâm đối tượng và hồi quy chiều rộng, chiều cao tại mỗi đỉnh; mô hình trích xuất đỉnh bằng phép max-pooling 3 × 3 nên không cần loại bỏ cực đại không tối đa (NMS) dựa trên IoU.
Dự đoán không dùng anchor đã xuất hiện trước anchor trong dòng YOLO: YOLOv1 năm 2015 trực tiếp dự đoán box từ ô lưới chứa tâm của mỗi đối tượng; việc bổ sung anchor box trong YOLOv2 tăng recall từ 81% lên 88%, đổi lại mAP giảm 0.3 điểm. YOLOX đưa thiết kế dày đặc dựa trên điểm trở lại YOLO vào năm 2021; năm 2023, Ultralytics chuyển từ anchor của YOLOv5 sang đầu không dùng anchor trong YOLOv8, nhờ đó tập dữ liệu tùy chỉnh không còn cần bước khớp anchor; YOLO26 tiếp tục sử dụng thiết kế này.
Để giải mã dự đoán dày đặc không dùng anchor, chỉ cần vị trí của ô và bốn khoảng cách được dự đoán:
import torch
# Center of the grid cell at column 10, row 6 of a stride-16 feature map, in image pixels
stride = 16
point = (torch.tensor([10.0, 6.0]) + 0.5) * stride
# Distances the head predicts from that point to the left, top, right, and bottom box edges, in strides
ltrb = torch.tensor([2.0, 3.5, 1.5, 4.0]) * stride
# Anchor-free decoding: no template box, only the point and four distances
x1, y1 = point - ltrb[:2]
x2, y2 = point + ltrb[2:]
print(f"point {point.tolist()} -> box ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")Điểm tại (168, 104) trở thành box (136, 48, 192, 168), rộng 56 pixel và cao 120 pixel. Đầu dày đặc áp dụng phép giải mã này tại mỗi ô của mọi tầng kim tự tháp, nên mỗi ô tạo ra một box ứng viên.
Chọn điểm nào học từng đối tượng#
Không có anchor để so sánh với box đã gán nhãn bằng giao trên hợp (IoU), bộ phát hiện không dùng anchor cần một quy tắc khác để xác định điểm nào được tính là mẫu huấn luyện dương tính. FCOS sử dụng vị trí và kích thước: một điểm là dương tính nếu nằm trong box đã gán nhãn và khoảng cách lớn nhất từ điểm đó tới các cạnh box nằm trong phạm vi của tầng kim tự tháp tương ứng — 0 đến 64 pixel ở tầng stride-8, 64 đến 128 ở stride 16, rồi tiếp tục như vậy đến stride 128.
Các bộ phát hiện ra đời sau chọn mẫu dương tính một cách thích ứng. ATSS cho thấy chênh lệch độ chính xác giữa RetinaNet dựa trên anchor và FCOS không dùng anchor chủ yếu bắt nguồn từ cách mỗi mô hình xác định mẫu dương tính và âm tính; khi áp dụng cùng quy tắc lấy mẫu, việc xếp nhiều anchor tại mỗi vị trí không mang lại lợi ích. Gán nhãn căn chỉnh theo tác vụ, được TOOD giới thiệu và PP-YOLOE cùng nhiều bộ phát hiện thời gian thực ra đời sau áp dụng, xếp hạng các điểm bên trong mỗi đối tượng theo tích có trọng số của điểm số lớp dự đoán và IoU của box, rồi chọn một số điểm đứng đầu làm mẫu dương tính.
Bộ phát hiện không dùng anchor và dựa trên anchor#
- Ít siêu tham số hơn: Không cần khớp kích thước anchor, tỷ lệ khung hình hay ngưỡng ghép IoU cho từng tập dữ liệu; đây là bước mà các bộ phát hiện dựa trên anchor thường thực hiện bằng cách phân cụm k-means các box huấn luyện.
- Linh hoạt về hình dạng: Việc gán nhãn dựa trên điểm chỉ phụ thuộc vào vị trí đối tượng, nên đối tượng có hình dạng không giống bất kỳ anchor nào, chẳng hạn một đường ống dài và mỏng, vẫn có các mẫu dương tính.
- Cách gọi chung: Nhiều codebase không dùng anchor vẫn gọi các điểm lưới là “điểm anchor”, tức vị trí không có kích thước hay tỷ lệ khung hình.
- Ít dự đoán hơn: Mỗi vị trí dự đoán một box thay vì một box cho mỗi hình dạng anchor, nên quá trình giải mã và NMS xử lý ít ứng viên hơn nhiều lần; 9 anchor trên mỗi vị trí của RetinaNet tạo ra tổng cộng khoảng 100.000 ứng viên cho mỗi ảnh.










