AI 딥러닝/DLA

[YOLO] 욜로의 진화

깊은대학 2025. 7. 11. 11:03

컴퓨터 비전 분야에서 "YOLO"라는 이름만큼 강렬한 인상을 남긴 기술은 드물다. "You Only Look Once"의 줄임말인 YOLO는 2015년 Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi가 발표한 ‘You Only Look Once: Unified, Real‑Time Object Detection’ 논문에서 시작됐다. 기존의 복잡하고 느린 객체 탐지 방식을 단숨에 뛰어넘으며 실시간 객체 탐지 기술의 패러다임을 완전히 바꿔놓았다.

YOLO가 등장하기 전까지 객체 탐지는 주로 Two-stage 방식이 주류였다. 대표적인 예로 R-CNN 계열의 모델들은 먼저 이미지에서 관심 영역(Region of Interest)을 찾고, 그 다음 해당 영역을 분류하는 두 단계를 거쳤다. 이 방식은 높은 정확도를 보였지만, 처리 속도가 매우 느렸다. Faster R-CNN의 경우 5 FPS 정도의 속도로 실시간 애플리케이션에는 부적합했다. 실시간 영상 처리가 필요한 자율주행, 보안 시스템, 로봇 비전 등의 분야에서는 속도와 정확도를 모두 만족하는 객체 탐지 기술이 절실했는데, 이러한 시대적 요구에 응답하여 나온 기술이 YOLO였다.

YOLO의 발전 과정을 살펴보면 다음과 같다.

YOLOv1 (2015): 기존의 R-CNN처럼 두 단계를 거치지 않고, 단일 CNN이 이미지 전체를 읽고 바운딩 박스와 클래스 확률을 한 번에 예측하는 방식. 실시간 처리(45 FPS 이상)를 가능하게 했으며, 단순하지만 직관적인 구조로 크게 주목받음.
YOLOv2 (YOLO9000, 2016): 앵커 박스 도입, 배치 정규화, 9000개 클래스 탐지가 가능
YOLOv3 (2018): v3에서는 Darknet 53 백본, 멀티 스케일 예측, 개선된 손실함수를 사용해 실용성이 크게 강화.

 

 

YOLO의 원작자 Joseph Redmon은 2015년 개발 당시 워싱턴 대학교 박사과정 학생이었으나 2020년에는 트위터를 통해 "군사적 응용과 개인정보 침해 우려 때문에 컴퓨터 비전 연구를 그만둔다"고 밝히고 현업에서 은퇴해 버렸다. 하지만 원작자의 은퇴 후에도 YOLO의 발전은 계속 이어졌다.

YOLOv4 (2020): 백본 강화, Bag of freebies, Mish activation 등 도입
YOLOv5: PyTorch 기반으로 개발되어 접근성과 커스터마이징이 쉬워졌으며, 다양한 사이즈(n, s, m, l, x)로 제공됨.
YOLOv6~v8: 산업용 최적화, 경량화, Transformer 기반 구조 도입 등으로 다양한 분야에 적용 가능.
YOLO-NAS, YOLOv10~v12: NAS, zero shot, attention 중심 구조 등 최첨단 기술들이 적용된 모델로 발전.

YOLO모델에 대한 더 자세한 설명은 https://docs.ultralytics.com/ko/models/ 에 있으니 참고바란다.

 

 

YOLO는 다양한 분야에서 활용되고 있는데, 특히 자율주행차는 YOLO의 가장 대표적인 활용 분야다. 실시간으로 도로의 차량, 보행자, 신호등, 표지판 등을 탐지해야 하는 자율주행 시스템에서 YOLO의 빠른 속도와 정확도는 필수적이다. Tesla, Waymo 등 주요 자율주행차 업체들이 YOLO 기반 시스템을 활용하고 있다.

또한 CCTV와 보안 카메라 등에서 실시간으로 침입자나 위험 상황을 탐지하는 데에도 YOLO가 널리 사용된다. 공항, 은행, 상업시설 등에서 24시간 자동 감시 시스템의 핵심 기술로 자리잡았다.

의료 영상 분야에서도 종양, 병변, 이상 부위를 자동으로 탐지하는 데 YOLO가 활용된다. X-ray, CT, MRI 등 다양한 의료 영상에서 의사의 진단을 보조하는 AI 시스템에 적용되고 있다.

공장에서 제품의 결함을 자동으로 탐지하거나 조립 라인에서 부품의 위치를 확인하는 등 스마트 팩토리의 핵심 기술로 사용되고 있으며, 드론을 활용한 작물 모니터링, 해충 탐지, 수확 시기 판단 등 정밀 농업 분야에서 YOLO가 활용된다.

그 밖에 축구, 농구, 테니스 등 다양한 스포츠 분야에서도 경기 중 선수들의 움직임을 실시간으로 추적하고 분석하며 선수 성과 평가에 활용되고 있다.

이와같이 YOLO는 2015년 첫 버전부터 최근 v12까지 지속적으로 발전하며, 다양한 산업 분야에서 실시간 객체 탐지의 표준 도구로 자리 잡았다. 간단한 코드 몇 줄로 바로 활용할 수 있다는 장점이 있고, 오픈소스 기반이라 학계·산업계 모두에서 활발히 연구되고 있으며, 앞으로도 AI 기술의 실용적 확산에 중요한 역할을 할 것으로 기대된다.

YOLO는 Ultralytics 공식 문서와 GitHub 저장소를 참고하면 풍부한 자료와 실습 예시를 얻을 수 있다. 다음 코드는 Ultralytics YOLO 패키지를 사용한 추론 예시다.

 

from ultralytics import YOLO

# 모델 로드 (nano 버전 예)
model = YOLO("yolo12n.pt")
# 모델 정보 출력
print("\n모델 정보:")
model.info()

# 이미지 추론
print("\n객체 탐지 시작...")
results = model.predict(source="test1.png", imgsz=640)

# 결과 처리 및 시각화
print(f"\n{len(results)}개의 결과 처리 중...")

for i, result in enumerate(results):
    print(f"\n--- 결과 {i+1} ---")
    
    # 탐지된 객체 정보 출력
    if result.boxes is not None:
        boxes = result.boxes
        print(f"탐지된 객체 수: {len(boxes)}")
        
        for j, box in enumerate(boxes):
            # 클래스 이름과 신뢰도
            class_id = int(box.cls)
            class_name = model.names[class_id]
            confidence = float(box.conf)
            
            # 바운딩 박스 좌표
            x1, y1, x2, y2 = box.xyxy[0].tolist()
            
            print(f"  객체 {j+1}: {class_name} (신뢰도: {confidence:.2f})")
            print(f"    좌표: ({x1:.0f}, {y1:.0f}) - ({x2:.0f}, {y2:.0f})")
    
    # 결과 이미지 표시
    try:
        result.show()  # 개별 결과 표시
        print(f"결과 {i+1} 화면에 표시됨")
    except Exception as e:
        print(f"표시 오류: {e}")
    
    # 결과 이미지 저장
    try:
        output_path = f"result_{i+1}.jpg"
        result.save(output_path)
        print(f"결과 저장됨: {output_path}")
    except Exception as e:
        print(f"저장 오류: {e}")


# 모델이 탐지할 수 있는 모든 클래스 출력
print(f"\n이 모델이 탐지할 수 있는 클래스들:")
for class_id, class_name in model.names.items():
    print(f"  {class_id}: {class_name}")