YOLO(You Only Look Once)는 실시간 객체 탐지를 위한 딥러닝 기반 알고리즘으로, 2016년 Joseph Redmon 등에 의해 처음 제안되었다. YOLO의 핵심은 이미지를 한 번만 보고(Look Once) 모든 객체의 위치와 클래스를 동시에 예측한다는 점이다.
기존의 객체 탐지 알고리즘들(R-CNN, Fast R-CNN 등)은 이미지에서 관심 영역을 먼저 찾은 후(Region Proposal), 각 영역을 개별적으로 분류하는 2단계 접근법을 사용했다. 이러한 방식은 정확도는 높지만 속도가 느려 실시간 처리가 어려웠다.
YOLO는 이러한 문제를 해결하기 위해 객체 탐지를 단일 회귀 문제(Single Regression Problem)로 재정의했다. 이미지 전체를 한 번에 보고, 바운딩 박스의 좌표와 클래스 확률을 동시에 예측하는 1단계 접근법을 사용하여 빠른 속도를 달성했다.
YOLO의 객체 탐지 과정 - 단일 신경망으로 전체 이미지 처리
출처: Medium
YOLO의 혁신성
YOLO는 객체 탐지 분야에 패러다임 전환을 가져왔다. 속도와 정확도의 균형을 달성함으로써 자율주행차, 실시간 비디오 분석, 산업 현장의 불량품 검사 등 다양한 실시간 응용 분야에서 활용될 수 있게 되었다. 이전에는 초당 몇 프레임을 처리하는 것이 한계였다면, YOLO는 초당 45프레임 이상을 처리할 수 있어 실시간 객체 탐지의 문을 열었다.
YOLO는 다음과 같은 독특한 특징들을 가지고 있어 다른 객체 탐지 알고리즘과 차별화된다.
1) 통합 네트워크 구조 (Unified Architecture)
YOLO는 단일 컨볼루션 신경망(Single Convolutional Neural Network)을 사용하여 객체 탐지의 모든 과정을 처리한다. 이미지에서 특징을 추출하고, 바운딩 박스를 예측하고, 클래스를 분류하는 모든 작업이 하나의 네트워크 내에서 이루어진다. 이러한 통합적 접근은 엔드-투-엔드 학습(End-to-End Learning)을 가능하게 하며, 최적화가 용이하다.
2) 고속 처리 능력
YOLO의 가장 큰 장점은 빠른 속도이다. 초기 YOLOv1은 초당 45프레임(FPS)을 처리할 수 있었고, Fast YOLO는 155 FPS까지 달성했다. 최신 버전인 YOLOv8은 더욱 개선된 속도를 제공한다. 이러한 속도는 실시간 비디오 스트림 처리, 자율주행차의 즉각적인 판단, 로봇의 실시간 인지 등에 필수적이다.
3) 전역적 컨텍스트 이해
YOLO는 이미지 전체를 한 번에 보기 때문에 전역적 컨텍스트(Global Context)를 이해한다. Region Proposal 기반 방법들이 지역적인 패치만 보는 것과 달리, YOLO는 이미지 전체의 맥락을 고려하여 객체를 인식한다. 이는 배경 오류(Background Error)를 줄이는 데 효과적이며, 객체의 전반적인 외관과 주변 환경을 함께 고려할 수 있다.
4) 일반화 능력
YOLO는 강력한 일반화 성능을 보인다. 자연 이미지로 학습된 모델을 예술 작품이나 다른 도메인에 적용했을 때, YOLO는 다른 알고리즘들보다 더 나은 성능을 보였다. 이는 전역적 특징을 학습하기 때문에 새로운 환경이나 예상치 못한 상황에서도 잘 작동한다는 것을 의미한다.
5) 간결한 파이프라인
복잡한 다단계 파이프라인을 가진 다른 알고리즘들과 달리, YOLO는 단순하고 직관적인 구조를 가지고 있다. 이는 구현과 배포가 쉽고, 디버깅과 최적화가 용이하다는 장점을 제공한다.
YOLOv1은 GoogLeNet에서 영감을 받은 24개의 컨볼루션 레이어와 2개의 완전 연결 레이어로 구성되어 있다. 네트워크는 다음과 같이 동작한다:
특징 추출: 초기 컨볼루션 레이어들이 이미지에서 고수준의 특징을 추출한다.
차원 축소: 1×1 컨볼루션을 사용하여 특징 맵의 차원을 줄인다.
예측: 완전 연결 레이어가 최종 예측값을 출력한다.
2) 비최대 억제 (Non-Maximum Suppression, NMS)
하나의 객체에 대해 여러 그리드 셀이 바운딩 박스를 예측할 수 있다. NMS는 중복된 예측을 제거하는 후처리 과정이다:
동일한 클래스의 바운딩 박스들을 confidence 기준으로 정렬
가장 높은 confidence를 가진 박스를 선택
선택된 박스와 IoU(Intersection over Union)가 임계값 이상인 박스들을 제거
남은 박스들에 대해 과정 반복
IoU (Intersection over Union):
$$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} = \frac{A \cap B}{A \cup B}$$
IoU는 두 바운딩 박스의 겹치는 정도를 0과 1 사이의 값으로 나타낸다.
Joseph Redmon 등이 CVPR 2016에서 발표한 최초의 YOLO이다. "You Only Look Once: Unified, Real-Time Object Detection"이라는 논문으로 소개되었으며, 객체 탐지를 회귀 문제로 재정의하는 혁신적인 접근을 제시했다.
YOLOv8은 단순한 객체 탐지를 넘어 인스턴스 세그멘테이션(Instance Segmentation), 이미지 분류(Classification), 자세 추정(Pose Estimation) 등 다양한 컴퓨터 비전 작업을 하나의 프레임워크에서 처리할 수 있다. 이는 실무에서 여러 모델을 관리할 필요 없이 통합된 솔루션을 제공한다는 점에서 큰 의미가 있다.
빠른 속도:
실시간 처리가 가능하여 비디오 스트림, 자율주행 등 즉각적인 반응이 필요한 응용에 적합하다. 최신 버전은 초당 100 프레임 이상을 처리할 수 있다.
통합된 구조:
단일 네트워크로 모든 처리를 수행하므로 최적화가 쉽고 엔드-투-엔드 학습이 가능하다.
전역적 추론:
이미지 전체를 고려하므로 컨텍스트 정보를 활용하여 배경 오류가 적다.
일반화 능력:
새로운 도메인이나 환경에서도 비교적 잘 작동한다.
다양한 모델 크기:
nano부터 extra large까지 응용 환경에 맞는 모델을 선택할 수 있다.
활발한 커뮤니티:
오픈소스로 제공되며, 풍부한 문서와 튜토리얼, 사전 학습 모델이 있다.
단점
작은 객체 탐지:
그리드 기반 접근으로 인해 작은 객체나 밀집된 객체를 탐지하는 데 어려움이 있다. 특히 여러 작은 객체가 같은 그리드 셀에 있을 때 문제가 발생할 수 있다.
새로운 종횡비:
학습 데이터에 없던 특이한 종횡비의 객체에 대해서는 성능이 저하될 수 있다.
위치 정확도:
2단계 방식(Faster R-CNN 등)에 비해 바운딩 박스의 정밀도가 다소 떨어질 수 있다. 특히 객체의 경계가 모호한 경우 문제가 된다.
클래스 불균형:
대부분의 그리드 셀이 배경이므로 클래스 불균형 문제가 발생할 수 있다. 손실 함수의 가중치 조정으로 부분적으로 해결하지만 완벽하지는 않다.
YOLO 선택 가이드
YOLO를 선택할 때는 속도와 정확도의 트레이드오프를 고려해야 한다. 실시간 처리가 중요하다면 작은 모델(YOLOv8n, s)을, 정확도가 중요하다면 큰 모델(YOLOv8l, x)을 선택한다. 또한 작은 객체가 많거나 매우 정밀한 위치 정보가 필요한 경우에는 Faster R-CNN이나 Mask R-CNN 같은 2단계 방식을 고려해야 할 수도 있다. 최근에는 YOLO의 약점을 보완한 YOLO-World, YOLOv9 등 새로운 변형들이 계속 등장하고 있다.