딥러닝 기반 객체 탐지(Object Detection) 분야에서 굉장히 유명한 모델인 YOLO(You Only Look Once)에 대해 알아보자.
YOLO는 한 번의 이미지 처리로 객체 위치와 종류를 동시에 예측할 수 있는 방법인데, 이게 왜 대단한지 논문을 통해 알아보도록 한다...
이전의 객체 탐지 방식은 “분류(Classification)” 모델을 억지로 탐지에 쓰는 구조였다.
이미지를 여러 영역으로 잘라서 각각을 “고양이냐, 개냐, 아니냐?” 식으로 분류하고 그 결과로 물체가 있는 위치를 찾는 방식이었다.
문제는 이 과정이 단계가 많고 느리다는 것이었다.
YOLO는 발상을 완전히 바꾸어 객체 탐지를 하나의 회귀 문제(Regression Problem) 로 바라본다.
입력 이미지를 통째로 보고, 한 번에 물체의 위치(바운딩 박스) 와 그 물체의 종류(클래스 확률) 를 예측한다.
중간 과정 없이 단일 신경망(One Single Neural Network) 으로 처음부터 끝까지(End-to-End) 학습한다.
결과적으로, 복잡한 파이프라인 없이 깔끔하게 처리된다.
기본 YOLO 모델 : 초당 45장(45 FPS) → 실시간 처리 가능
Fast YOLO 모델 : 무려 초당 155장(155 FPS) → 다른 실시간 모델보다 mAP(mean average precision 정확도 지표) 가 2배 이상 높음
장점: 배경을 잘못 인식해서 물체라고 착각하는 경우(False Positive)가 적음
단점: 물체 위치를 잡을 때 조금 부정확한 경우(Localization Error)가 상대적으로 많음
YOLO는 일반화 능력(Generalization) 이 뛰어나서 자연 사진으로만 학습했는데도 미술 작품 같은 전혀 다른 스타일의 이미지에서도 잘 작동한다.
사람은 사진을 한 번 스윽 보면 무엇이 어디에 있는지 바로 파악한다.
운전을 하거나, 길을 걷거나, 물건을 집는 것 같은 복잡한 행동도 이런 시각 능력 덕분에 빠르고 정확하게 할 수 있다.
만약 컴퓨터도 이렇게 빨리 객체를 찾고 인식할 수 있다면?
자율주행 자동차가 특별한 센서 없이도 도로를 볼 수 있고
시각장애인을 위한 실시간 장면 안내 기기가 가능하고
다양한 로봇 시스템이 훨씬 똑똑해질 수 있다.
전통적인 객체 탐지 방식은 분류(Classification) 모델을 억지로 탐지에 활용했다.
DPM: 슬라이딩 윈도우 방식 → 이미지를 여러 위치/크기로 잘라서 전부 검사
R-CNN 계열: 먼저 영역 후보(Region Proposal)를 만들고, 그 위에 분류기를 돌린 뒤 후처리(Post-processing)
이런 방식은 단계가 많고 느리며, 각 단계가 따로따로 학습돼야 하니 최적화가 어렵다.
YOLO는 객체 탐지를 “하나의 회귀 문제”로 재정의한다.
이미지를 한 번만 보고(You Only Look Once) 바로 바운딩 박스 좌표와 해당 객체의 클래스 확률을 동시에 예측한다.

