본문 바로가기
딥러닝 tutorial

YOLO를 활용한 PyTorch 객체 탐지 튜토리얼

by yuuuxxn 2024. 2. 23.
728x90

객체 탐지 분야에서 YOLO(You Only Look Once)는 그 탁월한 성능과 빠른 처리 속도로 매우 인기 있는 알고리즘입니다. YOLO는 이미지 전체를 한 번에 분석하여 객체의 위치와 클래스를 동시에 예측합니다. 이번 튜토리얼에서는 PyTorch를 활용하여 간단한 YOLO 기반 객체 탐지 시스템을 구현해보겠습니다.

 

환경 설정

이 튜토리얼을 시작하기 전에, PyTorch와 함께 torchvision 패키지가 설치되어 있어야 합니다. torchvision은 PyTorch와 함께 다양한 데이터셋, 모델 아키텍처 및 이미지 변환 도구를 제공합니다.

pip install torch torchvision

 

YOLO 객체 탐지

YOLO 모델을 사용하기 위해서는 먼저 모델을 불러와야 합니다. PyTorch의 torchvision.models 모듈은 사전에 학습된 여러 모델을 제공하는데, 여기서는 YOLOv3를 사용하겠습니다. 또한, 우리가 사용할 데이터셋은 COCO 데이터셋입니다. COCO 데이터셋은 다양한 객체를 포함하고 있어 객체 탐지 연구에 자주 사용됩니다.

모델 불러오기

PyTorch에서 YOLOv3 모델을 불러오는 것은 매우 간단합니다. 다음 코드는 사전 학습된 YOLOv3 모델을 불러옵니다.

import torch
from torchvision.models.detection import fasterrcnn_resnet50_fpn

# 사전 학습된 모델 불러오기
model = fasterrcnn_resnet50_fpn(pretrained=True)

# 모델을 평가 모드로 설정
model.eval()

 

이미지 준비하기

객체 탐지를 위해, 우리는 먼저 탐지를 수행할 이미지를 준비해야 합니다. PyTorch에서 이미지는 텐서로 변환되어야 합니다. 또한, YOLO 모델은 입력 이미지가 특정 형식을 따르도록 요구합니다. 다음은 이미지를 모델에 맞는 형식으로 변환하는 과정입니다.

from PIL import Image
import torchvision.transforms as T

# 이미지를 불러오고 변환하기
image = Image.open("path/to/your/image.jpg")
transform = T.Compose([T.ToTensor()])
image = transform(image)

# 배치 차원 추가하기
image = image.unsqueeze(0)

 

객체 탐지 수행하기

이제 모델에 이미지를 전달하여 객체 탐지를 수행할 수 있습니다.

# GPU 사용 가능 여부 확인
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
image = image.to(device)

# 객체 탐지 수행
with torch.no_grad():
    prediction = model(image)

 

prediction은 탐지된 객체들의 정보를 포함하고 있습니다. 각 객체에 대해, 클래스, 바운딩 박스, 확률 점수 등의 정보를 포함하고 있습니다.

결과 해석하기

prediction은 딕셔너리 리스트로, 탐지된 각 객체에 대한 정보를 포함합니다. 여기서는 간단히 결과를 출력하는 방법을 보여줍니다.

# 예측 결과 출력하기
print(prediction)

 

이 예제에서는 YOLOv3 모델을 사용하여 객체를 탐지하는 방법을 간단히 소개했습니다. PyTorch와 함께 사용하면, 더 복잡한 객체 탐지 시스템을 구축하는 것도 가능합니다. 실제 응용 프로그램에서는, 이미지 전처리, 결과 해석, 성능 최적화 등 추가적인 작업이 필요할 수 있습니다.

YOLO와 같은 딥러닝 기반 객체 탐지 알고리즘은 놀라운 정확도와 속도로 다양한 객체를 식별할 수 있어, 실시간 응용 프로그램에 특히 유용합니다. 이 튜토리얼이 딥러닝 기반 객체 탐지의 매력적인 세계로 여러분을 안내하는 첫걸음이 되기를 바랍니다.

728x90