Vision & Multimodal · CVPR 2016 2016
YOLO: 단일 신경망으로 실시간 통합 객체 감지
객체 감지를 이미지 전체에 대한 단일 회귀 문제로 재정의 — 후보 영역 생성 없이 한 번의 순전파로 박스와 클래스를 동시에 예측해 45~155 FPS 실시간 감지를 실현했다.
1. 핵심 요약
2. 왜 중요한가 — 쉬운 설명
30초 비유
친구에게 사진 한 장을 보여주고 “여기 뭐가 있어?”라고 물으면, 친구는 사진을 한 번 훑어보고 바로 “왼쪽에 강아지, 오른쪽에 사람 두 명”이라고 답합니다. 사진 구석구석을 하나씩 확대해서 따로따로 살펴본 뒤 답하지 않습니다.
2016년 이전의 객체 감지 AI는 정확히 그 “구석구석 따로 확대해서 보는” 방식이었습니다. 사진에서 “여기 뭔가 있을 것 같다”는 후보 영역을 약 2000개나 뽑아낸 뒤, 그 하나하나를 AI에 다시 보여주며 “이게 뭐야?”를 물었습니다. 정확하긴 했지만 사진 한 장에 47초씩 걸릴 정도로 느렸습니다.
YOLO의 발상은 “친구처럼 하자”입니다. 이름 그대로 You Only Look Once — 사진을 딱 한 번만 보고, 그 자리에서 바로 “뭐가 어디에 있는지”를 전부 답하게 만들었습니다.
YOLO가 제안한 해결책
- 사진에 격자를 긋는다 — 사진을 7×7 바둑판처럼 나눕니다. 각 칸은 “내 안에 물체의 중심이 있으면, 그 물체는 내 담당”이라는 규칙으로 스스로 답을 냅니다.
- 모든 칸이 동시에 답한다 — 49개 칸이 각자 “여기 물체 있어? 어디에, 얼마나 크게, 무슨 종류로?”를 한 번에 계산합니다. 순서대로 하나씩 보는 게 아니라 전부 동시에 봅니다.
- 후보 영역 생성 단계를 통째로 없앤다 — “여기를 자세히 볼 가치가 있을까?”를 미리 고민하는 단계 자체가 없습니다. 그 고민에 쓰던 시간이 통째로 절약됩니다.
그래서 무엇이 달라졌나
- 이미지 한 장 처리 속도가 47초 → 1초의 몇십 분의 1로 줄었습니다(초당 45~155장). 카메라가 찍는 영상을 실시간으로 “보면서” 반응하는 게 처음으로 가능해졌습니다.
- 정확도(mAP)는 당시 가장 정확한 모델들보다 다소 낮았습니다 — “빠르지만 살짝 덜 정확한” 트레이드오프를 세상에 처음 명확히 보여준 사례입니다.
- 자율주행차, 드론, CCTV처럼 “지금 이 순간 뭐가 보이는지”가 중요한 모든 분야에 실시간 AI 비전을 열었고, 이후 YOLOv2~v8로 이어지며 지금도 산업 표준으로 쓰입니다.
더 공부할 가치가 있을까?
- 그렇다 — 자율주행, 로보틱스, 영상 감시처럼 “실시간으로 화면을 이해해야 하는” 분야에 관심이 있다면 필수적인 배경 지식입니다.
- 먼저 볼 것 — CNN으로 이미지 분류가 어떻게 되는지(예: AlexNet)만 알면 이 논문을 이해하는 데 충분합니다. R-CNN을 몰라도, 이 논문의 배경 설명만으로 “왜 느렸는지”는 파악할 수 있습니다.
- 굳이 아니어도 됨 — 순수 이미지 분류(“이 사진 전체가 무슨 클래스인가”)만 다룬다면, “객체 감지는 위치+클래스를 동시에 찾는 문제”라는 한 줄만 알아둬도 충분합니다.
3. 배경 · 2단계 감지의 비용
R-CNN(2014)은 (1) Selective Search로 약 2000개 후보 영역 생성 → (2) 각 후보에 CNN 적용 → (3) SVM으로 분류하는 3단계 파이프라인으로, 이미지 한 장에 약 47초가 걸렸습니다. Fast R-CNN·Faster R-CNN이 속도를 크게 개선했지만, 여전히 후보 영역 생성과 분류가 분리된 2단계 구조라 실시간 처리에는 미치지 못했습니다.
YOLO의 질문은 단순합니다: “객체 감지를 공간적으로 분리된 바운딩 박스와 클래스 확률의 회귀 문제로 풀 수 있지 않을까?” 후보를 먼저 뽑고 나중에 분류하는 대신, 하나의 신경망이 이미지를 보자마자 바로 위치와 클래스를 동시에 출력하게 만드는 것입니다.
왜 YOLO인가
R-CNN 계열 2단계 감지의 4가지 부담과 YOLO의 대응. 카드를 클릭하세요.
R-CNN은 이미지마다 Selective Search로 약 2000개의 후보 영역을 먼저 만들고, 그 각각을 따로 처리합니다. YOLO는 후보 영역 자체가 없습니다 — 이미지를 S×S 그리드로 나누고 각 셀이 직접 박스를 예측합니다.
4. YOLO 아키텍처 · 그리드 회귀
이미지를 S×S 그리드(기본 S=7)로 분할합니다. 객체 중심이 속한 셀이 그 객체를 담당하도록 규칙을 정하고, 각 셀은 B개(기본 2)의 바운딩 박스와 C개 클래스 확률을 예측합니다.
- (x, y): 박스 중심 좌표 — 셀 경계 기준 상대 좌표
- (w, h): 박스 너비·높이 — 이미지 전체 대비 비율
- Confidence: 아래 공식으로 정의 (객체 존재 여부 × 위치 정확도)
- C개 클래스 확률: P(클래스 | 객체) — 셀당 한 세트만 예측 (박스별이 아님)
S×S 그리드 · 셀당 예측
B를 고르고 칸을 클릭하세요. 객체 중심이 든 칸(★)만 그 객체를 담당합니다.
강아지의 중심이 이 셀 안에 있으므로, 이 셀이 그 객체를 담당합니다. B=2개의 박스 (x,y,w,h,confidence)를 예측하고, IoU가 더 높은 쪽만 학습 신호를 받습니다. 클래스 확률 20개(P(class|object))는 셀당 한 세트만 예측 — "dog 0.82"처럼 하나의 분포를 공유합니다.
5. 손실 함수
손실 함수 5개 항
각 항을 클릭해 왜 필요한지 확인하세요.
객체를 담당하는 박스만(1ᵢⱼᵒᵇʲ) 예측 중심 (x,y)와 정답 중심의 제곱오차를 계산합니다. 배경 셀이 훨씬 많으므로 λ_coord=5로 이 신호를 키우지 않으면 위치 학습이 약해집니다.
가중치 크기 비교: 좌표 손실(5)을 가장 크게, 배경 confidence(0.5)를 가장 작게 — 대부분이 배경인 그리드에서 학습 신호의 균형을 맞춥니다.
모든 항이 제곱합오차(sum-squared error) — 구현이 단순하다는 이유로 채택했지만, 실제로는 위치·크기·confidence·클래스가 서로 다른 스케일을 갖는 문제가 있습니다. 이를 두 가지 장치로 보정합니다: (1) λ_coord=5로 좌표 손실을 키워 대부분이 배경인 그리드에서 위치 학습 신호가 묻히지 않게 하고, (2) λ_noobj=0.5로 배경 confidence 손실을 낮춰 압도적으로 많은 배경 항이 객체 신호를 덮어버리지 않게 합니다. 너비·높이에 제곱근을 씌우는 것도 같은 맥락 — 큰 박스와 작은 박스의 같은 절대 오차가 다른 심각도로 반영되게 만듭니다.
6. 네트워크 구조
24 Conv + 2 FC 파이프라인
블록을 클릭하세요.
GoogLeNet에서 영감을 받아, Inception 모듈 대신 1×1 합성곱으로 채널을 줄이고 3×3 합성곱으로 특징을 뽑는 패턴을 반복합니다(총 24개 conv layer). 계산량을 억누르면서 층을 깊게 쌓습니다.
GoogLeNet에서 영감을 받은 24개 합성곱 레이어 + 2개 완전연결 레이어. Inception 모듈 대신 1×1 합성곱(채널 축소) + 3×3 합성곱(특징 추출)을 반복하는 더 단순한 구조를 씁니다. 경량판인 Fast YOLO는 conv 레이어를 9개로 줄여 mAP를 낮추는 대신 155 FPS까지 속도를 끌어올립니다 — 같은 아키텍처 철학 안에서의 속도·정확도 다이얼입니다.
7. 학습 레시피
네트워크는 처음부터 감지 태스크로 학습되지 않습니다. 먼저 앞쪽 20개 conv 레이어만 떼어 평균 풀링과 FC층을 얹어 ImageNet 1000-클래스 분류로 224×224 해상도에서 사전학습합니다. 그다음 이 20개 레이어에 4개 conv + 2개 FC 레이어를 추가하고, 입력 해상도를 448×448로 올려 감지 태스크로 파인튜닝합니다 — 세밀한 시각 정보가 필요한 감지에서는 더 큰 입력이 유리하기 때문입니다.
마지막 층을 제외한 모든 층은 Leaky ReLU(음수 구간 기울기 0.1)를 씁니다. 과적합을 막기 위해 첫 FC층 뒤에 Dropout(rate 0.5)을 두고, 원본 크기의 최대 20%까지 무작위 스케일링·이동을 가하며 HSV 색공간에서 노출·채도를 최대 1.5배까지 무작위로 조정하는 데이터 증강을 적용합니다.
PASCAL VOC 2007+2012 학습·검증 데이터로 총 135 epoch, 배치 크기 64, momentum 0.9, weight decay 0.0005로 학습합니다. 학습 초반 불안정한 그레디언트로 손실이 발산하는 것을 막기 위해 학습률을 낮은 값에서 서서히 올리는 워밍업 후, 단계적으로 낮추는 스케줄을 씁니다.
| 설정 / Setting | 값 / Value |
|---|---|
| 사전학습 해상도 / Pretrain resolution | 224×224 (20 conv layers, ImageNet) |
| 파인튜닝 해상도 / Fine-tune resolution | 448×448 (+4 conv, +2 FC) |
| 활성화 함수 / Activation | Leaky ReLU (slope 0.1), 마지막 층은 linear / last layer linear |
| Dropout | 0.5 (첫 FC 뒤 / after first FC) |
| 데이터 증강 / Augmentation | 스케일·이동 ±20%, HSV 노출·채도 ×1.5 / scale·shift ±20%, HSV exposure·saturation ×1.5 |
| 학습 스케줄 / Schedule | 135 epochs · batch 64 · momentum 0.9 · weight decay 0.0005 |
8. 실험 결과
| 모델 / Model | mAP | FPS |
|---|---|---|
| SSD300 (2016) | 74.3% | 46 |
| Faster R-CNN (VGG-16) | 73.2% | 7 |
| YOLO | 63.4% | 45 |
| Faster R-CNN (ZF) | 62.1% | 18 |
| YOLO (Fast) | 52.7% | 155 |
mAP vs FPS 트레이드오프
PASCAL VOC 2007. 탭을 전환하세요.
mAP만 보면 YOLO는 SSD300(74.3)이나 Faster R-CNN VGG-16(73.2)에 못 미칩니다(63.4). 하지만 Faster R-CNN ZF(62.1)보다는 오히려 YOLO가 더 정확합니다 — 같은 계열 안에서도 변형에 따라 정확도가 크게 갈립니다. FPS 탭을 보세요.
YOLO는 SSD300(74.3%)이나 Faster R-CNN VGG-16(73.2%)보다 mAP가 낮지만, FPS는 각각 비슷하거나(45 vs 46) 6배 이상(45 vs 7) 높습니다. 흥미로운 건 Faster R-CNN ZF(62.1%, 18 FPS)와의 비교 — YOLO는 이 모델보다 정확도와 속도 모두 앞섭니다(63.4% > 62.1%, 45 > 18 FPS). Fast YOLO는 mAP 52.7%로 더 낮은 대신 155 FPS로 당대 가장 빠른 감지기 중 하나였습니다. 배경을 객체로 오탐하는 비율은 R-CNN보다 낮아 — 그리드 방식이 이미지 전체 문맥을 보기 때문입니다.
9. YOLO 시리즈 진화
YOLO 계보 v1→v8
버전을 클릭해 핵심 변화를 확인하세요.
단일 회귀, 7×7 그리드, B=2 박스. 실시간 감지를 처음 실용화. 작은/밀집 객체에 약함.
| 버전 / Version | 특징 / Feature | 지표 / Metric |
|---|---|---|
| YOLOv1 (2016) | 단일 회귀, 7×7 그리드 / Single regression, 7×7 grid | 63.4% mAP |
| YOLOv2 (2017) | 앵커 박스, 배치 정규화 / Anchor boxes, batch norm | 78.6% mAP |
| YOLOv3 (2018) | 다중 스케일 예측 / Multi-scale prediction | 57.9% AP@0.5 |
| YOLOv4 (2020) | CSP, PANet | 65.7% AP |
| YOLOv8 (2023) | anchor-free, 속도/정확도 개선 / anchor-free, speed & accuracy | — |
10. 강점 · 약점 · 의의
강점
- 실시간 처리 가능 — 후보 영역 생성 없이 단일 순전파
- 이미지 전체 문맥을 보고 예측 → 배경 오탐 감소
- 학습·추론 파이프라인이 단순 — end-to-end 최적화
약점
- 작은 객체 감지가 어려움 (그리드 셀 하나에 여러 작은 객체가 몰리면 일부만 담당 가능)
- 셀당 B개(기본 2) 박스만 예측 → 밀집한 객체 어려움
- 학습 데이터에 없던 새로운 종횡비/크기의 객체로 일반화가 약함
의의 · 영향
- 실시간 객체 감지의 실용화 — 자율주행·드론·CCTV 분석에 광범위 적용
- anchor-free 감지(그리드 회귀)의 선구자적 아이디어
- 이후 YOLOv2~v8 시리즈로 이어지며 지금도 산업 표준으로 쓰임
11. 핵심 개념 요약
| 개념 / Concept | 내용 / Description |
|---|---|
| S×S 그리드 / S×S grid | 이미지를 격자로 분할, 각 셀이 객체 감지 담당 / Split the image into a grid; each cell is responsible for detecting objects |
| 단일 회귀 / Single regression | 위치+클래스를 하나의 신경망으로 동시 예측 / One network predicts location + class together |
| Confidence | P(객체 존재) × IoU / Pr(object) × IoU |
| λ_coord, λ_noobj | 손실 균형을 위한 가중치 (5, 0.5) / Loss-balancing weights (5, 0.5) |
| NMS | 중복 박스 제거 (Non-Maximum Suppression) / Removing duplicate boxes |
이해도 점검
보기를 골라 정답과 해설을 확인하세요. 채점은 이 페이지 안에서만 이뤄집니다.
1. YOLO에서 어떤 그리드 셀이 특정 객체를 '담당'하는가?
2. YOLO의 confidence 점수가 나타내는 것은?
3. 손실 함수에서 λ_coord=5, λ_noobj=0.5로 정한 이유는?
4. S=7, B=2, C=20일 때 YOLO의 출력 텐서 크기는?
5. PASCAL VOC 2007에서 YOLO와 Faster R-CNN 두 변형(VGG-16 · ZF)을 비교한 것으로 옳은 것은?