You Only Look Once: Unified, Real-Time Object Detection

홍선재·2025년 5월 6일

Abstract

YOLO는 기존 방식과는 다르게 객체 탐지를 분류하는 문제가 아니라 회귀(regression) 문제로 접근하는 모델이다. 한 번의 이미지 입력으로 바로 바운딩 박스 좌표랑 클래스 확률까지 모두 예측해버리는 통합형 네트워크이다.

이게 왜 대단하냐면 원래는 후보 영역 뽑고 → 분류기 돌리고 → 결과 정제

이런식으로 복잡한 파이프라인을 돌렸지만 YOLO는 그런 거 없이 그냥 이미지 한 장 딱 넣고 바로 결과를 뽑는다. 그래서 속도도 빠르고 정확도 높고 구조가 깔끔하다.


Introduction

YOLO는 기존의 복잡한 객체 탐지 방식을 아예 깔끔하게 재정의한 모델이다. 우릭 ㅏ이미지를 한 번 보고 어떤 물체가 어디 있는지 빠르게 파악하듯이 컴퓨터도 그렇게 이미지 한 장 만 보고 한 번에 모든 객체를 예측할 수 없을까?라는 아이디어에서 출발한 것이 욜로이다.

기존에 대표적인 객체 탐지 방법들인 DPM(Deformable Part-based Model)같은 전통적인 방식은 이미지를 잘게 나눠 슬라이딩 윈도우 방식으로 훑어 보면서 각 영역마다 분류기를 돌리는 구조였다. 최근 R-CNN 계열도 region proposal을 먼저 뽑고 그걸 분류기에 넣은 다음 후처리까지 거치는 방식이라 전체 파이프라인이 복잡하고 느렸다. 무엇보다 이런 방식은 각 단계를 따로 학습해야 해서 전체 모델을 최적화하기도 어려웠다. 그런데 YOLO는 이걸 아주 간단하게 바꿨다. 객체 탐지를 분류가 아니라 회귀문제로 보고 이미지 전체를 한 번에 입력으로 받아 바운딩 박스 좌표(x, y, w, h)랑 클래스 확률까지 모두 한 번에 예측해버린다. 딥러닝 모델 하나로 탐지 과정을 통합한 거다. 그래서 이름도 you only look once 한국 말로 이미지를 한 번만 본다이다.
YOLO가 재미있는 또 하나의 이유는, 이미지를 통째로 보기 때문에 객체 주변의 문맥(context) 정보를 잘 활용할 수 있다는 점이다. 기존 모델처럼 작은 부분만 보고 판단하지 않으니, 배경을 객체로 착각하는 오탐(false positive)이 적다. 실제로 YOLO는 Fast R-CNN보다 배경 오탐 비율이 절반 이상 적다고 한다
물론 단점도 있다. YOLO는 빠르긴 하지만, 작은 객체나 정확한 위치를 잡는 데는 조금 약한 면이 있다. 이런 부분은 논문에서도 실험을 통해 따로 분석하고 개선 방향을 제시하고 있다.


2. Unified Detection

YOLO의 핵심적인 장점 중 하나는 객체 탐지를 단일한 신경망 구조 안에서 통합적으로 수행한다는 점이다. 기존의 객체 탐지 모델들이 영역 제안(region proposal), classification, 후처리(post-precessing) 등 다단계 과정을 거쳐야 했지만 YOLO는 이러한 복잡한 절차를 하나의 통합된 모델 안에서 단번에 해겨랗는 방식을 채택한다.

