앵커 박스가 객체 탐지를 위한 참조 템플릿으로 어떻게 작용하는지 알아보세요. 정확도를 향상시키는 방법과 Ultralytics 같은 모델이 앵커 프리(anchor-free) 설계를 활용하는 방식을 확인해 보세요.
앵커 박스는 특정 종횡비와 크기를 가진 미리 정의된 참조 사각형으로, 객체 탐지 모델이 객체를 위치 파악하고 분류하는 데 도움을 주기 위해 이미지에 배치됩니다. 신경망이 객체의 정확한 크기와 위치를 처음부터 예측하도록 요구하는 것(다양한 객체 형태로 인해 불안정할 수 있음) 대신, 모델은 이러한 고정된 템플릿을 출발점으로 사용합니다. 초기 박스를 실제 객체 위치에 맞추기 위해 얼마나 조정(회귀)해야 하는지 예측하는 법을 학습함으로써, 시스템은 더 빠른 수렴과 높은 정확도를 달성할 수 있습니다. 이 기술은 복잡한 객체 위치 파악 작업을 보다 관리 가능한 최적화 문제로 단순화함으로써 컴퓨터 비전(CV) 분야를 근본적으로 변화시켰습니다.
고전적인 앵커 기반 탐지기에서는 입력 이미지가 셀 격자로 분할됩니다. 각 셀 위치에서 네트워크는 서로 다른 기하학적 형태를 가진 여러 개의 앵커 박스를 생성합니다. 예를 들어 detect 넓은 차량을 동시에 detect 위해 모델은 동일한 중심점에 키가 크고 좁은 박스와 키가 작고 넓은 박스를 제안할 수 있습니다.
모델 훈련 과정에서 이러한 앵커들은 Intersection over Union(IoU)라는 지표를 사용하여 실제 객체와 비교됩니다. 라벨링된 객체와 상당한 중첩을 보이는 앵커들은 "양성" 샘플로 지정됩니다. 이후 네트워크는 두 가지 병렬 작업을 학습합니다:
이 접근법은 서로 가까이 위치한 다양한 크기의 다중 객체를 모델이 처리할 수 있게 합니다. 각 객체는 자신의 형태와 가장 잘 일치하는 앵커에 할당될 수 있기 때문입니다.
새로운 아키텍처는 앵커 없는 설계로 전환되고 있지만, 객체 특성이 예측 가능한 기존 생산 시스템에서는 여전히 앵커 박스가 핵심적 역할을 수행한다.
전통적인 앵커 기반 방법과 현대적인 앵커 프리 탐지기를 구분하는 것이 중요하다.
현대적인 고수준 API(예: Ultralytics )는 훈련 과정에서 이러한 세부 사항을 추상화하지만, 구형 모델 아키텍처를 다루거나 모델 구성 파일을 분석할 때는 앵커를 이해하는 것이 유용합니다. 다음 코드 조각은 모델을 로드하고 구성을 검사하는 방법을 보여줍니다. 앵커 설정(존재할 경우)은 일반적으로 여기서 정의됩니다.
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) 가 필요하며, 이를 통해 각 객체에 대해 가장 신뢰도 높은 탐지 결과만 남도록 보장합니다.