YOLO 구조
이 단순함 덕분에, 복잡한 파이프라인 없이 처음부터 끝까지 한 번에 처리한다.
YOLO의 장점
빠르다: Titan X GPU에서 45 FPS, Fast YOLO는 150 FPS 이상 → 실시간 영상 처리 가능
전역적 시각: 한 번에 이미지를 통째로 보기 때문에 배경 오탐(False Positive)이 적음
일반화 능력: 자연 사진으로 학습해도 그림, 예술작품 등 다른 도메인에서도 잘 작동
YOLO의 단점
단점: 작은 객체의 위치를 정확히 잡는 데 약함(Localization Error)
YOLO는 기존 객체 탐지(Object Detection)의 여러 단계를 하나의 신경망 안에 통합했다.
이미지를 통째로 보고 한 번에 모든 클래스와 모든 바운딩 박스를 예측하는 구조이다.
이 방식 덕분에 YOLO는 End-to-End 학습이 가능하고, 실시간 처리 속도를 유지하면서도 높은 정확도를 낼 수 있다.
YOLO는 입력 이미지를 S × S 그리드로 나눈다.
객체의 중심점이 특정 셀에 속하면, 그 셀이 그 객체를 담당한다.
예를 들어 S=7이면, 이미지는 7×7 = 49개의 셀로 나뉘고, 각 셀은 자신이 맡은 객체를 예측한다.
각 그리드 셀은 B개의 바운딩 박스와 Confidence Score를 예측한다.
- Bounding Box: 총 5개 값 → (x, y, w, h, confidence)
x, y : 셀 내부에서의 중심 좌표(0~1)
w, h : 이미지 전체 크기 대비 상대 너비·높이(0~1)
confidence : “이 박스에 객체가 있을 확률 × IOU”
Confidence Score

조건부 클래스 확률 (C개)

테스트할 때는 다음을 계산해 Class-Specific Confidence Score를 구한다.

이 값은 해당 클래스일 확률과 박스 정확도(IOU)를 모두 반영한다.

논문 실험 설정 (PASCAL VOC)
- S = 7 → 7×7 그리드
- B = 2 → 셀당 2개의 바운딩 박스
- C = 20 → 클래스 개수
- 최종 출력 텐서 크기: 7×7×(2×5+20)=7×7×30

