Anchor-Based Detectors
Detector dựa trên anchor dự đoán đối tượng dưới dạng độ lệch so với anchor box định sẵn, như trong Faster R-CNN, SSD, RetinaNet và YOLOv5. Cách hoạt động và so sánh.
Bộ phát hiện dựa trên anchor là các model phát hiện đối tượng xếp các anchor box định sẵn trên ảnh, rồi dự đoán điểm số lớp và độ lệch biến mỗi anchor thành một bounding box khớp với đối tượng. Nhóm này bao gồm các model hai giai đoạn như Faster R-CNN, trong đó mạng đề xuất vùng chấm điểm anchor để tạo các vùng ứng viên, và các model một giai đoạn như SSD, RetinaNet và YOLOv2 đến YOLOv5, trực tiếp phân loại và tinh chỉnh từng anchor. Anchor là phương pháp tiêu chuẩn để định vị đối tượng từ Faster R-CNN năm 2015 cho đến khi các bộ phát hiện không dùng anchor như FCOS đạt độ chính xác tương đương vào năm 2019.
Cách phát hiện dựa trên anchor hoạt động#
Backbone và neck chuyển ảnh thành các feature map; một tập anchor cố định với nhiều kích thước và tỷ lệ khung hình được đặt tại mỗi ô trên từng map. Với mỗi anchor, đầu phát hiện dự đoán một điểm số cho mỗi lớp, cộng với điểm objectness trong YOLOv2 đến YOLOv5, và bốn giá trị hồi quy. Phép mã hóa được sử dụng rộng rãi từ Faster R-CNN dịch chuyển tâm anchor theo tỷ lệ của chiều rộng và chiều cao, đồng thời nhân chiều rộng và chiều cao của anchor với hàm mũ:
import torch
# One anchor as (center x, center y, width, height) in pixels
anchor = torch.tensor([320.0, 240.0, 64.0, 128.0])
# Offsets (tx, ty, tw, th) that the regression branch predicts for this anchor
tx, ty, tw, th = torch.tensor([0.25, -0.10, 0.20, -0.05])
# Faster R-CNN decoding: shift the center in units of anchor size, scale width and height exponentially
cx = anchor[0] + tx * anchor[2]
cy = anchor[1] + ty * anchor[3]
w = anchor[2] * torch.exp(tw)
h = anchor[3] * torch.exp(th)
print(f"anchor 64x128 at (320, 240) -> box {w:.1f}x{h:.1f} at ({cx:.1f}, {cy:.1f})")Anchor trở thành một bounding box 78,2 × 121,8 pixel, tâm tại (336,0; 227,2): box dịch sang phải 16 pixel và lên trên 12,8 pixel, rộng thêm 22% (exp(0.2)) và thấp đi 5% (exp(−0.05)). Vì các offset được tính tương đối theo kích thước của anchor, cùng một bộ giá trị dự đoán có thể áp dụng cho cả anchor nhỏ lẫn anchor lớn.
Trong quá trình suy luận, bộ phát hiện giải mã mọi anchor theo cách này, loại bỏ các box thấp hơn ngưỡng độ tin cậy, rồi chạy loại bỏ cực đại không tối đa (NMS) để loại bỏ các box trùng lặp từ những anchor lân cận.
Huấn luyện: gán nhãn cho từng anchor#
Trong quá trình huấn luyện, mỗi anchor được gán nhãn dựa trên giao trên hợp (IoU) với các box đã gán nhãn. RetinaNet sử dụng các ngưỡng sau:
Mạng đề xuất vùng của Faster R-CNN sử dụng các giá trị nghiêm ngặt hơn: 0.7 và 0.3. Với 9 anchor trên mỗi vị trí ở năm tầng kim tự tháp, RetinaNet có tổng cộng khoảng 100.000 anchor cho mỗi ảnh, gần như tất cả đều là mẫu âm tính; focal loss giảm trọng số của các mẫu âm tính dễ này để chúng không lấn át quá trình huấn luyện.
Các kiến trúc dựa trên anchor chính#
- Bộ phát hiện hai giai đoạn: Mạng đề xuất vùng của Faster R-CNN chấm điểm anchor là đối tượng hoặc nền, rồi tinh chỉnh chúng thành khoảng 300 vùng đề xuất cho mỗi ảnh; một đầu thứ hai phân loại và tinh chỉnh từng vùng đề xuất. Khi dùng backbone VGG-16, mô hình đạt 5 FPS trên GPU; Mask R-CNN bổ sung một nhánh mask vào cùng thiết kế.
- Bộ phát hiện đối tượng một giai đoạn: SSD, RetinaNet và các model YOLO từ YOLOv2 đến YOLOv5 phân loại và tinh chỉnh mọi anchor chỉ trong một lượt. YOLOv2 thay thế anchor được chọn thủ công bằng các cụm k-means từ chiều rộng và chiều cao của box huấn luyện.
YOLOv5 của Ultralytics dựa trên anchor, với 3 anchor ở mỗi trong ba tầng đầu ra; mô hình ghép nhãn với anchor theo hình dạng: một anchor là ứng viên khi cả chiều rộng lẫn chiều cao của nhãn đều nằm trong phạm vi 4× kích thước tương ứng của anchor. Các biến thể YOLOv5u trong package Ultralytics thay đầu này bằng đầu tách không dùng anchor được giới thiệu trong YOLOv8, thiết kế tiếp tục được YOLO26 sử dụng.
Bộ phát hiện dựa trên anchor và không dùng anchor#
Bộ phát hiện không dùng anchor dự đoán box từ mỗi điểm lưới dưới dạng khoảng cách tới bốn cạnh, hoặc từ keypoint như tâm đối tượng; nhờ vậy, chúng không cần tinh chỉnh kích thước anchor, tỷ lệ khung hình hay ngưỡng IoU và tạo một ứng viên trên mỗi vị trí thay vì một ứng viên trên mỗi hình dạng anchor. ATSS xác định nguyên nhân chênh lệch độ chính xác giữa RetinaNet và FCOS không dùng anchor là cách mỗi mô hình chọn mẫu huấn luyện dương tính: khi dùng cùng quy tắc chọn, cả hai đạt độ chính xác như nhau; RetinaNet đạt 39.2 AP trên COCO minival với 9 anchor trên mỗi vị trí và 39.3 AP với 1 anchor.