YOLO는 입력 이미지를 SxS 크기의 그리드로 나눈다. 각 그리드 셀은 그 안에 중심점이 위치한 객체에 대한 예측을 수행하는 책임을 갖는다. 이때 각 셀은 B개의 바운딩 박스를 예측하며, 각각의 박스는 총 다섯 개의 값을 포함한다. 이 값들은 바운딩 박스의 중심 좌표 (x,y) 너비와 높이(w,h) 그리고 confidence score로 구성되어 있다. 여기서 confidence는 해당 박스가 실제 객체를 포함하고 있을 확률과 그 예측 박스가 정답 박스와 얼마나 잘 겹치는지를 나타내는 IoU(Intersection over Union)를 곱한 값으로 정의된다. 뿐 만 아니라 각 셀은 C개의 조건부 클래스 확률도 예측한다 이는 해당 셀이 객체를 포함하고 있을때 그 객체가 각 클래스에 속할 활률을 나타낸다. 욜로는 이 확률들과 confidence score를 곱하여 클래스별 최종 신뢰도를 계산한다. 이는 다음과 같은 수식으로 표현된다.

Pr(Class_i | Object) × Pr(Object) × IoU = Pr(Class_i) × IoU.

이러한 구조로 인해 욜로의 최종 출력은 (S × S × (B × 5 + C)) 크기의 3차원 텐서 형태를 갖는다. 예를 들어, PASCAL VOC 데이터셋의 경우 S=7, B=2, C=20이므로, 최종 출력은 7 × 7 × 30 텐서가 된다. 이는 이미지 상의 모든 그리드 셀에 대해 예측된 바운딩 박스 정보와 클래스 확률 정보를 모두 포함하는 형태다.

요약하면 욜로는 이미지 전체를 한 번에 입력받아 각 그리드 셀 단위로 객체의 위치와 클래스 정보를 동시에 예측한다. 이 과정은 단 하나의 forward pass로 수행되며 그 결과물 출력 텐서에는 객체의 존재 유뮤, 위치, 클래스 정보가 모두 통합되어 있다. 이러한 구조는 실시간 성능이 요구되는 응용 환경(자율주행, 로봇 비전)에서 매우 효과적으로 작동할 수 있도록 설계되어 있다.

2.1 Network Design

YoLO는 객체 탐지를 하나의 회귀 문제로 보고 이걸 CNN 기반 네트워크로 구현했다. 기본 구조는 다음과 같다.

  • 합성곱 층 24개
  • 전결합 층 2개(Fully Conneted Layers)

합성곱 층들은 이미지에서 특징을 추출하고 전결합 층은 그걸 기반으로 바운딩 박스 좌표와 클래스 확률을 예측한다.

YOLO는 GoogLeNet에서 아이디어를 얻었지만 inception 모듈은 사용하지 않고 대신 간단한 구조를 택했다.

구체적으로는 1x1 크기의 conv layer로 채널 수를 줄이고, 3x3 conv layer로 특징을 추출하는 구조다. 이 방식은 Network in Network 구조와 비슷하다.

출력 형태

YOLO의 최종 출력은 7 x 7 x 30 텐서다.

  • 7x7: 그리드 셀 수
  • 30: 2개의 바운딩 박스 x 5개 값(x, y, w, h, confidence) + 20개의 클래스 확률

Fast YOLO

속도를 더 높이기 위한 경량 모델도 있다.

Fast YOLO는 conv layer 수를 24개에서 9개로 줄이고, 각 layer의 필터 수도 적다.

나머지 학습 설정은 동일하다.

→ 속도는 빠르지만 정확도는 조금 떨어진다.


2.2 Training

YOLO는 end-to-end 방식으로 학습된다. 즉, 이미지 전체를 입력으로 받고, 바운딩 박스 좌표와 클래스 확률까지 모두 한 번에 학습한다.

각 그리드 셀이 예측해야 하는 것

  • 바운딩 박스 좌표 (x, y, w, h)
  • 박스의 confidence score (객체가 있을 확률 x IoU)
  • 클래스 확률 분포

손실함수 (Loss Function)

YOLO의 손실 함수는 custom multi-part loss 형태다.

