목차
1. 소개
컴퓨터 비전의 발전과 함께 객체 검출은 다양한 분야에서 중요한 역할을 하고 있습니다. 객체 검출은 이미지나 비디오에서 특정 객체를 인식하고 그 위치를 파악하는 과정으로, 자율주행차, 보안 감시, 로봇 비전 등의 분야에서 활용됩니다.
본 강좌에서는 YOLO(You Only Look Once) 모델을 사용하여 객체 검출을 시작하는 방법에 대해 알아보겠습니다.
2. YOLO란?
YOLO는 객체 검출을 위한 딥러닝 모델로, 입력 이미지를 한 번에 처리하여 객체의 위치와 종류를 동시에 예측하는 방식으로 작동합니다. 전통적인 객체 검출 알고리즘은 일반적으로 여러 단계로 이루어져 있지만, YOLO는 이를 단일 신경망으로 통합하여 속도와 정확도를 모두 향상시킵니다.
YOLO 알고리즘은 여러 버전이 있으며, 각 버전마다 성능과 효율성에서 차별화된 특성을 보입니다. 이 강좌에서는 YOLOv5를 중심으로 객체 검출을 설명하겠습니다.
3. YOLO의 작동 원리
YOLO는 입력 이미지를 S x S의 그리드로 나누고, 각 그리드 셀에서 B개의 바운딩 박스를 예측합니다. 각 바운딩 박스는 객체가 있을 확률과 객체의 클래스 정보를 포함합니다. 최종적으로 Non-Maximum Suppression(NMS) 기법을 사용하여 중복된 바운딩 박스를 제거하고 최종 객체 검출 결과를 생성합니다.
작동 과정 요약
- 입력 이미지의 크기를 고정하고, 그리드로 나눈다.
- 각 그리드 셀에서 객체의 존재 여부를 판단하고, 바운딩 박스를 예측한다.
- 예측된 바운딩 박스의 신뢰도와 클래스를 평가한다.
- NMS를 통해 최종 결과를 생성한다.
4. 기본설정
YOLO 모델을 사용하기 위해서는 Python 환경과 필요한 라이브러리가 설치되어 있어야 합니다. YOLOv5를 실행하기 위해 필요한 기본 환경을 설정하는 과정은 다음과 같습니다.
환경 설정
# Anaconda 혹은 Virtualenv 설치 후
conda create -n yolov5 python=3.8
conda activate yolov5
# 필수 라이브러리 설치
pip install torch torchvision torchaudio
pip install opencv-python
pip install matplotlib
pip install pillow
YOLOv5 클론
# YOLOv5 GitHub 리포지토리 클론
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
5. 예제 코드
YOLOv5를 사용하여 이미지를 처리하는 기본적인 객체 검출 과정을 예제 코드로 설명하겠습니다. 다음 코드는 주어진 이미지에서 객체를 검출하고 결과를 표시하는 방법을 보여줍니다.
객체 검출 코드
import torch
import cv2
import matplotlib.pyplot as plt
# YOLOv5 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # yolov5s, yolov5m, yolov5l, yolov5x 선택 가능
# 이미지 로드
img = 'path/to/your/image.jpg' # 이미지 경로
results = model(img) # 객체 검출
# 결과 출력
results.print() # 검출 결과 출력
results.show() # 검출된 이미지를 화면에 표시
# 바운딩 박스와 클래스 정보 가져오기
detections = results.xyxy[0] #객체 정보
for *box, conf, cls in detections.tolist():
print(f'Class: {model.names[int(cls)]}, Confidence: {conf:.2f}, Box: {box}')
결과 이미지 저장하기
# 검출된 이미지 저장
results.save() # 지정된 디렉토리에 검출 결과 저장
코드 설명
1. torch.hub.load
를 사용하여 YOLOv5 모델을 로드합니다. 여기에서는 ‘yolov5s’ 모델을 사용하였지만, 필요에 따라 다른 모델을 선택할 수 있습니다.
2. 이미지 경로를 지정하여 이미지를 로드하고, model(img)
를 통해 객체 검출을 수행합니다.
3. results.print()
는 검출 결과를 출력하고, results.show()
는 검출된 이미지를 화면에 표시합니다.
4. results.xyxy[0]
를 통해 각 객체의 바운딩 박스, 클래스, 신뢰도 정보를 얻을 수 있습니다.
5. results.save()
를 통해 검출된 이미지를 저장할 수 있습니다. 기본적으로 ‘runs/detect/exp’ 디렉토리에 저장됩니다.
6. 결론
본 강좌에서는 YOLOv5 모델을 사용한 객체 검출의 기본 과정을 소개하였습니다. YOLO는 빠르고 효율적으로 객체를 검출할 수 있는 강력한 도구입니다. 본 예제를 통해 YOLOv5의 기본 사용법을 익힌 후, 더 복잡한 데이터셋으로 실험하거나 모델을 학습시키는 과정으로 나아갈 수 있습니다.
YOLO는 다양한 버전과 파라미터 설정을 제공하므로, 필요에 맞게 조정하여 최적의 성능을 이끌어낼 수 있습니다. 앞으로도 YOLO 모델에 대한 연구와 발전이 기대됩니다.
감사합니다!