YOLO9000: Better, Faster, Stronger 논문 요약

현서·2025년 8월 17일

논문

목록 보기
6/8
post-thumbnail

Abstract

YOLO9000은 9000개 이상의 객체 카테고리를 실시간으로 탐지할 수 있는 모델이다.
YOLOv2는 다양한 개선을 통해 속도와 정확도를 동시에 잡았다.
특히 Multi-scale Training을 도입해 해상도에 따라 속도 · 정확도 트레이드오프를 쉽게 조절할 수 있다.

성능은 67 FPS에서 76.8 mAP, 40 FPS에서 78.6 mAP로 당시 최첨단 모델인 Faster R-CNN(ResNet), SSD보다 더 뛰어나면서도 빠르다.

또한, COCO 탐지 데이터와 ImageNet 분류 데이터를 동시 학습(Joint Training) 하여, 탐지 데이터가 없는 클래스도 예측 가능하게 했다.
그 결과 ImageNet Detection에서 200개 클래스 중 44개만 탐지 데이터가 있음에도 19.7 mAP를 기록했고, 나머지 156개 클래스에서도 16.0 mAP를 달성했다.

YOLO9000은 단순한 성능 향상을 넘어서, 탐지 가능한 객체의 범위를 대폭 확장한 실시간 모델이라고 할 수 있다.


1. Introduction

객체 탐지는 본질적으로 빠르고 정확해야 하며, 다양한 객체를 인식할 수 있어야 한다. 하지만 기존 탐지 모델들은 여전히 제한된 소수의 클래스만 다룬다는 한계가 있었다.

  • 객체 탐지 데이터셋(COCO, VOC 등) → 수십~수백 개 클래스, 수십만 장 이미지 수준
  • 이미지 분류 데이터셋(ImageNet 등) → 수천~수만 개 클래스, 수백만 장 이미지 규모

이 차이가 생기는 이유는 라벨링 비용 때문이다.

  • 분류 데이터: “이건 고양이” 같은 태그만 붙이면 됨 → 저렴하거나 사용자 태그로 무료 수집 가능
  • 탐지 데이터: 객체마다 위치(바운딩 박스)를 지정해야 함 → 시간과 비용이 크게 듦

따라서 탐지 데이터셋이 ImageNet처럼 수만 개 클래스 규모로 확장되기는 어렵다.


논문에서는 이 문제를 해결하기 위해 새로운 접근을 제안한다.

계층적(hierarchical) 객체 분류 체계를 도입해 서로 다른 데이터셋을 결합

Joint Training(동시 학습):

  • 탐지 데이터 → 객체의 위치(Localization) 학습
  • 분류 데이터 → 다양한 클래스 학습

이 방법을 통해, 모델은 탐지 데이터가 없는 클래스도 인식할 수 있게 된다.

  1. 먼저 YOLO를 개선한 YOLOv2를 개발해 실시간 탐지 성능을 극대화했다.
  2. 이어서 COCO 탐지 데이터 + ImageNet 분류 데이터를 함께 학습시켰다.
  3. 그 결과, 9000개 이상의 객체 카테고리를 인식할 수 있는 YOLO9000이 완성되었다.

2. Better

YOLOv2는 YOLOv1의 한계를 극복하기 위해 여러 가지 개선을 도입했다.
이 과정에서 단순히 속도만이 아니라, 정확도와 안정성을 동시에 끌어올릴 수 있었다.

1. Batch Normalization

모든 convolution layer 뒤에 Batch Normalization을 추가했다.
그 결과 mAP가 약 +2% 향상했고, Overfitting이 줄어들어 Dropout 같은 추가적인 regularization(기계 학습 모델이 훈련 데이터에 과적합되는 것을 방지하고, 일반화 성능을 향상시키기 위한 기법)이 필요 없어졌다.

2. High Resolution Classifier

YOLOv1은 분류 단계에서 224x224 이미지를 쓰다가 탐지 단계에서 448x448을 사용했는데, 이때 네트워크가 해상도에 적응해야 하는 문제가 있었다.
YOLOv2는 아예 처음부터 448x448 크기로 pre-train을 진행하여 고해상도 입력에 익숙해지도록 했다.

결과적으로 mAP가 약 +4% 향상되었다.

