YOLO의 다양한 버전 이해하기, YOLOv7, YOLOv8과 같은 최신 버전의 성능 개선 사항

작성자: 조광형

작성일: 2024년 11월 26일

1. YOLO란 무엇인가?

YOLO(You Only Look Once)는 이미지에서 객체를 실시간으로 탐지하는 알고리즘으로, 단일 신경망을 통해 입력 이미지를 통과시키며 해당 이미지 내의 여러 객체를 동시에 인식할 수 있습니다. 이를 통해 YOLO는 전통적인 객체 탐지 기법들보다 빠르고 효과적인 성능을 보이게 됩니다.

YOLO는 처음 발표된 이후로 지속적으로 발전해왔으며, 각 버전마다 성능 개선과 속도 향상을 이룩해왔습니다. 이번 글에서는 YOLO의 최신 버전인 YOLOv7과 YOLOv8의 주목할 만한 성능 개선 사항과 특징들에 대해 알아보겠습니다.

2. YOLO 버전의 역사

YOLO는 2016년에 처음 발표된 이후 여러 번의 버전 업데이트를 거쳤습니다. 각 버전은 특정한 개선점을 가지고 있으며, 다음과 같은 주요 버전들이 있습니다:

  • YOLOv1: 최초의 YOLO 모델로, 객체 탐지의 기본 개념을 제시했습니다.
  • YOLOv2: 다중 스케일 학습 및 앵커 박스를 도입하여 성능을 크게 향상시켰습니다.
  • YOLOv3: 다중 레벨 피처를 활용하여 더 정교한 탐지를 가능하게 했습니다.
  • YOLOv4: 모델의 정확도를 높이기 위해 다양한 최적화 기법과 새로운 구조가 도입되었습니다.
  • YOLOv5: PyTorch를 사용하여 저자와 커뮤니티가 만든 버전으로, 성능과 사용 편의성을 강조했습니다.
  • YOLOv6: 효율성과 속도에 중점을 두었으며, 다양한 적용 분야에 적합한 성능을 보여주었습니다.
  • YOLOv7: 더 나은 일반화 성능과 속도를 제공하는 최신 모델입니다.
  • YOLOv8: YOLO의 현재 최신 버전으로, 지나치기 쉬운 세부 사항도 탐지할 수 있는 능력을 강화했습니다.

3. YOLOv7의 주요 특징

YOLOv7은 2022년 중반에 발표되었으며, 이전 버전보다 몇 가지 중요한 성능 개선 사항을 도입했습니다:

  • 사전 훈련된 모델: YOLOv7은 다양한 대규모 데이터셋에서 사전 훈련되어 보다 일반화된 성능을 자랑합니다. 특히 COCO 데이터셋에서 훈련된 모델은 다양한 객체 인식에서 우수한 결과를 보여줍니다.
  • 고성능 유닛: 더 효율적인 네트워크 구조인 Scaled-YOLOv4를 기반으로 하여, 더 적은 연산량으로도 높은 성능을 유지합니다.
  • 다중 요인 고려: YOLOv7은 성능을 최적화하기 위해 다양한 하이퍼파라미터를 조정할 수 있는 능력이 있습니다.
  • 테스트 케이스: 다양한 벤치마크 테스트에서 YOLOv7의 성능이 입증되었으며, 특히 실시간 객체 탐지에서 탁월한 속도와 정확도를 보여줍니다.

4. YOLOv8의 주요 특징

YOLOv8은 YOLOv7의 개선된 버전으로, 특히 다음과 같은 특징이 있습니다:

  • 아키텍처 최적화: 보다 깊고 정교한 신경망 구조로 모델의 성능을 높였습니다. 이로 인해 더 정확한 객체 탐지가 가능해졌습니다.
  • 속도 개선: YOLOv8은 연산 속도가 빠르기 때문에 실시간 애플리케이션에서 더욱 효과적으로 사용될 수 있습니다.
  • 더 나은 다중 클래스 인식: YOLOv8은 다중 클래스 객체 인식에서 유리한 결과를 보이며, 특히 유명한 여러 데이터셋에서 테스트되었습니다.
  • 유연한 트레이닝 옵션: 다양한 데이터 셋에 쉽게 적응할 수 있는 개선된 훈련 방법론을 채택하고 있습니다.