총 세가지 요소를 함께 고려한다.

  1. 좌표 손실 (Localization loss)
    • 예측한 박스 좌표 (x, y, w, h) 가 얼마나 정확한지
    • MSE를 사용
    • 특히 w, h는 log scale 대신 (width),(height)√(width) , √(height)로 예측 → 큰 값에 덜 민감하게
  2. Confidence 손실
    • 박스가 실제로 객체를 포함할 확률과 IoU 사이의 차이
    • 객체가 있는 셀은 실제 IoU에 수렴하게 학습
    • 객체가 없는 셀은 confidence가 0에 가깝게
  3. 클래스 확률 손실
    • 해당 셀이 예측한 클래스 분포와 실제 클래스 간의 차이
    • Cross-entropy 대신 MSE 사용

책임 할당 (responsibility)

YOLO는 한 객체에 대해 하나의 그리드 셀만 예측 책임을 갖게 함.

그리고 그 셀 내에 있는 B개의 박스 중 IoU가 가장 높은 박스 하나만 실제 정답에 대해 책임지도록 설정한다.

이 방식은 중복 학습을 막고, 각 객체가 딱 하나의 박스에만 영향을 주도록 조절한다.

요약

  • 단일 네트워크로 end-to-end 학습
  • MSE 기반의 custom loss function 사용
  • 좌표 예측은 √값으로 confidence는 IoU 기반
  • 하이퍼파라미터로 좌표/배경 감도 조절
  • 하나의 객체는 하나의 그리드 셀 + 하나의 박스에만 책임 부여

2.3 Inference

학습이 끝난 후 실제 이미지를 넣고 객체를 탐지하는 과정이 바로 inference다 .YOLO의 inference는 매우 단순하다.

  1. 전체 이미지 입력

    7x7 그리드로 나눔

  2. 각 그리드 셀이 B개의 바운딩 박스 + 클래스 확률 예측

  3. 클래스별 confidence score 계산

    각 박스마다 :

    클래스 확률 × confidence score = Pr(Class_i) × IoU

    이게 곧 “이 박스가 이 클래스일 확률 + 박스가 얼마나 잘 맞는지”를 나타내는 최종 점수

  4. 전체 박스 중 confidence가 일정 기준 이상인 것만 선택

    (ex 0.2 이상 등으로 threshold 설정)

  5. Non-Maximum Suppression (NMS) 적용

    겹치는 박스들 중 가장 confidence 높은 것 하나만 남기고 나머지는 제거

테스트 할때도 이미지 전체를 한번에 처리한고 각 그리드 셀이 객체 탐지 결과를 예측한다. 클래스 확률과 IoU를 곱해서 최종 confidence score를 산출하고 NMS로 중복 제거한다.

YOLO의 inference는 한번에 끝내는 구조다 따로 region proposal을 생성하거나 후처리 복잡하게 하지 않고 네트워크 출력 값에 threshold랑 NMS만 적용하면 바로 결과를 얻을 수 있다.


4. Experiment

YOLO vs Faster R-CNN

항목YOLOFaster R-CNN
속도 (FPS)훨씬 빠름느림
정확도 (mAP)약간 낮음 (ex. 63.4% on VOC 2007)더 높음 (ex. 66.0%)
오탐지 (False Positives)배경에 대해 오탐률 낮음배경에서 오탐률 높음
전역 정보 사용 여부이미지 전체를 보고 예측 → 문맥 반영 가능제한된 region만 보고 예측 → 문맥 약함
  • YOLO는 속도 면에서는 압도적이다. 실시간 처리 목적이라면 Faster R-CNN보다 훨씬 적합하다.
  • Faster R-CNN은 위치(localization) 정확도가 더 좋지만, 배경을 객체로 착각하는 오탐이 많다.
  • YOLO는 전체 이미지를 한 번에 보면서 예측하기 때문에 전역적인 문맥 정보를 잘 활용한다.
  • 결과적으로, YOLO는 덜 정밀하지만 훨씬 빠르고 안정적이며, 특히 실시간 응용에 더 잘 맞는다.

0개의 댓글