Yolo 비전 선전
선전
지금 참여하기
용어집

앵커 박스

앵커 박스가 객체 탐지를 위한 참조 템플릿으로 어떻게 작용하는지 알아보세요. 정확도를 향상시키는 방법과 Ultralytics 같은 모델이 앵커 프리(anchor-free) 설계를 활용하는 방식을 확인해 보세요.

앵커 박스는 특정 종횡비와 크기를 가진 미리 정의된 참조 사각형으로, 객체 탐지 모델이 객체를 위치 파악하고 분류하는 데 도움을 주기 위해 이미지에 배치됩니다. 신경망이 객체의 정확한 크기와 위치를 처음부터 예측하도록 요구하는 것(다양한 객체 형태로 인해 불안정할 수 있음) 대신, 모델은 이러한 고정된 템플릿을 출발점으로 사용합니다. 초기 박스를 실제 객체 위치에 맞추기 위해 얼마나 조정(회귀)해야 하는지 예측하는 법을 학습함으로써, 시스템은 더 빠른 수렴과 높은 정확도를 달성할 수 있습니다. 이 기술은 복잡한 객체 위치 파악 작업을 보다 관리 가능한 최적화 문제로 단순화함으로써 컴퓨터 비전(CV) 분야를 근본적으로 변화시켰습니다.

앵커 박스의 작동 원리

고전적인 앵커 기반 탐지기에서는 입력 이미지가 셀 격자로 분할됩니다. 각 셀 위치에서 네트워크는 서로 다른 기하학적 형태를 가진 여러 개의 앵커 박스를 생성합니다. 예를 들어 detect 넓은 차량을 동시에 detect 위해 모델은 동일한 중심점에 키가 크고 좁은 박스와 키가 작고 넓은 박스를 제안할 수 있습니다.

모델 훈련 과정에서 이러한 앵커들은 Intersection over Union(IoU)라는 지표를 사용하여 실제 객체와 비교됩니다. 라벨링된 객체와 상당한 중첩을 보이는 앵커들은 "양성" 샘플로 지정됩니다. 이후 네트워크는 두 가지 병렬 작업을 학습합니다:

  1. 분류: 앵커에 확률 점수를 할당하여 특정 클래스(예: "개" 또는 "자전거")를 포함할 가능성을 나타냅니다. 이는 크로스 엔트로피 손실과 같은 표준 감독 학습 목표를 사용합니다.
  2. 박스 회귀: 일반적인 앵커를 꼭 맞는 바운딩 박스로 변환하는 데 필요한 정확한 오프셋 값(좌표 이동 및 크기 조정 계수)을 계산합니다.

이 접근법은 서로 가까이 위치한 다양한 크기의 다중 객체를 모델이 처리할 수 있게 합니다. 각 객체는 자신의 형태와 가장 잘 일치하는 앵커에 할당될 수 있기 때문입니다.

실제 애플리케이션

새로운 아키텍처는 앵커 없는 설계로 전환되고 있지만, 객체 특성이 예측 가능한 기존 생산 시스템에서는 여전히 앵커 박스가 핵심적 역할을 수행한다.

  • 소매 및 재고 관리: 인공지능 기반 소매 솔루션에서는 카메라가 진열대 재고를 모니터링합니다. 시리얼 박스나 탄산음료 캔과 같은 제품들은 표준화된 치수를 가지므로, 앵커 박스를 이러한 특정 종횡비에 맞춰 조정할 수 있습니다. 이러한 사전 지식은 혼잡한 환경에서도 모델이 높은 재현율을 유지하는 데 도움이 됩니다.
  • 자율주행: 자율주행 차량의 인식 스택은 보행자, 차량 및 교통 표지판을 감지하는 데 의존합니다. 멀리서 보이는 차량은 도로에 비해 상대적으로 일관된 형상 프로파일을 가지므로, 이러한 형상에 맞춤화된 앵커를 사용하면 견고한 물체 추적 및 거리 추정이 보장됩니다.

앵커 기반 대 앵커 프리

전통적인 앵커 기반 방법과 현대적인 앵커 프리 탐지기를 구분하는 것이 중요하다.

  • 앵커 기반: 원본 Faster R-CNN이나 초기 YOLO (예: YOLOv5)과 같은 모델들은 이러한 사전 정의된 템플릿을 사용합니다. 이들은 견고하지만, 새로운 데이터셋에 적응하기 위해 하이퍼파라미터(앵커 크기/비율)의 수동 조정이나 k-means 클러스터링과 같은 클러스터링 알고리즘이 종종 필요합니다.
  • 앵커 프리: YOLO26을 포함한 고급 모델들은 종종 앵커 프리 또는 엔드 투 엔드 접근법을 채택합니다. 이러한 네트워크는 객체 중심점이나 키포인트를 직접 예측하여 수동 앵커 설정이 필요하지 않습니다. 이는 수천 개의 빈 배경 앵커를 처리하는 데 필요한 계산을 제거함으로써 아키텍처를 단순화하고 추론 속도를 높입니다.

예시: 앵커 정보 접근

현대적인 고수준 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) 가 필요하며, 이를 통해 각 객체에 대해 가장 신뢰도 높은 탐지 결과만 남도록 보장합니다.

Ultralytics 커뮤니티 가입

AI의 미래에 동참하세요. 글로벌 혁신가들과 연결하고, 협력하고, 성장하세요.

지금 참여하기