5. YOLOv7과 YOLOv8의 성능 비교

YOLOv7과 YOLOv8은 성능 면에서 많은 차이를 보입니다. 다음은 이 두 모델의 성능 비교입니다:

특징 YOLOv7 YOLOv8
정확도(mAP) 45.5% 50.5%
속도(FPS) 30 FPS 35 FPS
훈련 용량(시간) 8시간 6시간

위의 표에서 볼 수 있듯이, YOLOv8은 YOLOv7에 비해 더 높은 정확도와 속도를 보여주며, 훈련 시간도 단축되었습니다.

6. YOLOv8 사용 예제

YOLOv8을 사용하는 방법을 배우기 위해 간단한 코드 예를 살펴보겠습니다. 먼저, 필요한 라이브러리를 설치합니다:

                pip install torch torchvision opencv-python
            

그 다음, YOLOv8 모델을 로드하고 객체 탐지를 수행하는 예제 코드는 다음과 같습니다:

                
import cv2
import torch

# YOLOv8 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'yolov8')

# 테스트할 이미지 경로
img_path = "test_image.jpg"

# 이미지 로드
img = cv2.imread(img_path)

# 객체 탐지 수행
results = model(img)

# 결과 출력
results.show()
                
            

이 코드는 YOLOv8 모델을 로드하고, 테스트 이미지를 사용하여 객체를 탐지한 후 결과를 보여줍니다. YOLOv8의 성능을 간단하게 테스트할 수 있습니다.

7. 결론

YOLO는 객체 탐지 분야에서 혁신적인 알고리즘으로 자리 잡았으며, YOLOv7과 YOLOv8은 YOLO 시리즈의 최신 버전으로 더욱 발전된 성능을 제공합니다. YOLOv8은 이전 버전에 비해 더 높은 정확도, 빠른 속도, 보다 유연한 훈련 옵션을 제공하여 각종 응용 프로그램에 유용하게 사용될 수 있습니다.

이를 통해 사용자는 다양한 분야에서 실시간 객체 탐지 서비스를 구현할 수 있으며, YOLO는 앞으로도 계속해서 발전해 나갈 것입니다.

이 글이 YOLO에 대한 이해를 높이는데 도움이 되길 바랍니다. 추가적인 질문이나 도움을 원하시면 댓글로 남겨주세요.

YOLO 모델의 전이 학습(Transfer Learning), Custom Dataset을 이용한 YOLO 학습 방법

이번 글에서는 YOLO(You Only Look Once) 모델의 전이 학습(Transfer Learning) 개념과 Custom Dataset을 사용하여 YOLO 모델을 학습하는 방법에 대해 설명하겠습니다. 컴퓨터 비전 분야에서는 주로 이미지 객체 인식과 분류 작업에서 YOLO 모델이 널리 사용됩니다. YOLO 모델은 빠른 실시간 검출 성능으로 유명하지만, 특정 데이터셋에 맞게 Fine-tuning하는 과정이 필요합니다.

전이 학습(Transfer Learning) 개요

전이 학습이란 이미 학습된 모델을 기반으로 새로운 데이터셋에 대해 재학습하는 방법입니다. 이는 특히 데이터가 적은 경우 매우 유용합니다. YOLO와 같은 대규모 모델은 일반적으로 대량의 데이터로 미리 학습되어 있으며, 이러한 모델을 기반으로 특정 작업에 맞게 수정하여 성능을 극대화할 수 있습니다.

전이 학습의 장점

  • 학습 시간 단축: 대량의 데이터로 학습한 모델을 사용하므로 빠르게 학습할 수 있습니다.
  • 적은 데이터량으로도 성능 향상: 작은 데이터셋으로도 좋은 성능을 낼 수 있습니다.
  • 더 좋은 일반화 성능: 일반적으로 사전 학습된 모델은 이미 많은 패턴을 학습했기 때문에 일반화 능력이 뛰어납니다.

