FSAF의 핵심은 물체 크기를 미리 정한 anchor 규칙에 끼워 맞추지 않고, 각 instance의 classification, regression loss가 가장 작은 feature pyramid 레벨을 학습 중에 선택하는 것입니다. Anchor-free는 box 회귀나 FPN이 사라진다는 뜻이 아니라 positive 위치와 레벨을 정하는 규칙이 달라진다는 뜻입니다. Effective, ignore 영역과 online loss 비교를 함께 봐야 선택 과정이 완성됩니다.
FSAF는 Anchor 없이 어떤 FPN 레벨을 고르나
Anchor 기반 레벨 할당에서 무엇이 문제였나
Feature Selective Anchor-Free Module은 피라미드형 single-shot detector에 붙이는 모듈입니다. 기존 anchor 기반 방식은 두 결정을 사람이 미리 정한 규칙에 크게 의존합니다.
- anchor의 크기와 종횡비를 휴리스틱하게 선택합니다.
- ground-truth와 anchor의 IoU overlap을 기준으로 학습 대상을 정합니다.
그 결과 비슷한 크기의 물체가 서로 다른 레벨에 배정되거나, 더 다른 크기의 물체가 같은 레벨에 놓이는 상황이 생길 수 있습니다.
FSAF는 feature 선택을 제한하는 anchor를 anchor-free branch에서 제거합니다. 각 피라미드 레벨에 독립된 branch를 붙이고, 학습 중 instance 자체의 loss로 레벨을 고릅니다.
이 branch는 anchor 기반 branch와 따로 실행할 수도 있고, RetinaNet에 붙여 함께 학습, 추론할 수도 있습니다.
Effective box와 Ignore box가 supervision을 만든다
기본 backbone은 RetinaNet이고 피라미드는 P3부터 P7까지 사용합니다. 각 레벨의 anchor-free branch는 classification과 regression subnet으로 구성됩니다.
- classification: 3×3 convolution과 sigmoid
- regression: 3×3 convolution과 ReLU
- 피라미드 레벨당 추가되는 convolution layer: 두 개
ground-truth box b를 레벨 l에 투영한 projected box는 다음과 같이 적습니다.
\[b_p^l = b / 2^l\]그 projected box를 기준으로 effective box와 ignore box를 만듭니다. 원문에 기록된 scale factor는 각각 0.2와 0.5입니다.
\[w_e^l = 0.2w_p^l,\quad h_e^l = 0.2h_p^l\] \[w_i^l = 0.5w_p^l,\quad h_i^l = 0.5h_p^l\]classification supervision은 세 영역으로 나뉩니다.
- effective box 내부: 해당 instance가 존재하는 positive 영역
- ignore box에서 effective box를 뺀 부분: 역전파에서 무시하는 영역
- 나머지 영역: object가 없는 negative 영역
두 instance box가 겹치면 더 작은 instance box에 우선순위를 둡니다. classification은 α=0.25, γ=2.0인 focal loss를 사용하며 ignore 영역은 계산에서 제외합니다.
regression은 effective box 안의 각 픽셀에서 projected box의 위, 왼쪽, 아래, 오른쪽 경계까지 거리를 예측합니다. 각 거리는 정규화 상수 S=0.4로 나누며, loss는 effective 영역의 IoU loss 평균입니다.
Online Feature Selection은 어떻게 결정되는가
한 instance를 모든 피라미드 레벨의 anchor-free branch에 통과시킨 뒤, 각 레벨에서 classification loss와 regression loss를 계산합니다.
\[L_{FL}^{I}(l) = \frac{1}{N(b_e^l)} \sum_{i,j \in b_e^l} FL(l,i,j)\] \[L_{IOU}^{I}(l) = \frac{1}{N(b_e^l)} \sum_{i,j \in b_e^l} IOU(l,i,j)\]최종적으로 두 loss의 합이 가장 작은 레벨을 그 instance의 학습 레벨로 선택합니다.
\[l^* = \arg\min_l \left( L_{FL}^{I}(l) + L_{IOU}^{I}(l) \right)\]이 수식에서 중요한 것은 “작은 물체는 무조건 특정 레벨” 같은 고정 표가 아닙니다. 같은 instance를 여러 레벨에서 실제로 평가하고, 현재 네트워크가 가장 잘 설명하는 레벨에 supervision을 주는 구조입니다.
Anchor 기반 branch와 함께 쓸 때의 경계
RetinaNet에 FSAF를 붙이면 anchor 기반 branch는 원래 방식으로 동작하고 anchor-free branch가 병렬로 추가됩니다. 전체 loss는 기존 anchor 기반 loss와 anchor-free classification, regression loss를 합칩니다.
\[L = L_{ab} + \lambda \left( L_{cls}^{af} + L_{reg}^{af} \right), \qquad \lambda = 0.5\]추론에서는 anchor-free confidence score 0.05를 기준으로 거르고, 각 피라미드 레벨에서 최대 1,000개 위치를 decoding합니다. anchor 기반 예측과 합친 뒤 threshold 0.5의 NMS로 최종 detection을 만듭니다.
원문에는 COCO 44.6% mAP라는 결과가 적혀 있지만, 이 값은 해당 논문의 모델과 실험 조건에 묶인 수치입니다. FSAF를 이해할 때 더 중요한 판단 포인트는 다음과 같습니다.
- anchor-free라고 해서 feature pyramid나 box regression이 사라지는 것은 아닙니다.
- 선택 단위는 모델 전체가 아니라 instance별 피라미드 레벨입니다.
- effective, ignore 영역 설계와 online loss 비교가 함께 있어야 선택이 성립합니다.
- anchor 기반 branch와 공동 사용도 가능한 모듈입니다.
구현 튜토리얼이 아니라 구조 해설인 이 글의 기준 자료는 FSAF 논문입니다.
한 instance의 학습 신호는 어떻게 만들어지나
먼저 ground-truth box를 각 FPN 레벨의 좌표계로 옮기고 중심 주변에 effective 영역을 정합니다. 이 영역의 위치는 해당 class의 positive와 box 경계 거리 회귀를 배웁니다. 더 바깥의 ignore 영역은 손실에서 제외해 positive 주변을 성급하게 background로 만들지 않습니다.
같은 instance를 여러 레벨에 임시로 놓고 classification과 regression의 평균 loss를 계산합니다. 가장 작은 합을 내는 레벨이 그 instance의 online 선택 결과가 되고, 해당 레벨의 신호가 최종 학습에 사용됩니다. 따라서 물체 크기만으로 고정 레벨을 정하는 규칙과 달리 현재 모델이 실제로 잘 다루는 레벨을 반영합니다.
오류를 볼 때는 선택 레벨과 결과를 함께 기록합니다. 작은 물체가 지나치게 낮은 해상도 레벨로 몰리는지, effective 영역이 너무 작아 positive가 부족한지, anchor branch와 함께 쓸 때 두 손실의 균형이 한쪽으로 기우는지를 봅니다. Anchor-free라는 이름만으로 튜닝 항목이 없어지는 것은 아닙니다.
함께 읽으면 이해가 이어지는 글
- Darknet YOLO Layer에서 ignore_thresh와 truth_thresh가 다른 이유 — Darknet yolo_layer가 모든 anchor의 배경 delta를 만든 뒤 IoU에 따라 무시, 양성 처리하고, ground truth를 최적 anchor mask에 배정하는 두 단계 학습 흐름을 설명합니다.
- SSD는 왜 8,732개 Default Box를 쓰나: 멀티스케일 구조 계산 — SSD의 여섯 feature map에서 8,732개 default box가 만들어지는 계산과 ground truth matching, localization, confidence loss, hard negative mining을…
- CornerNet은 Anchor 없이 박스를 어떻게 묶나: Heatmap, Embedding, Offset — CornerNet이 왼쪽 위, 오른쪽 아래 corner heatmap, embedding, offset을 예측하고 같은 class의 두 점을 하나의 bounding box로 묶는 과정을 설명합니다.
자주 묻는 질문
FSAF에서 anchor-free는 box regression도 없다는 뜻인가요?
아닙니다. 미리 정한 anchor와의 matching을 쓰지 않는다는 뜻이며, 선택된 feature 위치에서 물체 경계까지의 거리를 회귀해 box를 만듭니다.
Online Feature Selection은 모든 물체에 같은 FPN 레벨을 고르나요?
아닙니다. 각 instance가 각 레벨에서 내는 classification과 regression loss를 비교해 instance별로 가장 적합한 레벨을 선택합니다.
Ignore 영역은 왜 필요한가요?
Effective 영역 밖의 애매한 위치를 곧바로 배경 negative로 학습하면 같은 물체 주변에 상충하는 신호가 생길 수 있습니다. Ignore 영역은 그 위치의 손실을 제외합니다.
←→ 키와 좌우 스와이프를 지원합니다. 읽던 페이지는 이 기기에 저장됩니다.