3. Convolutional with Anchor Boxes

YOLOv1은 grid cell별로 랜덤한 bounding box 좌표를 학습했지만,
YOLOv2는 Anchor Box 개념을 도입했다.

Faster R-CNN처럼 offset만 학습하여 더 단순하고 안정적인 학습이 가능하고,
입력 크기를 416x416으로 조정해 최종 feature map이 13x13 크기가 되도록 설계했다.
→ 최종 output feature map의 크기가 홀수가 되도록 하여, feature map 내에 하나의 중심 cell(single center cell)이 존재할 수 있도록 했다. 하나의 중심 cell이 있으면 객체를 잘 포착할 수 있다고 한다.

Anchor를 도입하면서 Recall(재현율 : 실제로 맞는 것 중 모델이 제대로 맞춘 비율)은 상승(81% → 88%)했고, mAP(mean Average Precision : 탐지 성능 종합 점수)는 아주 조금 하락 (69.5% → 69.2%)했다.

anchor box를 사용하면 mAP 값이 감소하지만 recall 값이 상승했다.
이는 모델이 더 향상될 여지가 있음을 나타낸다고 한다.

4. Dimension Clusters

YOLOv2에서는 Anchor Box를 정의하는 방식에도 변화를 주었다.
기존에는 Anchor Box의 크기와 비율을 사람이 직접(hand-picked) 정하는 방식이었는데, 이런 방식은 데이터셋의 실제 분포를 반영하지 못한다는 한계가 있었다.

이를 해결하기 위해 YOLOv2는 K-means Clustering을 활용해 Anchor Box를 자동으로 설계하는 방법을 제안한다.
데이터셋에 있는 모든 ground truth box의 가로(width), 세로(height) 정보를 모아 클러스터링을 수행하는 것이다.
다만 일반적인 k-means에서 쓰이는 유클리드 거리(Euclidean distance)를 그대로 적용하면 큰 박스가 작은 박스보다 훨씬 큰 에러를 유발하는 문제가 생긴다.
이를 피하기 위해, 저자들은 1 − IoU(box, centroid) 라는 새로운 거리 척도를 사용했다.
IoU(Intersection over Union)가 높을수록 두 박스가 잘 겹치기 때문에, 두 개체가 “가깝다”고 보는 방식이다.

그렇다면 Anchor Box는 몇 개를 쓰는 게 적절할까?
저자들은 다양한 k값을 실험한 결과, k=5일 때 모델의 복잡도와 성능 사이의 균형이 가장 적절하다고 보았다.

흥미로운 점은, 사람이 임의로 정한 9개의 Anchor Box는 평균 IoU가 61.0인데 반해, 클러스터링으로 찾은 5개의 Anchor Box는 평균 IoU가 60.09로 거의 차이가 없었다는 점이다.
더 적은 수의 Anchor만으로도 충분히 좋은 성능을 낼 수 있었고, 이는 곧 네트워크가 학습을 더 쉽게 하고 효율적으로 탐지할 수 있음을 의미한다.

Dimension Clusters 기법은 단순히 Anchor Box의 개수를 늘리는 것이 아니라, 데이터에 맞춘 최적의 Anchor를 자동으로 찾아주는 방법이었다.
이 덕분에 YOLOv2는 Recall을 크게 높이고, 더 안정적인 탐지 성능을 확보할 수 있었다.

5. Direct Location Prediction

Anchor Box를 사용할 때 초기 학습이 불안정한 문제가 있었다.

기존 방식에서는 bounding box 좌표를 조정하는 계수(tx, ty)에 제약이 없어, 박스가 이미지 내 임의의 위치로 튀어나가 버리곤 했다.
이 때문에 최적의 값을 찾기까지 시간이 오래 걸리고, 학습 초기에 네트워크가 불안정했다.

이를 해결하기 위해 YOLOv2는 YOLOv1의 방식을 사용했다.
즉, grid cell 기준 상대 좌표(0~1 사이 값)를 예측하도록 바꾼 것이다. logistic regression 함수(σ)를 적용해 좌표값을 제한하자, 학습이 훨씬 안정적으로 이루어졌다.
또한 Dimension Clustering과 결합했을 때 Recall이 약 5% 향상되는 효과를 얻었다.

6. Fine-Grained Features