YOLO 모델 개요

YOLO는 한 번의 신경망 평가로 전체 이미지에서 객체를 동시에 탐지하는 방식입니다. YOLO의 구조는 다소 복잡하지만, 기본적으로 이미지를 격자(grid)로 나누고 각 격자에서 특정 객체가 있을 확률을 예측합니다. YOLOv5 모델이 현재 가장 많이 사용되고 있으며, 파이썬에서 YOLOv5로 전이 학습을 수행할 수 있습니다.

YOLO의 기본 개념

  • 격자(cell): 입력 이미지를 SxS의 그리드로 나눕니다.
  • 바운딩 박스 및 점수: 각 격자에서 최대 B개의 바운딩 박스를 예측하고, 각 박스에 대해 신뢰도 점수를 부여합니다.
  • 클래스 확률: 각 격자에 대해 K개의 클래스 확률을 예측합니다.

Custom Dataset 준비하기

YOLO 모델을 재학습하기 위해서는 Custom Dataset이 필요합니다. 이는 이미지와 각 이미지에 대한 주석(annotation) 파일로 구성됩니다. 주석 파일은 일반적으로 YOLO 형식으로 준비됩니다.

YOLO 데이터셋 포맷

YOLO에서 사용되는 데이터셋 포맷은 다음과 같습니다:

  • 이미지 파일: 학습에 사용할 이미지 파일들.
  • 라벨 파일: 각 이미지에 대한 바운딩 박스의 정보를 포함하는 텍스트 파일. 각 줄은 형식이 아래와 같습니다:
    클래스_id x_center y_center width height

    여기서 (x_center, y_center)는 해당 바운딩 박스의 중심 좌표, width와 height는 바운딩 박스의 너비와 높이를 나타냅니다.

예제 데이터셋

예를 들어, 자동차와 사람을 탐지하는 Custom Dataset을 준비할 수 있습니다. 여기서 샘플 데이터셋을 확인할 수 있습니다.

YOLOv5 설치 및 환경 설정

YOLOv5를 설치하기 위해서는 PyTorch와 기타 종속성 라이브러리가 필요합니다. 아래의 단계를 통해 설치할 수 있습니다:

1. 환경 설정

git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt

2. 데이터셋 구성

Custom Dataset 디렉토리 구조는 다음과 같이 설정합니다:

yolov5/
│
├── datasets/
│   ├── my_custom_dataset/
│   │   ├── images/
│   │   ├── labels/
│   │   └── data.yaml

3. data.yaml 파일 예시

data.yaml 파일은 YOLO 모델에 데이터셋 정보를 제공합니다. 파일은 다음과 같은 형식을 가져야 합니다:

train: datasets/my_custom_dataset/images/train
val: datasets/my_custom_dataset/images/val

nc: 2
names: ['car', 'person']

YOLOv5 모델 훈련하기

위의 준비가 끝났다면, YOLOv5 모델을 학습할 수 있습니다. 아래 명령어를 사용하여 학습을 시작합니다.

훈련 명령어

python train.py --img 640 --batch 16 --epochs 50 --data datasets/my_custom_dataset/data.yaml --weights yolov5s.pt

여기서 각 인자의 의미는 다음과 같습니다:

  • --img: 입력 이미지의 크기. 일반적으로 640 또는 416을 사용합니다.
  • --batch: 배치 사이즈입니다.
  • --epochs: 전체 훈련 반복 수입니다.
  • --data: 데이터셋에 대한 yaml 파일 경로입니다.
  • --weights: 초기 가중치 파일입니다. 최전의 pretrained weights를 사용할 수 있습니다.

모델 성능 평가

훈련이 완료되면, 모델의 성능을 평가할 수 있습니다.

python val.py --weights runs/train/exp/weights/best.pt --data datasets/my_custom_dataset/data.yaml --img 640

평가 결과 확인

성능 평가는 mAP(Mean Average Precision) 및 IOU(Intersection Over Union) 등의 지표를 통해 확인할 수 있습니다. 에폭 반복 후 트레이닝 로그에 이러한 지표가 기록됩니다.

결론

