Anchor Boxes
앵커 박스(Anchor Boxes)가 객체 탐지를 위한 참조 템플릿 역할을 하는 방식을 배워 보십시오. 이들이 어떻게 정확도를 향상하는지, 그리고 Ultralytics YOLO26과 같은 모델이 어떻게 앵커 프리 설계를 사용하는지 알아보십시오.
앵커 박스(Anchor box)는 이미지 전반에 배치되어 객체 검출 모델이 객체의 위치를 찾고 분류하는 것을 돕는, 특정 종횡비와 스케일을 가진 미리 정의된 기준 직사각형입니다. 방대한 종류의 객체 형태 때문에 불안정할 수 있는, 신경망에 객체의 정확한 크기와 위치를 처음부터 예측하도록 요구하는 대신, 모델은 이 고정된 템플릿을 시작점으로 사용합니다. 시스템은 이러한 초기 박스를 실제 정답(Ground truth)에 맞게 얼마나 조정하거나 "회귀(regress)"해야 하는지를 학습함으로써, 더 빠른 수렴과 더 높은 정확도를 달성할 수 있습니다. 이 기법은 복잡한 지역화 작업을 더욱 관리하기 쉬운 최적화 문제로 단순화함으로써 컴퓨터 비전 (CV) 분야를 근본적으로 변화시켰습니다.
Anchor Boxes의 메커니즘#
고전적인 앵커 기반 검출기에서 입력 이미지는 셀 그리드로 나뉩니다. 각 셀 위치에서 네트워크는 서로 다른 기하학적 형태를 가진 여러 개의 앵커 박스를 생성합니다. 예를 들어, 키가 큰 보행자와 폭이 넓은 차량을 동시에 검출하기 위해 모델은 동일한 중심점에서 길고 좁은 박스와 짧고 넓은 박스를 제안할 수 있습니다.
모델 학습 과정에서 이 앵커들은 IoU(Intersection over Union)라는 지표를 사용하여 실제 객체와 매칭됩니다. 레이블이 지정된 객체와 유의미하게 겹치는 앵커는 "양성(positive)" 샘플로 지정됩니다. 그런 다음 네트워크는 다음과 같은 두 가지 병렬 작업을 학습합니다:
-
분류: 특정 클래스(예: "개" 또는 "자전거")를 포함할 확률을 나타내는 확률 점수를 앵커에 할당합니다. 이는 교차 엔트로피 손실(Cross-entropy loss)과 같은 표준적인 지도 학습 목표를 사용합니다.
-
박스 회귀: 일반적인 앵커를 꼭 맞는 바운딩 박스로 변환하는 데 필요한 정밀한 오프셋 값(좌표 이동 및 스케일링 요소)을 계산합니다.
이 접근 방식은 각 객체가 자신의 모양과 가장 잘 일치하는 anchor에 할당될 수 있기 때문에 모델이 서로 가까이 위치한 서로 다른 크기의 여러 객체를 처리할 수 있도록 합니다.
실제 애플리케이션 사례#
더 새로운 아키텍처들은 anchor-free 설계로 이동하고 있지만, anchor boxes는 객체 특성이 예측 가능한 많은 기존 프로덕션 시스템에서 여전히 중요합니다.
- 소매 및 재고 관리: AI 기반 소매 솔루션에서 카메라는 선반 재고를 모니터링합니다. 시리얼 상자나 탄산음료 캔 같은 제품들은 표준화된 규격을 가지고 있기 때문에 앵커 박스를 이러한 특정 종횡비에 맞게 튜닝할 수 있습니다. 이러한 사전 지식은 모델이 복잡한 환경에서도 높은 재현율(Recall)을 유지하는 데 도움을 줍니다.
- 자율 주행: 자율 주행 차량의 인지 스택은 보행자, 차량, 교통표지판 감지에 의존합니다. 멀리서 본 자동차는 도로에 비해 상대적으로 일정한 형태 프로필을 가지므로, 이러한 형태에 맞춘 앵커를 사용하면 안정적인 객체 추적과 거리 추정을 보장할 수 있습니다.
Anchor-Based vs. Anchor-Free#
전통적인 앵커 기반 방식과 현대적인 앵커 프리 검출기를 구분하는 것은 중요합니다.
- Anchor-Based: Models like the original Faster R-CNN or early YOLO versions (e.g., Ultralytics YOLOv5) use these predefined templates. They are robust but often require manual tuning of hyperparameters (anchor sizes/ratios) or clustering algorithms like k-means clustering to adapt to new datasets.
- 앵커 프리: YOLO26을 포함한 고급 모델들은 종종 앵커 프리 또는 엔드투엔드(End-to-end) 방식을 채택합니다. 이 네트워크들은 객체의 중심이나 키포인트를 직접 예측하여 수동 앵커 구성의 필요성을 없애줍니다. 이는 수천 개의 빈 배경 앵커를 처리하는 데 필요한 연산을 제거함으로써 아키텍처를 단순화하고 추론(Inference) 속도를 높여줍니다.
예시: Anchor 정보 액세스하기#
Ultralytics Platform과 같은 현대의 고수준 API는 학습 과정에서 이러한 세부 사항들을 추상화하지만, 앵커를 이해하는 것은 구형 모델 아키텍처를 다루거나 모델 설정 파일을 분석할 때 유용합니다. 다음 스니펫은 모델을 로드하고 앵커 설정(있는 경우)이 일반적으로 정의되는 구성을 검사하는 방법을 보여줍니다.
from ultralytics import YOLO
# Load a pre-trained YOLO model (YOLO26 is anchor-free, but legacy configs act similarly)
model = YOLO("yolo26n.pt")
# Inspect the model's stride, which relates to grid cell sizing in detection
print(f"Model strides: {model.model.stride}")
# For older anchor-based models, anchors might be stored in the model's attributes
# Modern anchor-free models calculate targets dynamically without fixed boxes
if hasattr(model.model, "anchors"):
print(f"Anchors: {model.model.anchors}")
else:
print("This model architecture is anchor-free.")과제 및 고려 사항#
효과적이기는 하지만, 앵커 박스는 복잡성을 유발합니다. 이미지당 수만 개에 달하는 생성된 방대한 수의 앵커는 대부분의 앵커가 배경만을 다루기 때문에 클래스 불균형 문제를 야기합니다. Focal Loss와 같은 기법들은 쉬운 배경 예시들의 가중치를 낮춤으로써 이를 완화하는 데 사용됩니다. 추가적으로, 최종 출력은 일반적으로 중복되는 겹치는 박스들을 필터링하기 위해 NMS(Non-Maximum Suppression)를 필요로 하며, 이를 통해 각 객체에 대해 가장 확신에 찬 검출 결과만 남도록 보장합니다.






