YOLO

juhee·2025년 5월 6일

AI 엔지니어 이론

목록 보기
6/7

YOLO란?

YOLO (You Only Look Once)는 객체 탐지(Object Detection)를 단일 CNN 연산으로 수행하는 1-stage 탐지 모델입니다.

기존 R-CNN 계열 방식과 달리 이미지를 한 번만 처리하여 모든 객체의 위치(Bounding Box)클래스(Label)를 동시에 예측합니다.

등장 배경

기존 방식한계
R-CNN, Fast/Faster R-CNN구조 복잡, 2단계 처리로 속도 느림
Sliding window 방식계산량 과다, 부정확한 localization

YOLO는 “객체 탐지를 이미지 분류처럼 한 번에 처리할 수 없을까?”라는 아이디어에서 출발했습니다.

핵심 아이디어

  • 이미지를 S×S 그리드로 분할
  • 각 셀에서 bounding box + confidence + class 예측
  • 후보 영역 없이 전체 이미지를 보고 end-to-end 예측

처리 흐름

  1. 입력 이미지 (ex. 448×448)를 받음
  2. CNN을 통해 feature map 생성
  3. 마지막 feature map을 기반으로 bounding box 좌표 + 클래스 확률 예측
  4. NMS (Non-Maximum Suppression) 적용
  5. 최종 객체 탐지 결과 출력

영향력

  • 객체 탐지에서 속도 vs 정확도 균형을 획기적으로 개선
  • 이후 YOLOv2~v8까지 지속 발전
  • 자율주행, 드론, CCTV 등 실시간 응용 분야에 최적화

전체 구조

YOLO는 입력 이미지를 받아 CNN 기반 네트워크를 통해 다음을 예측합니다.

  • 객체가 존재할 확률 (objectness score)
  • 객체의 클래스 확률
  • 객체의 bounding box 좌표 (x, y, w, h)

그리드 기반 예측

YOLO는 입력 이미지를 S × S 그리드 셀로 분할하여 예측을 수행합니다.

  • 각 그리드 셀은 자신의 영역 중심에 있는 객체만 탐지
  • 각 셀은 B개의 바운딩 박스와 각 박스에 대해 다음을 예측
    • (x, y) : box 중심 좌표 (셀 기준 상대 좌표, 0~1)
    • (w, h) : box 너비, 높이 (전체 이미지 기준 정규화)
    • confidence score : object 존재 확률 × IOU(pred, truth)

출력 텐서 구조

출력 결과는 (S, S, B×5 + C) 형태의 텐서로 나타냅니다.

항목설명
S그리드 셀 수 (e.g., 7)
B예측 박스 수 (e.g., 2)
C클래스 수
B×5각 박스에 대해 (x, y, w, h, confidence)

예: S=7, B=2, C=20 (VOC 기준) → 출력 크기 = (7, 7, 30)

손실 함수 구성

YOLO의 손실 함수는 다음 세 가지 요소를 조합합니다

  1. Localization Loss:
    • 예측 box의 (x, y, w, h)와 실제 box의 거리 (MSE)
  2. Confidence Loss:
    • 객체가 있을 때 / 없을 때 confidence 예측 차이
  3. Classification Loss:
    • 그리드 셀이 예측한 클래스 확률과 정답 라벨 간 차이

객체가 없는 그리드에서의 confidence 손실은 적은 가중치로 조정합니다 (λnoobj)

장점

항목설명
실시간 속도1-stage 구조로 매우 빠름 (YOLOv3: 최대 45 FPS)
전체 이미지 기반 예측전체 컨텍스트를 활용하여 오탐률 감소
End-to-End 학습객체 탐지 전체를 단일 모델로 직접 학습
구조 단순함Region Proposal 필요 없음, R-CNN 계열보다 훨씬 간단
범용성영상 분석, 자율주행, 드론 등 다양한 실시간 응용에 활용 가능

YOLOv1 한계

한계점설명
작은 객체 탐지 취약그리드 셀이 큰 물체를 중심으로 예측, 작은 객체 간 겹침 처리 어려움
고정된 anchor 개수각 셀당 고정된 박스 수(B개)만 예측 → 복잡한 장면에 한계
localization 정확도 낮음Bounding Box 회귀 방식이 coarse → 좌표 정밀도 부족
다중 객체 처리 제한같은 셀에 여러 객체가 있을 경우 오직 하나만 예측 가능

발전 과정 (v1 -> v3)

1️⃣ YOLOv1 (2016)

  • 초기 버전, 논문: [Redmon et al., 2016]
  • 단일 CNN으로 이미지 → 탐지
  • 강력한 속도, 낮은 localization 정밀도

2️⃣ YOLOv2 (2017) - "YOLO9000"

  • BatchNorm 도입으로 정확도 향상
  • Anchor Box 도입 (Faster R-CNN에서 차용)
  • 다양한 크기 물체 탐지 개선
  • 클래스 계층 구조 (WordTree) 도입 → YOLO9000 (9000종 분류 가능)

3️⃣ YOLOv3 (2018)

  • Darknet-53 백본 (ResNet 유사한 구조)
  • multi-scale prediction (3개 scale에서 탐지)
  • sigmoid + BCE 방식으로 class confidence 개선
  • 성능 향상 + 속도 유지의 균형점