YOLO 모델의 전이 학습을 통해 Custom Dataset을 이용하여 원하는 객체를 탐지할 수 있는 강력한 모델을 구축할 수 있습니다. YOLOv5의 기능을 활용하여 많은 경우에 훌륭한 성능을 얻을 수 있음을 알았습니다. 본 글에서는 기본적인 과정만을 다루었지만, 하이퍼파라미터 조정이나 데이터 증강 등의 추가적인 기술을 통해 성능을 더욱 높일 수 있습니다.

참고 자료

YOLO 모델의 파라미터 튜닝, NMS 임계값 최적화와 성능 향상 방법

YOLO(You Only Look Once) 모델은 객체 탐지 분야에서 가장 인기 있는 기술 중 하나입니다. YOLO는 입력 이미지 전체를 한 번의 전방향 패스에서 처리하여 이미지를 분석하므로, 속도가 빠르고 효율적입니다. 하지만 실제 프로젝트에서 YOLO의 성능을 최적화하기 위해서는 다양한 파라미터 튜닝이 필요합니다.

1. YOLO 파라미터 소개

YOLO 모델은 여러 가지 주요 파라미터를 가지고 있으며, 이들은 모델의 성능에 중대한 영향을 미칩니다. 아래는 주요 파라미터입니다:

  • 학습률 (Learning Rate): 모델의 가중치를 업데이트하는 속도를 결정합니다.
  • 배치 크기 (Batch Size): 한 번에 모델에 공급되는 훈련 데이터 샘플 수입니다.
  • 에폭 (Epochs): 전체 데이터셋을 사용하여 모델을 훈련시키는 반복 횟수입니다.
  • 손실 함수 (Loss Function): 모델이 학습하는 데 기준이 되는 함수입니다. YOLO는 주로 BCE(이진 교차 엔트로피)와 MSE(평균 제곱 오차)를 사용합니다.
  • NMS(Non-Maximum Suppression) 임계값: 중복된 박스를 제거하는 데 사용되는 임계값입니다.

2. YOLO 모델 파라미터 튜닝

YOLO 모델의 성능은 각종 파라미터의 조정에 따라 크게 달라질 수 있습니다. 학습률 및 배치 크기를 최적화하는 방법을 살펴보겠습니다.

2.1 학습률 조정

학습률은 모델의 성능 향상에 매우 중요한 역할을 합니다. 너무 높은 학습률은 모델을 발산시킬 수 있으며, 너무 낮은 학습률은 훈련 속도를 느리게 만들고 지역 최적값에 갇힐 수 있습니다.

import torch
import torchvision

# 모델 초기화
model = torchvision.models.yolo()

# 학습률 지정
learning_rate = 0.001
for param_group in optimizer.param_groups:
    param_group['lr'] = learning_rate

학습률을 조정하기 위해서는 학습률 감소 전략을 채택할 수 있습니다. 학습률 감소는 에폭 수가 증가함에 따라 학습률을 줄여주는 방법입니다.

2.2 배치 크기 조정

배치 크기는 GPU 메모리와 관련이 있으며, 적절한 크기를 설정하면 학습 속도가 빨라지고 성능이 향상될 수 있습니다. 그러나 배치 크기가 너무 크면 과적합에 이를 수 있습니다.

batch_size = 16  # 기본 배치 크기 설정

# DataLoader 초기화
train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)

3. NMS(Non-Maximum Suppression) 임계값 최적화

YOLO에서는 객체 탐지 후 NMS를 사용하여 중복된 탐지를 제거합니다. NMS 임계값을 적절하게 조정함으로써 모델 성능을 향상시킬 수 있습니다.

3.1 NMS 작동 원리

NMS는 교차 점수가 지정된 임계값을 초과할 경우 상위 박스를 선택하여 나머지를 제거합니다. 이로 인해 중복된 탐지가 최소화됩니다.

3.2 NMS 임계값 설정

NMS 임계값은 일반적으로 0.3에서 0.7 사이의 값으로 설정됩니다. 하지만 최적의 값을 찾기 위해서는 실험을 통해 매개변수를 조정할 필요가 있습니다.

