Anchor-Based Detectors
앵커 기반 검출기는 Faster R-CNN, SSD, RetinaNet, YOLOv5처럼 객체를 사전 정의된 앵커 박스 기준의 오프셋으로 예측합니다. 작동 방식과 비교를 다룹니다.
앵커 기반 감지기는 이미지 전체에 사전 정의된 앵커 박스를 타일처럼 배치하고 각 앵커에 대해 클래스 점수와, 앵커를 적합한 바운딩 박스로 변환하는 오프셋을 예측하는 객체 감지 모델입니다. 이 계열에는 영역 제안 네트워크가 앵커 점수를 계산해 후보 영역을 생성하는 Faster R-CNN과 같은 2단계 모델, 그리고 모든 앵커를 직접 분류하고 조정하는 SSD, RetinaNet, YOLOv2부터 YOLOv5까지의 1단계 모델이 포함됩니다. 2015년 Faster R-CNN부터 2019년 FCOS와 같은 앵커 프리 감지기가 비슷한 정확도에 도달할 때까지 앵커는 객체 위치를 찾는 표준 방식이었습니다.
앵커 기반 감지 작동 방식#
백본과 넥은 이미지를 특징 맵으로 변환하며, 각 맵의 모든 셀에는 여러 크기와 종횡비로 구성된 고정 앵커 세트가 배치됩니다. 각 앵커에 대해 감지 헤드는 클래스별 점수 하나씩과 YOLOv2부터 YOLOv5까지의 객체성 점수, 그리고 회귀값 4개를 예측합니다. 널리 사용되는 Faster R-CNN의 인코딩 방식은 앵커의 너비와 높이에 대한 비율만큼 중심을 이동시키고, 너비와 높이를 지수적으로 조정합니다.
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})")앵커는 (336.0, 227.2)를 중심으로 하는 78.2 × 121.8픽셀 크기의 상자가 됩니다. 오른쪽으로 16픽셀, 위쪽으로 12.8픽셀 이동했고, 너비는 22%(exp(0.2)) 증가했으며 높이는 5%(exp(−0.05)) 감소했습니다. 오프셋이 앵커의 크기를 기준으로 하므로 동일한 예측값을 크고 작은 앵커 모두에 사용할 수 있습니다.
추론 시 감지기는 모든 앵커를 이 방식으로 디코딩하고, 신뢰도 임계값보다 낮은 박스를 제거한 다음, 인접 앵커에서 발생한 중복을 제거하기 위해 비최대 억제(NMS)를 실행합니다.
학습: 앵커별 레이블 지정#
학습 시 레이블이 지정된 박스와의 교집합 대비 합집합(IoU)을 기준으로 모든 앵커에 레이블을 지정합니다. RetinaNet은 다음 임계값을 사용합니다.
Faster R-CNN의 영역 제안 네트워크는 더 엄격한 값인 0.7과 0.3을 사용합니다. 5개 피라미드 레벨에서 위치마다 앵커 9개를 사용하는 RetinaNet은 이미지당 앵커가 약 100,000개에 달하며, 거의 대부분이 음성 샘플입니다. RetinaNet의 포컬 로스는 학습을 압도하지 않도록 이러한 쉬운 음성 샘플의 가중치를 낮춥니다.
주요 앵커 기반 아키텍처#
- 2단계 감지기: Faster R-CNN의 영역 제안 네트워크는 앵커가 객체인지 배경인지 점수를 매기고 앵커를 정제해 이미지당 약 300개의 제안을 생성합니다. 두 번째 헤드는 각 제안을 분류하고 정제합니다. VGG-16 백본을 사용하면 GPU에서 5 FPS로 실행되며, Mask R-CNN은 동일한 설계에 마스크 브랜치를 추가합니다.
- 1단계 객체 감지기: SSD, RetinaNet, 그리고 YOLOv2부터 YOLOv5까지의 YOLO 모델은 한 번의 처리로 모든 앵커를 분류하고 정제합니다. YOLOv2는 수작업으로 선택한 앵커를 학습 박스의 너비와 높이에 k-means 클러스터링을 적용해 얻은 앵커로 대체했습니다.
Ultralytics YOLOv5는 앵커 기반 모델로, 세 개의 출력 레벨 각각에 앵커 3개를 사용하며 형태에 따라 레이블을 앵커와 매칭합니다. 레이블의 너비와 높이가 모두 앵커보다 4배 이내인 경우 해당 앵커를 후보로 간주합니다. Ultralytics 패키지의 YOLOv5u 변형 모델은 해당 헤드를 YOLOv8에서 도입한 앵커 프리 분할 헤드로 대체하며, YOLO26도 이 설계를 이어갑니다.
앵커 기반 감지기와 앵커 프리 감지기 비교#
앵커 프리 감지기는 각 그리드 지점에서 네 모서리까지의 거리로 박스를 예측하거나, 객체 중심과 같은 키포인트를 사용합니다. 따라서 조정해야 하는 앵커 크기, 종횡비 또는 IoU 임계값이 없으며, 앵커 형태마다 하나씩 생성하는 대신 위치마다 후보 하나를 생성합니다. ATSS는 RetinaNet과 앵커 프리 FCOS 간 정확도 격차의 원인이 양성 학습 샘플을 선택하는 방식에 있음을 밝혔습니다. 두 모델에 동일한 선택 규칙을 적용하면 같은 정확도를 달성했으며, RetinaNet은 위치당 앵커 9개를 사용할 때 COCO minival에서 39.2 AP를 기록했고, 앵커 1개를 사용할 때는 39.3 AP를 기록했습니다.