YOLO의 기본 구조
YOLO 모델은 합성곱 신경망(Convolutional Neural Network, CNN) 으로 구현된다.
YOLO는 이미지 분류 분야에서 유명한 GoogLeNet 모델에서 영감을 받았다.
GoogLeNet의 복잡한 Inception 모듈 대신,
이 조합을 반복해서 사용한다.
네트워크 세부 구성
YOLO 기본 버전:
24개의 Convolution Layer
2개의 Fully Connected Layer
Fast YOLO:
9개의 Convolution Layer (24 → 9로 축소)
필터 수도 줄임
학습/테스트 파라미터는 동일 → 단지 네트워크가 더 가벼움
학습 과정
YOLO 모델은 학습을 두 단계로 진행한다.
먼저 ImageNet 데이터셋으로 사전 학습(Pretraining)을 하고, 이후 이를 객체 검출에 맞게 변환해 다시 학습한다.
1. 사전 학습 (Pretraining)
연구진은 1,000개의 클래스를 가진 ImageNet 분류 데이터셋으로 모델의 컨볼루션 계층을 먼저 학습시켰다.
이때 24개의 컨볼루션 계층 중 앞쪽 20개만 사용하고, 그 뒤에 전결합(Fully Connected) 계층을 연결했다. 이렇게 만든 분류 네트워크를 약 1주일간 훈련했으며, ImageNet 2012 검증셋에서 Top-5 정확도 88%를 기록했다.
이 과정은 Darknet 프레임워크에서 진행됐다.
Darknet은 YOLO를 만든 Joseph Redmon이 직접 개발한 신경망 프레임워크로, 가볍고 빠르며 C 기반으로 작성되어 있다.
지금도 YOLO를 직접 실행하려면 Darknet을 사용하는 경우가 많다.
2. 객체 검출 네트워크로 변환
ImageNet은 ‘분류’ 데이터셋이기 때문에, 이 모델을 그대로는 객체 검출에 사용할 수 없다. 연구진은 사전 학습된 네트워크의 20개 Conv Layer 뒤에 4개의 Conv Layer와 2개의 FC Layer를 새로 추가했다. 이 새 계층들의 가중치는 랜덤 초기화로 시작한다.
또한, 객체 검출은 더 세밀한 위치 정보를 필요로 하기 때문에 입력 이미지 해상도를 224×224 → 448×448로 늘렸다.
해상도를 두 배로 키운 덕분에 작은 물체까지 상대적으로 잘 잡을 수 있게 됐다.
최종 출력은 클래스 확률(class probabilities) 과 바운딩 박스 좌표(coordinates)다.
바운딩 박스 좌표에는 중심 좌표 (x, y)와 너비(w), 높이(h)가 포함되며, 모두 0~1 사이 값으로 정규화된다.
마지막 층에는 선형 활성화 함수(linear activation) 를 적용하고, 나머지 계층에는 Leaky ReLU를 사용했다.
ReLU는 음수를 0으로 만들지만, Leaky ReLU는 음수도 작은 값으로 통과시켜 정보 손실을 줄인다.
leaky ReLU 공식
3. 손실 함수 설계
YOLO의 손실 함수는 SSE(sum-squared error) 를 기반으로 하지만, 그대로 사용하면 몇 가지 문제가 있다.
Localization Loss와 Classification Loss의 가중치가 동일 → 위치 예측의 중요도가 충분히 반영되지 않음
객체 없는 셀이 훨씬 많음 → Confidence Score가 0인 경우가 대부분이라 학습이 불균형해짐
큰 박스와 작은 박스의 오차를 동일하게 계산 → 작은 박스는 아주 작은 위치 오차에도 IOU가 크게 변함
이를 해결하기 위해 연구진은 몇 가지 보정을 적용했다.
λ_coord = 5 : 좌표 예측의 가중치를 높여 Localization Loss의 중요도를 강조
λ_noobj = 0.5 : 객체가 없는 셀의 Confidence Loss 가중치를 줄여 학습 균형 유지
√w, √h 사용 : 큰 박스의 크기 변화는 영향이 적게, 작은 박스는 변화가 크게 반영되도록 설계
또한, 하나의 셀이 여러 개의 박스를 예측하더라도 학습 시에는 IOU가 가장 높은 박스 예측기만 그 객체를 담당하게 했다. 이렇게 하면 각 박스 예측기가 특정 크기·비율·클래스에 특화되어 더 잘 예측할 수 있게 된다.
훈련 단계에서 사용하는 loss function
4. 학습 과정과 하이퍼파라미터
YOLO는 PASCAL VOC 2007, 2012 훈련·검증 데이터셋을 사용해 135 epoch 동안 학습했다.
학습률(learning rate)은 초반에 0.001에서 시작해 점진적으로 0.01까지 올렸다.
만약 처음부터 높은 값을 주면 기울기 폭발(gradient explosion)이 발생할 수 있기 때문에, 이렇게 서서히 올린 후 다시 점진적으로 줄였다.
5. 과적합 방지
모델이 훈련 데이터에만 최적화되는 것을 막기 위해 Dropout과 Data Augmentation을 적용했다.
YOLO는 추론 단계에서도 하나의 신경망 연산만으로 객체를 검출할 수 있다.
테스트 이미지가 입력되면, YOLO는 해당 이미지에서 98개의 바운딩 박스를 예측하고, 각 박스마다 클래스 확률(class probabilities)을 계산한다.
이 구조 덕분에 YOLO는 R-CNN 계열과 달리, 여러 번의 신경망 계산을 거칠 필요가 없어서 테스트 속도가 매우 빠르다.
다만, YOLO의 그리드 설계(grid design)에는 한 가지 한계가 있다.
객체가 크거나, 그리드 셀의 경계 부근에 위치한 경우,
하나의 객체가 여러 개의 그리드 셀에서 동시에 예측될 수 있다.
이렇게 되면 같은 객체에 대해 여러 개의 바운딩 박스가 생성되는 다중 검출(multiple detections) 문제가 발생한다.
이를 해결하기 위해 YOLO는 비최대 억제(Non-Maximum Suppression, NMS) 기법을 적용한다.
NMS는 여러 박스 중에서 가장 신뢰도가 높은 박스를 남기고,
나머지 중 겹침(IOU)이 일정 기준 이상인 박스는 제거한다.
이를 적용하면 mAP가 약 2~3% 향상된다.
YOLO는 효율적이고 빠른 객체 검출 모델이지만, 구조적인 한계도 존재한다.
1) 공간적 제약(Spatial Constraints)
YOLO는 하나의 그리드 셀마다 두 개의 바운딩 박스를 예측하지만, 한 셀에서는 단 하나의 객체만 검출할 수 있다.
이 규칙 때문에, 하나의 셀에 두 개 이상의 객체가 위치한 경우 성능이 떨어진다.
예: 새 떼처럼 작은 물체들이 한곳에 몰려 있는 경우, 일부 객체는 검출되지 않는다.
그리드 셀 단위의 객체 배정이 강제되기 때문에, 촘촘하게 분포한 작은 객체 탐지에는 취약하다.
2) 새로운 종횡비(Aspect Ratio)에 대한 적응력 부족
YOLO는 학습 데이터로부터 바운딩 박스 크기와 형태를 예측하는 방법을 학습한다.
그런데 훈련에서 본 적 없는 새로운 종횡비의 객체를 만나면 정확한 박스 예측이 어렵다.
이는 YOLO가 고정된 방식의 박스 예측을 하기 때문에, 다양한 비율의 객체에 유연하게 대응하지 못하는 구조적 한계다.
3) 작은 객체의 Localization 문제
YOLO는 큰 박스와 작은 박스의 오차를 동일한 가중치로 계산한다.
큰 객체: 박스 위치가 조금 변해도 IOU 변화가 크지 않아 성능 영향이 적다.
작은 객체: 위치가 조금만 변해도 IOU 변화가 커져 성능이 급격히 떨어진다.
이 때문에 작은 객체의 위치를 정밀하게 맞추는 데 어려움이 있다.
YOLO의 성능을 이해하려면 당시 대표적인 객체 검출 모델들과 비교해보는게 좋다.
1) DPM (Deformable Parts Model)
방식: 슬라이딩 윈도(Sliding Window) 기반
구조: 하나로 연결된 단일 네트워크가 아닌,
특징 추출 (Feature Extraction)
영역 분류 (Region Classification)
바운딩 박스 예측 (Bounding Box Prediction)
각각이 분리된 파이프라인으로 존재
YOLO와의 차이:
YOLO는 이러한 여러 단계를 하나의 CNN으로 통합
특징 추출 → 박스 예측 → 비 최대 억제(NMS)까지 한 번의 네트워크 연산으로 수행
결과적으로 DPM보다 훨씬 빠르고 정확
2) R-CNN (Region-based CNN)
방식: 슬라이딩 윈도 대신 Region Proposal 사용
절차:
Selective Search로 다수의 후보 영역(Bounding Box) 생성
CNN으로 각 영역에서 특징 추출
SVM으로 박스 점수 계산
선형 회귀로 박스 위치 보정
비 최대 억제(NMS)로 중복 박스 제거
단점: 각 단계가 독립적으로 동작 → 튜닝 복잡, 속도 매우 느림
한 이미지를 처리하는 데 40초 이상 소요
정확도는 높지만, 실시간 객체 검출에는 부적합
YOLO와의 차이:
YOLO는 한 번의 연산으로 모든 단계 수행 → 속도 압도적 우위
R-CNN: 이미지당 약 2,000개의 박스 예측
YOLO: 이미지당 98개의 박스 예측 (더 효율적)
YOLO는 그리드 기반이라 중복 검출 빈도 낮음
YOLO의 성능을 객관적으로 검증하기 위해, 당시의 다른 실시간 객체 검출 모델과 비교한 결과를 살펴본다. 특히 Fast R-CNN과의 성능 차이를 중심으로 분석한다.
객체 검출 연구는 꾸준히 빨라지고 있었지만, 많은 모델들은 여전히 복잡한 파이프라인 때문에 실시간 처리에 어려움이 있었다.
YOLO 연구진은 GPU 버전 YOLO의 성능을 30Hz / 100Hz DPM과 비교했고, 추가로 Fast R-CNN, Faster R-CNN 등과도 비교 실험을 진행했다.
① YOLO vs Fast YOLO
② YOLO (기본 모델)
③ YOLO + VGG-16
④ 다른 모델 비교