def non_max_suppression(predictions, conf_threshold=0.5, nms_threshold=0.3):
    # 중간 변수 생성
    boxes = []
    scores = []
    for prediction in predictions:
        # 신뢰도 기준 필터링
        if prediction['confidence'] >= conf_threshold:
            boxes.append(prediction['bbox'])
            scores.append(prediction['confidence'])

    # NMS 적용
    selected_indices = torchvision.ops.nms(boxes, scores, nms_threshold)
    return [boxes[i] for i in selected_indices]

4. 성능 향상 방법

YOLO의 성능을 향상시키기 위한 몇 가지 방법을 소개합니다. 데이터 증강, 전이 학습, 최적화 알고리즘을 활용할 수 있습니다.

4.1 데이터 증강

데이터 증강 기법은 모델 훈련 시 다양한 변형된 버전을 공급하여 데이터의 다양성을 높이고 오버피팅을 방지합니다. 회전, 크기 변경, 칼라 변환, 랜덤 자르기 등이 포함됩니다.

from torchvision import transforms

data_transforms = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(10),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),
    transforms.Resize((416, 416)),
    transforms.ToTensor(),
])

4.2 전이 학습

전이 학습은 사전 훈련된 모델을 사용하여 학습하는 방법입니다. 작은 데이터셋에서 유용하게 사용할 수 있으며, 특히 비슷한 도메인에서 효과적입니다.

from torchvision import models

# 사전 훈련된 YOLO 모델 로드
model = models.detection.yolo(pretrained=True)

4.3 최적화 알고리즘

최적화 알고리즘(예: Adam, SGD 등)을 통해 학습 성능을 더욱 향상시킬 수 있습니다. 이 방법은 모델 수렴 속도를 높이고 성능을 개선합니다.

import torch.optim as optim

# Adam 최적화 사용
optimizer = optim.Adam(model.parameters(), lr=0.001)

결론

YOLO 모델의 파라미터 튜닝과 NMS 최적화는 모델 성능에 중요한 영향을 미칩니다. 위의 방법들을 통해 본인의 데이터와 상황에 맞게 각각의 파라미터를 조정하여 최적의 성능을 달성할 수 있습니다. 성능을 높이기 위해 실험과 검증의 과정을 반복하는 것이 중요하며, 이를 통해 YOLO 모델을 활용한 객체 탐지의 기회를 극대화할 수 있습니다.

부록: 추가 자료

본 강의에서는 YOLO 모델의 파라미터 튜닝과 최적화 방법을 살펴보았습니다. 추가적으로 YOLO에 대한 공식 문서나 관련 논문을 참고하길 추천드립니다.

YOLO 설치 및 설정, 주요 라이브러리 설치 및 환경 설정 (CUDA, cuDNN, OpenCV 연동)

YOLO(You Only Look Once)는 객체 탐지에서 최근 가장 혁신적인 방식 중 하나로, 실시간 성능과 높은 정확도로 주목받고 있습니다. 이번 포스트에서는 YOLO를 설치하고 설정하는 방법, 필요한 라이브러리(CUDA, cuDNN, OpenCV 등)를 설치하는 방법에 대해 자세하게 설명하겠습니다. 이 글을 통해 YOLO를 활용하여 여러분의 프로젝트에서 객체 탐지를 수행할 수 있게 되기를 바랍니다.

1. YOLO란?

YOLO는 단일 신경망을 통해 이미지를 한 번만 살펴보는 방식으로 객체를 탐지하는 방법입니다. 다른 객체 탐지 알고리즘은 이미지의 여러 부분을 여러 번 분석하는 반면, YOLO는 전체 이미지를 한 번에 분석하여 객체의 경계를 예측합니다. 이를 통해 높은 속도와 정확성을 제공합니다. YOLO는 여러 버전(YOLOv3, YOLOv4, YOLOv5 등)이 있으며, 각각은 다양한 성능과 특징을 가지고 있습니다.

2. YOLO 설치 개요

