Skip to main content

YOLOv8 객체 탐지 모델 학습을 위한 이미지 수집 및 라벨링

이 튜토리얼은 커스텀 YOLOv8 모델을 학습시키기 위한 데이터셋을 준비하는 방법을 단계별로 안내합니다. 이 글은 AI 번역본입니다. 오역이 있을 경우 댓글로 자유롭게 알려주세요.
Created on September 15|Last edited on September 15
소스
YOLOv8 같은 Object Detection 모델 (오직 ㄴ스 … 8)은 이미지와 비디오에서 정확한 실시간 Object Detection을 가능하게 하여 컴퓨터 비전 응용을 혁신했습니다. 그러나 이러한 모델의 성능은 사용된 학습 데이터의 품질과 양에 크게 좌우됩니다. 견고한 YOLOv8 모델을 학습시키기 위해서는 이미지 수집과 라벨링이 결정적인 역할을 합니다.
이 가이드에서는 YOLOv8 모델 학습을 위해 이미지를 수집하고 라벨링하는 전체 과정을 단계별로 설명합니다.
YOLOv8은 주로 사용되어 왔으며 이미지 분류, Object Detection, 그리고 이미지 세그멘테이션하지만 이들 중 가장 널리 사용되는 사례는 Object Detection이므로, 이 튜토리얼에서는 해당 작업에 집중하겠습니다.
소스
이번에 다룰 내용은 다음과 같습니다:


자, 시작해 봅시다.

이미지 수집

없는 이미지는 라벨링할 수 없으니, 첫 번째 단계는 이미지를 수집하는 것입니다. 이를 위해서는 다음이 필요합니다:

1단계: 객체 클래스 정의

모델이 탐지해야 할 객체 클래스를 정의하세요. 예를 들어 자동차, 보행자, 자전거를 탐지하는 모델을 만든다면, 이들을 대상 클래스로 지정합니다.

2단계: 데이터 수집

탐지하려는 객체가 포함된 다양한 이미지를 수집하세요. 이를 위한 방법은 여러 가지가 있습니다:
공개 데이터셋을 사용하세요: COCO, VOC, Open Images와 같은 공개 데이터셋에는 객체 탐지를 위한 라벨이 지정된 이미지가 다수 포함되어 있습니다.
  1. Google Dataset Search: Google은 연구자가 데이터셋에 쉽고 빠르게 접근할 수 있도록 이 검색 엔진을 출시했습니다. 이곳에는 2천5백만 개가 넘는 데이터셋이 포함되어 있습니다.
  2. Kaggle 데이터셋Kaggle은 데이터 과학 커뮤니티가 머신러닝 데이터셋에 쉽게 접근하도록 도와줍니다. 이 작업을 위한 최고의 자료원 중 하나입니다.
  3. UCI 머신 러닝 리포지토리1987년에 만들어진 UCI 페이지는 전 세계에서 가장 오래된 무료 데이터셋 리포지토리 중 하나입니다.
  4. VisualData이름에서 알 수 있듯이, 이 검색 엔진은 컴퓨터 비전을 위한 데이터셋을 전문적으로 제공합니다. 분류, 이미지 세그멘테이션, 이미지 처리와 관련된 데이터셋을 찾을 때 훌륭한 자료원입니다.
  5. Papers With Code코드와 데이터셋을 포함한 자유 오픈 소스 연구 프로젝트를 위한 커뮤니티.
웹 스크레이핑 검색 엔진, 소셜 미디어 플랫폼, 또는 애플리케이션과 관련된 특정 웹사이트에서 이미지를 수집하기 위해 웹 스크레이핑 도구나 API를 활용하세요.

3단계: 품질 관리

수집한 이미지가 배경, 조명 조건, 객체의 포즈와 크기에서 다양성을 충분히 갖추도록 하세요. 각 클래스마다 충분��� 이미지가 포함된 균형 잡힌 데이터셋을 목표로 하세요.

이미지 라벨링

물론 이미지를 수집한 후에는 라벨링을 해야 합니다.

4단계: 라벨링 도구 선택

이미지에서 객체를 라벨링하기에 적합한 애노테이션 도구를 선택하세요. LabelImg, VGG Image Annotator (VIA), CVAT (Computer Vision Annotation Tool) 같은 도구가 흔히 사용됩니다.
CVAT는 컴퓨터 비전을 위한 대화형 비디오 및 이미지 애노테이션 도구입니다. 전 세계 수만 명의 사용자와 기업이 사용하고 있습니다.
cvat.ai CVAT의 온라인 버전입니다. 무료이고 효율적이며 사용하기 쉽고, 도구의 최신 버전을 실행합니다. 최대 10개의 작업을 생성하고 애노테이션을 위해 최대 500MB의 데이터를 업로드할 수 있습니다. 해당 데이터는 본인 또는 당신이 권한을 부여한 사람에게만 보입니다.
사전 빌드된 Docker 이미지가 로컬에서 CVAT를 사용하기 시작하는 가장 쉬운 방법입니다. Docker Hub에서 이용할 수 있습니다:
해당 이미지는 지금까지 100만 회 이상 다운로드되었습니다.
소스

5단계: 애노테이션