버전별 비교 요약

버전주요 개선장점한계
YOLOv1단일 CNN, 빠름속도 우수작은 객체 탐지 취약
YOLOv2Anchor box, BN정확도 향상anchor 설정 복잡
YOLOv3다중 스케일, backbone 강화정밀도↑, 실용성↑더 무거운 연산량

YOLOv4 (2020, Alexey Bochkovskiy)

목적: 일반 GPU에서 학습 가능한 최고 성능의 객체 탐지기
백본: CSPDarknet-53
주요 기법:

  • Mosaic augmentation (이미지 4장 합쳐 학습 다양성 ↑)
  • CIoU loss (더 정밀한 bounding box regression)
  • PANet: Feature aggregation 강화
  • Self-adversarial training, DropBlock

장점:

  • 정확도 + 속도 모두 우수
  • 대부분의 트릭(trick)을 효과적으로 통합

YOLOv5 (2020, Ultralytics, 비공식)

PyTorch 기반 YOLO 구현 (v4는 Darknet 기반)
경량화/확장성 강조 → v5s, v5m, v5l, v5x 제공
특징:

  • AutoAnchor, LR scheduler, DataLoader cache
  • ONNX/TFLite/CoreML 내보내기 지원

장점:

  • 코드 사용/배포/추론 모두 간편
  • 경량 모델로 모바일에도 적합
  • 활발한 커뮤니티 지원

⚠️ (YOLO "v5"는 공식 Redmon 라인에서 벗어난 비공식 버전)

YOLOv7 (2022, Wong Kin-Yiu)

YOLOv4의 후계자이자 현재 기준 최고 성능 실시간 탐지기 중 하나
핵심 개선:

  • ELAN, E-ELAN 구조 (Efficient Layer Aggregation)
  • Auxiliary head, Task alignment learning
  • Re-parameterization, Model scaling

장점:

  • v5보다 정확도 우수, 속도 유지
  • 대규모 모델부터 실시간 경량 모델까지 다양한 버전 존재

YOLOv8 (2023, Ultralytics)

완전 리디자인: PyTorch native 모델 + export 쉬움
anchor-free 방식 → YOLOR/DETR 계열과 유사
주요 특징:

  • 클래스 수 자동 감지
  • RT-DETR 스타일 decoder
  • SOTA 수준의 추론 성능 + 매우 깔끔한 API

장점:

  • 구조 단순 + 높은 추론 정확도
  • Ultralytics 라이브러리 기반으로 사용 편의성 최고

버전별 비교 정리

버전발표백본구조 특징장점
YOLOv42020CSPDarknet53PANet, Mosaic, CIoU정확도 & 속도 우수
YOLOv52020v5s~v5xPyTorch, AutoAnchor경량화, 배포 쉬움
YOLOv72022E-ELAN고성능 + 실시간SOTA 성능
YOLOv82023CustomAnchor-free, API 개선가장 최신, 쉬운 사용

YOLO의 대표적인 활용 분야

분야적용 사례
자율주행차량, 보행자, 신호등 탐지
의료 영상병변, 종양, 기침 감지 (X-ray, CT 등)
CCTV/보안침입자 탐지, 사람 수 계산
드론실시간 물체 추적 및 탐지
리테일고객 행동 분석, 상품 진열 인식
산업현장불량품 탐지, 작업자 안전 감시

YOLO는 빠르고 정확한 실시간 처리가 필요한 곳에서 특히 효과적입니다.

YOLO 버전 선택 가이드

YOLO의 여러 버전 중 어떤 것을 선택할지에 대한 실용적인 가이드를 제공합니다.

모델 선택 기준

상황추천 버전이유
실시간 속도 우선YOLOv5s, YOLOv8n경량, 모바일 추론 가능
정확도 최우선YOLOv7, YOLOv8l최고 성능 (mAP 기준)
연구 목적, 커스터마이징YOLOv5 (PyTorch 기반)구조 이해 및 수정 쉬움
전통적 YOLO 구조 활용YOLOv4Darknet 기반, 강력한 트릭 포함
클라우드/서비스 연동YOLOv8 (Ultralytics API)REST API, ONNX 내보내기 쉬움

실제 프로젝트 적용 팁

  • 데이터 전처리: YOLO는 자체적으로 .txt 라벨 형식 사용 (x_center, y_center, w, h)
  • Augmentation: Mosaic, HSV shift, flip 등의 데이터 다양화 기법이 중요
  • Label imbalance 주의: 클래스 불균형이 있는 경우 oversampling 또는 Focal Loss 고려
  • 추론 최적화: ONNX, TensorRT, CoreML로 추론 속도 최대화 가능

YOLO 버전별 요약 비교 (최종 요약)

버전장점단점대표 라이브러리
YOLOv4정확도·속도 우수Darknet 기반, 사용 불편AlexeyAB
YOLOv5쉬운 사용, PyTorch 기반비공식Ultralytics YOLOv5
YOLOv7고성능 실시간 탐지기복잡한 구조WONGKINYO
YOLOv8최신, anchor-free, API 좋음구조 변경 많음Ultralytics YOLOv8

0개의 댓글