실시간 객체 검출로 쓰려면 최소 30 FPS 이상은 필요하다.
정확도가 아무리 높아도, 속도가 받쳐주지 않으면 실시간 시스템에서는 의미가 없다. YOLO 계열은 이 균형을 잘 맞춘 모델이다.
YOLO와 Fast R-CNN의 성능 차이를 좀 더 세부적으로 들여다보기 위해,
논문 "Diagnosing Error in Object Detectors"에서 제안한 에러 측정 방법을 적용했다.
검출 결과는 다음 다섯 가지로 분류된다.
분석 결과, YOLO는 Localization Error 비중이 높았다.
Localization Error는 19.0%로, 나머지 오류를 모두 합친 15.5%(6.75% + 4.0% + 4.75%)보다 크다. 즉, 물체를 찾기는 하지만 정확한 위치를 잡는 데 어려움이 있었다는 뜻이다.
반면 Fast R-CNN은 Localization Error는 적었지만, Background Error가 훨씬 높았다. YOLO보다 3배나 많았는데, 이는 배경에 아무것도 없는데 물체가 있다고 잘못 판단하는 경우가 많았다는 의미다.

YOLO는 Background Error가 적고, Fast R-CNN은 Localization이 강하다.
따라서 두 모델을 결합하면 서로의 단점을 보완할 수 있다.
Fast R-CNN이 예측한 모든 bounding box에 대해
YOLO도 해당 위치에 비슷한 박스를 예측하는지 확인
겹치는 경우에만 최종 박스로 채택
이렇게 하면 잘못된 배경 검출을 줄이면서도, 위치 정확도를 높일 수 있다.
실제로 Pascal VOC 2007에서 Fast R-CNN 단독 mAP는 71.8%였지만, YOLO와 결합하면 75.0%로 3.2% 향상됐다.
다른 모델과의 앙상블에서는 0.3%~0.6% 향상에 그쳤기 때문에, YOLO와의 조합이 특히 효과적이었다.
속도 측면에서는 YOLO를 함께 돌리더라도 Fast R-CNN 단독 실행과 큰 차이가 없었다. YOLO가 워낙 빠르기 때문이다.

