이번 포스트에서는 YOLO(You Only Look Once) 객체 탐지 모델을 설치하고 설정하는 방법, 그리고 사전 학습된 YOLO 모델을 로드하여 사용해보는 방법에 대해 자세히 설명하겠습니다. YOLO는 그 성능과 효율성 덕분에 객체 탐지 분야에서 매우 인기 있는 모델입니다. 이를 통해 이미지나 동영상에서 실시간으로 객체를 탐지할 수 있습니다.
1. YOLO란 무엇인가?
YOLO는 한 번의 신경망 통과로 객체를 탐지하는 방식으로, 이미지 전체를 동시에 처리하여 매우 빠른 속도로 객체를 인식할 수 있습니다. YOLO는 여러 버전이 있으며, 최신 버전인 YOLOv5(2021년 기준)는 성능과 속도에서 두각을 나타내고 있습니다. 다양한 환경에서도 유용하게 사용할 수 있도록 유연한 아키텍처를 가지고 있습니다.
2. YOLO 설치하기
YOLO를 설치하기 위해서는 Python과 몇 가지 필수 패키지를 설치해야 합니다. 아래는 설치 과정을 단계별로 설명합니다.
2.1 사전 준비
- Python 3.6 이상이 설치되어 있어야 합니다.
- pip 패키지 관리자가 필요합니다. Python 설치 시 기본적으로 포함됩니다.
- Git이 설치되어 있어야 합니다. 설치된 상태인지 확인하려면 터미널에서
git --version
을 입력하여 확인합니다.
2.2 YOLOv5 클론하기
YOLOv5는 GitHub에서 관리되고 있으며, 아래의 명령어를 통해 YOLOv5 리포지토리를 클론할 수 있습니다.
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
2.3 필수 패키지 설치하기
YOLOv5는 여러 Python 패키지를 필요로 합니다. 다음 명령어를 사용하여 필수 패키지를 설치합니다.
pip install -U -r requirements.txt
2.4 CUDA 설치 (선택 사항)
GPU 가속을 사용하려면 CUDA와 cuDNN을 설치해야 합니다. NVIDIA의 공식 웹사이트에서 자신의 GPU에 맞는 버전을 다운로드하고 설치하세요. CUDA를 설치한 경우, PyTorch를 CUDA 지원 버전으로 설치해야 합니다. 아래 명령어로 PyTorch를 설치할 수 있습니다.
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
그 외에도 CPU 버전의 PyTorch를 설치하고자 한다면 단순히 pip install torch torchvision torchaudio
를 사용하면 됩니다.
3. YOLO 모델 로드 및 설정하기
YOLOv5가 성공적으로 설치되었다면, 다음 단계는 사전 학습된 YOLO 모델을 로드하고 설정하는 것입니다.
3.1 모델 로드하기
YOLOv5에서 사전 학습된 모델은 기본적으로 yolov5s.pt
, yolov5m.pt
, yolov5l.pt
, yolov5x.pt
의 네 가지 버전을 제공합니다. 여기서 s
, m
, l
, x
는 각각 small, medium, large, extra large를 나타냅니다. 다음 코드를 통해 YOLOv5 모델을 로드할 수 있습니다.
import torch
# 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
3.2 이미지에서 객체 탐지하기
로드한 모델을 사용하여 이미지에서 객체를 탐지하는 방법은 간단합니다. 먼저 이미지를 입력으로 받아서 모델에 전달하면 됩니다. 탐지된 객체는 바운딩 박스와 레이블로 표시됩니다.
# 이미지 경로
img_path = 'path/to/your/image.jpg'
# 이미지 로드 및 객체 탐지
results = model(img_path)
# 결과 출력
results.print() # 탐지된 객체 정보 출력
results.show() # 탐지된 객체가 표시된 이미지 출력
탐지된 객체는 아래처럼 표시됩니다. 각 바운딩 박스에는 클래스ID와 신뢰도가 표시됩니다.
3.3 동영상 파일에서 객체 탐지하기
YOLOv5는 동영상 파일에서도 객체 탐지를 수행할 수 있습니다. 다음 코드를 활용하여 동영상에서 객체를 탐지할 수 있습니다.
video_path = 'path/to/your/video.mp4'
# 동영상 파일에서 객체 탐지
results = model(video_path)
# 결과를 창에서 보여주기
results.show() # 탐지 결과 출력
3.4 실시간 객체 탐지
웹캠을 사용하여 실시간으로 객체를 탐지하는 것도 가능합니다. 다음 코드는 OpenCV 라이브러리를 활용하여 실시간 객체 탐지를 구현한 예제입니다.
import cv2
# 웹캠 열기
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read() # 웹캠으로부터 프레임 읽기
if not ret:
break
# 탐지하기
results = model(frame)
# 결과를 이미지로 변환
annotated_frame = results.render()[0]
# 이미지 보여주기
cv2.imshow('YOLOv5 Webcam Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q' 키를 눌러 종료
break
cap.release()
cv2.destroyAllWindows()
4. YOLOv5의 다양한 설정
YOLOv5는 다양한 옵션을 제공하여 사용자 맞춤형 객체 탐지를 가능하게 합니다. 설정할 수 있는 주요 인자들은 다음과 같습니다:
- conf_thres: 신뢰도 임계값. 탐지 결과의 신뢰도가 이 값 이상일 경우만 결과로 나옵니다.
- iou_thres: IoU(Intersection over Union) 임계값. 탐지된 객체 간 중복을 줄이는 데 사용됩니다.
- device: 모델을 실행할 장치(GPU/CPU)를 지정합니다.
- half: 반 정밀도(half precision) 실행 여부. GPU에서 메모리를 절약하는 데 유용합니다.
이를 통해 탐지의 성능을 조정할 수 있습니다. 다음은 이러한 인자를 활용하여 객체 탐지를 수행하는 예입니다.
results = model(img_path, conf_thres=0.5, iou_thres=0.4, device='cuda:0') # GPU 사용 시
4.1 사전 학습된 모델 변형
YOLOv5는 훈련된 모델 외에도 원하는 데이터셋으로 Fine-tuning을 하여 사용할 수 있는 기능도 제공합니다. 이를 통해 특정 객체 탐지 성능을 더욱 높일 수 있습니다.
5. 결론
YOLOv5는 설치와 사용이 간편하면서도 뛰어난 성능을 demonstrably 제공합니다. 본 포스팅에서는 YOLOv5 설치 방법과 사전 학습된 모델 로드, 객체 탐지를 수행하는 방법을 설명하였습니다. 다양한 설정을 통해 성능을 조정하여 최적의 결과를 이끌어낼 수 있습니다.
YOLO를 이용하여 다양한 연구나 프로젝트에 활용하시길 바랍니다. 추후 YOLO를 이용한 실전 프로젝트나 데이터셋 준비 방법에 대해서도 다루어 보겠습니다.