초보코딩 YOLOv8 학습 (4)

YOLOv8 학습

지난 포스팅때 YOLOv8을 특정 사물만 인식 하는 방법에 대해 알아보았습니다.

이번에는 기존에 학습되지 않거나 특정 목적으로 특화하기 위해 YOLOv8 학습하는 방법을 알아보겠습니다.

YOLOv8에서 학습에 사용되는 하드웨어는 자동으로 결정됩니다. GPU가 사용 가능한 경우에는 GPU를 사용하고, 그렇지 않으면 훈련이 CPU에서 시작됩니다.

YOLOv8 학습 단계 요약

사용자 정의 데이터로 YOLOv8 객체 탐지 모델을 훈련하는 단계는 다음과 같이 요약될 수 있습니다.

  • 데이터 수집 Collect data
  • 데이터 라벨링 Label data
  • 데이터 분할 Split data (train, test, and val)
  • 구성파일 생성 Creation of config files
  • 학습 Start training

1단계 데이터 수집

사진 데이터 구축은 저작권이 확보된 이미지를 구매하던지 개인적인 용도라면 웹스크롤을 통해 수집 할 수 있습니다.

더 많은 데이터는 더 정확한 모델을 만들어낼 수 있습니다. 그러나 이는 사용 사례와 데이터의 특성에 크게 의존합니다. 적어도 두 가지 경우에는 처음에 훈련 데이터에 많은 주석이 달린 이미지가 필요하지 않습니다.

첫 번째 경우는 이미지가 유사하게 보이고, 특정한 환경과 고정 조건에서 촬영된 경우입니다. 예를 들어, 생산 라인, 연구실, 고정된 카메라 위치와 유형, 비슷한 조명 등이 있는 경우입니다.

또는 물체가 단순하며 클래스 간 변화가 거의 없는 경우입니다. 이런 경우에는 채소, 결함, 식물, 생산 라인의 제품 등과 같이 간단한 물체들이 해당됩니다.

2단계 데이터 라벨링

2단계부터 4단계 까지는 수집한 데이터를 가공해야 하는데 Roboflow 플랫폼을 이용하면 편리하기 때문에 주로 Roboflow 플랫폼을 이용합니다. 또한 한 달에 1,000장까지는 무료로 사용할 수 있어, 취미로 사용하시는 분에게는 충분 할 것 같습니다.

이미지 안에 학습하고자 하는 영역과 라벨을 만들어서 이미지 데이터를 가공해줍니다.

3단계 데이터 분할

3단계 데이터 분할도 Roboflow 플랫폼에서 지원해 줍니다.

커스텀 데이터에 컴퓨터 비전 모델을 훈련하려면 데이터를 훈련 세트와 테스트 세트로 분할하는 것이 중요합니다.

훈련 세트는 모델에게 예측하는 방법을 가르치는 데 사용되고, 테스트 세트는 모델의 정확도를 평가하는 데 사용됩니다.

(80-20%) 분할 비율은 흔한 비율이지만, 실제 비율은 데이터셋의 크기와 작업하는 특정 과제에 따라 달라질 수 있습니다.

예를 들어, 데이터셋이 작은 경우 훈련에 더 높은 비율을 사용하는 것이 좋을 수 있으며, 반대로 큰 데이터셋의 경우 훈련에 더 작은 비율을 사용할 수 있습니다.

4단계 구성파일 생성

YOLOv8 학습

작업할 디렉토리에 “custom.yaml”이라는 구성파일을 생성해야 합니다. 그 파일에 아래의 코드를 붙여넣고, 데이터셋 폴더의 올바른 경로를 설정하고, 클래스와 그들의 이름을 수정하여 저장합니다.

YOLOv8 학습 구성파일은 아래와 같은데요. 구성파일 또한 Roboflow를 이용하시면 편리하게 자동으로 생성 시켜 줍니다.

path: (dataset directory path) 
train: (train dataset folder path) 
test: (test dataset folder path) 
valid: (validation dataset folder path) 

# Classes 
nc: 5 # replace based on your dataset's number of classes 

# Class names 
# replace all class names with your own classes' names 
names: ['class1', 'class2', 'class3', 'class4', 'class5']

5단계 학습

4단계 까지 전처리 단계를 거쳐 데이터셋이 준비가 되었으면 YOLOv8 학습할 단계 입니다.

터미널에서 아래 명령을 사용하여 커스텀 데이터로 YOLOv8 학습시킬 수 있습니다.

yolo task=detect mode=train model=yolov8n.pt data=custom.yaml epochs=3 imgsz=640
  • task = 감지 (분할segment  또는 분류classify일 수 있음)
  • mode = 학습 (예측predict  또는 검증val일 수 있음)
  • model = yolov8n.pt (yolov8s/yolov8l/yolov8x 중 하나일 수 있음)
  • epochs = 3 (어떤 숫자든 상관없음)
  • imgsz 크기 = 640 (320, 416 등이 될 수 있지만 32의 배수여야 함)

코드로 실행하려면 아래 코드를 입력하시면 됩니다. 아래 경로 부분과 데이터 파일을 변경하시고 실행하시면 됩니다.

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)

if __name__ == '__main__':
    # Use the model
    results = model.train(data="C:\\aabb\\serch\\yolotest\\data.yaml", epochs=3, imgsz=640)  # train the model
    results = model.val()  # evaluate model performance on the validation set
    results = model("C:\\aabb\\serch\\yolotest\\im1.jpg")  # predict on an image
    success = YOLO("yolov8n.pt").export(format="onnx")  # export a model to ONNX format

Pretrained Model

YOLOv8 의 학습은 주로 선행학습 Pretrained된 모델 COCO, VOC, ImageNet을 이용해서 사용자가 지정된 데이터셋과 하이퍼파라미터를 사용하여 모델을 훈련합니다. 훈련 과정은 모델의 매개변수를 최적화 하여 이미지 내 객체의 클래스와 위치를 정확하게 예측할 수 있도록 하는 것을 포함합니다.

Pretrained된 모델 COCO, VOC, ImageNet은 아래 링크를 확인하세요

YOLOv8 라벨링 없이 학습시키기

오픈소스인 Autodistill을 이용하면 몇 줄의 코드로 YOLOv8 모델을 라벨링 데이터 없이 훈련시킬 수 있습니다. 이를 통해 큰 기본 모델을 작은 모델로 증류시키고, 사용자의 데이터로 훈련된 모델을 생성할 수 있습니다. 관련된 내용은 추후 알아 보려 합니다.

핸드폰 카메라로 YOLOv8 인식 캠 만들기

참고자료

https://docs.ultralytics.com/ : 공식홈페이지

https://blog.roboflow.com/how-to-train-yolov8-on-a-custom-dataset/

https://velog.io/@choonsik_mom/Yolov8-classifier-model-custom-dataset%EC%9C%BC%EB%A1%9C-%ED%9B%88%EB%A0%A8%ED%95%98%EA%B8%B0

https://developer-lionhong.tistory.com/62

https://www.makeuseof.com/yolov8-how-train-custom-data/

https://www.freecodecamp.org/news/how-to-detect-objects-in-images-using-yolov8/

https://medium.com/cord-tech/yolov8-for-object-detection-explained-practical-example-23920f77f66a

https://medium.com/augmented-startups/train-yolov8-on-custom-data-6d28cd348262

댓글 남기기