YOLOv2의 최종 출력 feature map은 13×13 크기이다.
큰 객체는 잘 잡아내지만, 작은 객체는 놓치기 쉽다는 단점이 있었다.
이를 보완하기 위해 저자들은 중간 단계의 더 세밀한 feature map을 활용했다.

마지막 pooling 전에 26×26×512 feature map을 추출하고,
이를 4개로 분할하고 결합(concat)해서 → 13×13×2048 feature map 생성했다.
그리고 기존 13×13×1024 feature map에 합쳐 최종적으로 13×13×3072 feature map 구성했다.

이 방식은 작은 객체에 대한 정보가 보강된 feature를 제공하며, 결과적으로 약 1%의 성능 향상을 이끌어냈다.

7. Multi-Scale Training

YOLOv2는 모델의 안정적인 성능을 위해 다양한 크기의 이미지를 학습에 활용했다.
매 10 batch마다 입력 이미지 크기를 랜덤으로 변경했고, 입력 이미지 크기는 320×320 ~ 608×608 사이의 32의 배수 크기를 사용했다. (모델은 이미지를 1/32배로 downsample시키기 때문)

이 덕분에 모델은 다양한 해상도에서 잘 동작하게 되었고, 속도와 정확도 간의 트레이드오프를 제공할 수 있게 되었다.

  • 작은 입력 이미지 → FPS(Frame Per Second)는 올라가지만 정확도(mAP)는 떨어짐
  • 큰 입력 이미지 → FPS(Frame Per Second)는 낮아지지만 정확도가 올라감

→ 하나의 모델로 상황에 맞춰 속도 중심, 정확도 중심 모두 대응이 가능해졌다.


3. Faster

1. Darknet-19

YOLOv2는 백본 네트워크로 Darknet-19라는 새로운 분류 모델을 사용한다.

이름 그대로 총 19개의 convolutional layer로 구성된 단순하면서도 가벼운 구조를 가지고 있으며, 객체 탐지와 분류 모두에 활용될 수 있도록 설계되었다.

YOLOv1에서는 네트워크 마지막에 fully connected layer(fc layer)를 사용해 최종 예측을 수행했다. 하지만 fc layer는 파라미터 수를 크게 늘려버려 모델이 무거워지고, 연산량이 많아져 속도도 느려지는 단점이 있었다.

YOLOv2의 Darknet-19는 이 문제를 해결하기 위해 fc layer 대신 global average pooling을 도입한다.

이 방식은 feature map 전체 평균을 내서 예측값을 만들기 때문에 파라미터 수가 획기적으로 줄어들고, 그만큼 탐지 속도도 빨라졌다.

2. Training for classification

Darknet-19는 먼저 ImageNet 분류 데이터셋(클래스 1000개)으로 학습된다.
네트워크 마지막에 global average pooling을 적용하면 출력이 1000개가 되고, 이는 ImageNet의 클래스 수와 정확히 일치한다.

이 사전 학습 결과, Darknet-19는 Top-1 정확도 76.5%, Top-5 정확도 93.3%의 성능을 기록했다.

3. Training for detection

하지만 Darknet-19를 그대로 탐지에 사용하기에는 부족하다.
그래서 YOLOv2는 detection task에 맞게 네트워크 구조를 수정한다.

마지막 conv layer를 제거하고, 대신 3×3 conv (1024 channel)을 추가했다.
이어서 1×1 conv layer를 붙여 최종 출력을 예측하도록 설계했다.

여기서 1×1 conv layer의 채널 수는 125로 설정된다.

  • 각 grid cell마다 5개의 bounding box를 예측
  • bounding box 하나당 예측해야 할 값은: (x, y, w, h, confidence) 5개 + 클래스 score 20개 (PASCAL VOC 데이터셋 기준)
  • 즉, 25 × 5 = 125

4. Stronger

YOLO9000은 YOLOv2를 한 단계 더 확장해, 분류(classification) 데이터와 탐지(detection) 데이터를 함께 학습시켜 훨씬 더 많은 클래스까지 예측할 수 있도록 만든 모델이다.

단순히 분류 데이터와 탐지 데이터를 합쳐 학습하면 문제가 생긴다.