선택한 도구를 열고 이미지를 불러옵니다. 다음 단계를 따르세요:
  1. 바운딩 박스를 정의하세요: 각 이미지에서 지정된 클래스에 속하는 객체 주위에 직사각형(바운딩 박스)을 그립니다.
  2. 클래스 라벨 지정: 각 바운딩 박스에 해당하는 클래스 라벨(예: car, pedestrian, bicycle)을 태깅하세요.
일관성과 정확성
이미지 전반에서 라벨링을 일관되게 수행하여 정확성을 유지하세요. 라벨링 가이드를 엄격히 준수하고, 라벨링 스타일과 바운딩 박스의 크기를 균일하게 유지하세요.
💡

6단계: 품질 보증

주기적으로 애노테이션된 이미지를 검토하여 오류나 불일치를 수정하세요. 품질 보증은 모델의 신뢰성을 위해 매우 중요합니다.

데이터 전처리

이미지의 다양성과 품질을 높이기 위해 이제 전처리를 진행할 시간입니다.

7단계: 데이터 증강

회전, 뒤집기, 스케일 조정, 밝기 조절과 같은 변환을 적용해 데이터셋을 증강하세요. 데이터 증강은 모델의 일반화 성능과 견고성을 향상하는 데 도움이 됩니다.

8단계: 데이터 분할

라벨링된 데이터셋을 학습, 검증, 테스트 세트로 나누세요. 일반적으로 학습, 검증, 테스트에 각각 80/10/10으로 분할합니다.
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

from tensorflow.keras import layers

(train_ds, val_ds, test_ds), metadata = tfds.load(
'tf_flowers',
split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
with_info=True,
as_supervised=True,
)

data_augmentation = tf.keras.Sequential([
layers.RandomFlip("horizontal_and_vertical"),
layers.RandomRotation(0.2),
])

plt.figure(figsize=(10, 10))
for i in range(9):
augmented_image = data_augmentation(image)
ax = plt.subplot(3, 3, i + 1)
plt.imshow(augmented_image[0])
plt.axis("off")

소스

학습용 YAML 파일 만들기

YAML 파일은 YOLOv8 학습에 입력으로 사용되는 구성 파일입니다. 최종 구성 파일은 다음과 같은 형태가 되어야 합니다:
dataset.yaml
train: custom_dataset/train/
val: custom_dataset/val/

# number of classes
nc: 4

# class names
names: ['closed_door', 'opened_door', 'bus', 'number']

W&B Artifacts로 데이터셋 업로드하기

W&B 계정을 만들고 다음을 사용해 W&B를 설치하세요
pip install wandb
그다음 다음을 사용해 로그인하세요
wandb login
데이터셋을 로깅하려면 다음을 사용하세요:
run = wandb.init(project="yolov8", job_type="add-dataset")
artifact = wandb.Artifact(name="my_data", type="dataset")
artifact.add_dir(local_path="/dataset/") # Add dataset directory to artifact
run.log_artifact(artifact)



YOLOv8 설치하기

먼저 YOLOv8 모델을 설치하세요.
pip install ultralytics
소스
COCO 데이터셋으로 사전 학습된 YOLOv8 Detect, Segment, Pose 모델을 사용할 수 있습니다 여기그리고 ImageNet 데이터셋으로 사전 학습된 YOLOv8 Classify 모델. Track 모드는 모든 Detect, Segment, Pose 모델에서 사용할 수 있습니다.
모델을 처음부터 학습하려면 다음을 시도하세요:
from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml") # build a new model from scratch
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)

# Use the model
model.train(data="dataset.yaml", epochs=3) # train the model
metrics = model.val() # evaluate model performance on the validation set
results = model(test_image) # predict on an image
path = model.export(format="onnx") # export the model to ONNX format
W&B 모델 학습 로깅을 추가하려면, 다음 기능을 사용해 학습 코드에 메트릭 로깅을 간편하게 추가할 수 있습니다:
from wandb.integration.ultralytics import add_wandb_callback

# Add W&B callback for Ultralytics
add_wandb_callback(model, enable_model_checkpointing=True)

# Train/fine-tune your model
# At the end of each epoch, predictions on validation batches are logged
# to a W&B table with insightful and interactive overlays for
# computer vision tasks
model.train(project="yolov8", data='custom_dataset', epochs=5, imgsz=640)
model.val()

# Finish the W&B run
wandb.finish()

마무리

맞춤형 YOLOv8 Object Detection 모델을 학습하려면 이미지 수집, 라벨링, 전처리를 꼼꼼하게 수행해야 합니다. 이 튜토리얼에서는 객체 클래스 식별과 다양한 이미지 데이터셋 수집부터, 정확한 이미지 라벨링과 강건한 모델 학습을 위한 데이터 증강까지 각 단계를 순서대로 안내했습니다.
CVAT 같은 고급 라벨링 도구와 TensorFlow 기반 데이터 증강, 여기에 W&B를 통한 데이터셋 관리와 모델 학습을 통합하면 전체 프로세스를 간소화하고 효율화할 수 있습니다. 이러한 노력을 통해 YOLOv8 모델을 효율적으로 학습할 수 있는 잘 준비된 데이터셋을 구축하게 됩니다.

이 문서는 AI 번역본입니다. 오역이 있을 경우 댓글로 알려주세요. 원문은 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기