Pascal VOC 2012 기준 YOLO의 mAP는 57.9%였다. 이는 VGG-16 기반 R-CNN과 비슷한 수준이다.
정확도는 YOLO + Fast R-CNN 조합이 가장 높았고, 속도는 단연 YOLO가 가장 빨랐다.

대부분의 객체 검출 연구는 훈련 데이터와 테스트 데이터가 같은 분포를 따른다.
하지만 실제 환경에서는 그렇지 않다. 훈련에서 보지 못한 도메인에서도 잘 작동해야 한다.
연구진은 이를 검증하기 위해, 사람 검출(Person Detection)을 예술 작품(Artwork) 데이터셋에서 실험했다.
결과는 흥미로웠다.
즉, YOLO는 도메인이 달라져도 상대적으로 강건한 모델이었다.

YOLO는 빠른 속도 덕분에 실제 애플리케이션에 바로 적용 가능하다.
연구진은 YOLO를 웹캠과 연결해 실시간 객체 검출을 시연했다.
재미있는 점은, YOLO가 프레임별로 독립적으로 이미지를 처리함에도 마치 추적(tracking) 시스템처럼 동작했다는 것이다.
객체가 움직이거나 모양이 변해도 계속해서 안정적으로 검출했다.

YOLO는 단일 네트워크로 특징 추출 → 객체 위치 예측 → 클래스 예측을 한 번에 처리하는 간단한 구조를 가진다.