탐지 데이터셋(COCO, VOC 등)은 일반적이고 넓은 범주의 객체를 다룬다. ex) “개(dog)”라는 하나의 클래스만 존재

분류 데이터셋(ImageNet 등)은 더 세부적인 클래스를 포함한다. ex) “요크셔 테리어”, “불독”처럼 같은 개를 여러 품종으로 나눈다.

따라서 그냥 합쳐 학습하면, 모델이 “개”와 “요크셔 테리어”를 전혀 다른 독립적인 클래스라고 오해할 수 있다.

1. Hierarchical classification

논문에서는 이 문제를 해결하기 위해 계층적 분류(Hierarchical classification)를 도입했다.

ImageNet의 레이블을 바탕으로 WordTree라는 계층적 트리를 구성한다.

루트는 “물리적 객체(physical object)”이고, 그 아래에 동물, 포유류, 개, 테리어… 이런 식으로 가지가 뻗어나간다.

예를 들어 “요크셔 테리어”라는 클래스는 “물리적 객체 → 동물 → 포유류 → 개 → 사냥개 → 테리어”를 따라 내려가면 도달할 수 있다.

이 구조에서는 특정 클래스의 확률을, 루트부터 그 클래스까지 내려가는 조건부 확률의 곱으로 표현한다.
예: 요크셔 테리어일 확률 = (테리어일 확률) × (사냥개일 확률) × (개일 확률) × … × (동물일 확률).

결국 WordTree는 “개”와 “요크셔 테리어”를 따로 떼어내지 않고, 상하위 관계 속에서 함께 표현할 수 있게 해주는 구조다.

2. Dataset combination with WordTree

이 방법으로 COCO 탐지 데이터셋과 ImageNet 분류 데이터셋을 WordTree 위에서 결합할 수 있다.

  • COCO의 “개(dog)” 클래스는 WordTree에서 “개” 노드에 대응된다.
  • ImageNet의 “요크셔 테리어”는 그 하위 노드에 연결된다.

이렇게 하면 두 데이터셋을 동시에 학습시켜도 충돌이 일어나지 않고, 모델은 “개”라는 일반적 개념과 “요크셔 테리어”라는 세부 개념을 모두 학습할 수 있게 된다.

3. Joint classification and detection

YOLO9000은 COCO와 ImageNet을 합쳐 9418개의 클래스를 가지는 WordTree를 구성했다. 데이터셋의 비율은 ImageNet : COCO = 4 : 1로 조정되었다.

탐지 데이터(COCO)를 볼 때

  • 일반적인 detection loss를 계산한다.
  • classification loss는 해당 클래스와 상위 범주까지만 계산한다.
  • 예: COCO는 “개(dog)”까지만 있으므로, “물리적 객체 → 동물 → 포유류 → 개” 경로에 대한 확률만 사용.

분류 데이터(ImageNet)를 볼 때

  • detection loss는 계산하지 않고, classification loss만 계산한다.
  • 이때 ground truth box와 예측 박스 간 IoU가 0.3 이상일 때만 역전파를 진행한다.

이 방식으로 학습하면, YOLO9000은 COCO 데이터 덕분에 객체가 이미지 안 어디에 있는지(localization)를 배우고, ImageNet 덕분에 더 세밀하고 다양한 클래스를 배울 수 있다.


5. Conclusion

YOLOv2는 당시 가장 빠르면서도 정확한 모델이었다.
입력 이미지 크기를 조절해 속도와 정확도 사이에서 자유롭게 선택할 수 있었고, 여러 개선을 통해 실시간 성능과 정확도를 동시에 잡았다.

그리고 YOLO9000은 무려 9,000개 이상의 객체를 탐지할 수 있는 최초의 모델이다. COCO(탐지 데이터)랑 ImageNet(분류 데이터)을 WordTree라는 구조로 합쳐서, 탐지와 분류를 동시에 학습할 수 있게 했다는 아이디어가 인상적이었다.

WordTree나 Multi-scale Training, 그리고 데이터셋 결합 같은 기법들은 앞으로 분류나 세그멘테이션 같은 다른 비전 과제에도 확장할 수 있다. 약지도 학습이나 더 정교한 라벨 매칭을 통해 더 강력한 모델로 발전할 수 있다.


profile
The light shines in the darkness.

0개의 댓글