YOLO를 사용하기 위해서는 Python 및 필요 라이브러리를 설치해야 합니다. 기본적인 설치 과정은 다음과 같습니다:

  1. Python 설치
  2. CUDA설치
  3. cuDNN 설치
  4. OpenCV 설치
  5. YOLO 소스코드 다운로드 및 설치

3. 환경 설정

YOLO를 설치하기 전, 환경 설정이 필요합니다. 이 부분에서는 CUDA와 cuDNN을 설정하고 OpenCV를 연동하는 방법을 소개하겠습니다.

3.1. Python 설치

YOLO는 Python에서 주로 사용되며, Python 3.x 버전이 필요합니다. Python 설치는 아래의 방법으로 진행할 수 있습니다:

 
# Windows의 경우
1. Python.org에서 Python 설치 파일 다운로드
2. 설치 과정에서 "Add Python to PATH" 체크
3. 설치 완료 후, 터미널에서 다음 명령어 입력
python --version
    

3.2. CUDA 설치

CUDA(Compute Unified Device Architecture)는 NVIDIA에서 제공하는 병렬 컴퓨팅 플랫폼입니다. YOLO가 GPU를 활용할 수 있게 해줍니다.

  • CUDA Toolkit을 다운로드하려면 NVIDIA의 공식 웹사이트를 방문하여 최신 버전을 다운로드하고 설치합니다.
  • 설치 후 환경 변수를 설정해야 합니다.

# Windows에서 환경 변수 설정
1. 시작 메뉴에서 "환경 변수" 검색
2. 시스템 변수에서 "Path"를 선택하고 편집
3. CUDA 설치 경로 추가 (예: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin)
    

3.3. cuDNN 설치

cuDNN은 NVIDIA에서 제공하는 딥러닝 가속 라이브러리로, GPU에서 딥러닝 모델을 효과적으로 실행할 수 있게 해줍니다. cuDNN을 설치하려면 다음 단계를 따르세요:

  1. NVIDIA Developer 웹사이트에 가입 후, cuDNN을 다운로드합니다.
  2. 다운로드한 파일을 CUDA Toolkit 폴더에 복사하여 붙여넣기 합니다. (예: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4)

3.4. OpenCV 설치

OpenCV(Open Source Computer Vision Library)는 컴퓨터 비전 분야에서 가장 널리 사용되는 라이브러리입니다. YOLO와 함께 사용하여 이미지 및 비디오 처리 기능을 제공합니다.


# pip를 사용하여 OpenCV 설치하기
pip install opencv-python
pip install opencv-python-headless
    

4. YOLO 소스코드 설치

YOLO의 소스코드를 직접 Github에서 다운로드하여 사용할 수 있습니다. Github의 YOLO 리포지토리를 클론하여 소스를 가져옵니다.


# YOLOv5 설치
!git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
    

5. YOLO 사용 예제

YOLO를 설치한 후 간단한 객체 탐지 예제를 통해 검증해보겠습니다. 아래 코드는 YOLOv5를 사용하여 이미지를 분석하는 기본적인 예제입니다.


import torch
from PIL import Image
import cv2
import numpy as np

# 이미지 불러오기
img = Image.open('path_to_your_image.jpg')

# YOLOv5 모델 불러오기 (사전 훈련된 모델 사용)
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# 이미지에서 객체 탐지 실행
results = model(img)

# 결과 출력
results.print()  # 탐지된 객체의 정보 출력
results.show()   # 탐지된 이미지 출력
    

6. 결론

이 글에서는 YOLO의 설치 및 설정 방법, CUDA, cuDNN, OpenCV 연동 과정을 살펴보았습니다. YOLO는 객체 탐지 분야에서 강력한 도구입니다. 다양한 프로젝트에 활용해보며 그 성능을 직접 체험해보시기 바랍니다.

YOLO 모델로 객체 검출 시작하기, 이미지에서 객체 검출하기 기본 객체 검출 과정

목차

  1. 1. 소개
  2. 2. YOLO란?
  3. 3. YOLO의 작동 원리
  4. 4. 기본설정
  5. 5. 예제 코드
  6. 6. 결론

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 모델에 대한 연구와 발전이 기대됩니다.

감사합니다!