앵커 박스(Anchor Box)는 객체 검출에서 "여기에 물체가 있을 수 있다"고 미리 제안하는 사전 정의된 바운딩 박스입니다. 모델이 처음부터 박스를 만드는 게 아니라, 미리 깔아둔 박스를 조정(refine)하는 방식이에요.
왜 앵커가 필요한가?
이미지에서 물체의 위치, 크기, 형태는 무한하죠. 처음부터 (x, y, w, h)를 자유롭게 예측하면 탐색 공간이 너무 넓어요. 앵커는 이 탐색 공간을 합리적인 초기값으로 줄여줍니다. "대략 이 근처에 이 정도 크기"에서 시작해서 미세 조정만 하면 되니까요.
앵커의 3가지 요소:
1. 위치(Position): 이미지를 그리드로 나누고, 각 셀 중심에 앵커를 배치
- 피처맵 크기가 13x13이면 169개 위치에 앵커 배치
- 피처맵 크기가 52x52이면 2,704개 위치에 앵커 배치
2. 스케일(Scale): 물체 크기에 대응하는 박스 크기
- 작은 물체: 32x32, 64x64
- 중간 물체: 128x128, 256x256
- 큰 물체: 512x512
3. 종횡비(Aspect Ratio): 물체 형태에 대응하는 가로세로 비율
- 1:1 — 정사각형 (사람 얼굴, 시계)
- 1:2 — 세로 (사람, 전봇대)
- 2:1 — 가로 (자동차, 버스)
프레임워크별 앵커 설정:
- Faster R-CNN: 3 스케일 x 3 비율 = 셀당 9개 앵커
- YOLOv2/v3: FPN 3개 층 x 층당 3개 = 총 9개 앵커
- SSD: 6개 피처맵 x 다양한 앵커 = 총 8,732개 후보 박스
- RetinaNet: 3 스케일 x 3 비율 = 셀당 9개 앵커
모델이 예측하는 것:
각 앵커마다 2가지를 예측합니다:
1. 분류(Classification): 이 앵커 안에 물체가 있는가? → confidence score
2. 회귀(Regression): 앵커를 얼마나 이동/변형할까? → (dx, dy, dw, dh) 오프셋
NMS(Non-Maximum Suppression)는 Neubeck과 Van Gool이 체계적으로 분석한 중복 제거 알고리즘이다 (Neubeck et al., 2006).