본문 바로가기

Data_Analysis_Track_33/Python

Python_Computer_vision_02(yolov8_customdataset_train 실습)

! google colab으로 실행 권장(GPU)

- 드라이브 마운트

- yolo 설치 => 연결할 때마다 설치해야 함.

# yolo 설치 => 연결할 때마다 설치해야 함.
!pip install ultralytics

 

과일, 야채 image detection

fruits = ['Apple', 'Banana', 'Beetroot', 'Bitter_Gourd', 'Bottle_Gourd', 'Cabbage', 'Capsicum', 'Carrot', 'Cauliflower', 'Cherry', 'Chilli', 'Coconut', 'Cucumber', 
          'EggPlant', 'Ginger', 'Grape', 'Green_Orange', 'Kiwi', 'Maize', 'Mango', 'Melon', 'Okra', 'Onion', 'Orange', 'Peach', 'Pear', 'Peas',
          'Pineapple', 'Pomegranate', 'Potato', 'Radish', 'Strawberry', 'Tomato', 'Turnip', 'Watermelon']
len(fruits)

 

 

Dataset 다운 및 복사

 

colab에서 다음 코드를 실행하여 roboflow의 fruit&vegi 데이터셋 다운로드

!curl -L "https://universe.roboflow.com/ds/dXn2tflhQd?key=bxeASYk2io" > roboflow.zip

 

 

다운받은 zip파일 압축풀기

# 압축풀기
import os
from zipfile import ZipFile
os.makedirs("data", exist_ok=True)

with ZipFile("roboflow.zip") as zf:
  zf.extractall("data")

 

 

yaml에 저장할 내용을 dict 로 정의

- train, val, test의 value값에 train, val, test 디렉토리 경로를 지정

- yaml.dump를 통해 파일로 저장

import yaml

# yaml에 저장할 내용을 dict 로 정의
d = {
    "train":r"/content/data/train",
    "val":r"/content/data/valid",
    "test":r"/content/data/test",
    "nc":35,
    "names":fruits
}

# 파일로 저장
with open("data.yaml", "wt") as fw:
  yaml.dump(d, fw)

 

 

google driver 로 작업디렉토리(working directory)를 옮긴다.

- google colab은 가상의 환경에서 실행되기 때문에 작업 내용을 저장하려면 디렉토리를 변경해야 한다.

# google driver 로 작업디렉토리(working directory)를 옮긴다.
# 학습을 하면 학습 결과, 학습된 모델을 저장. => working_derectory/run/ 하위 저장.
# os.getcwd() # 작업 디렉토리 확인
os.chdir("/content/drive/MyDrive/pytorch/object_detection") # 작업 디렉토리 변경
os.getcwd()

 

 

학습

from ultralytics import YOLO

model = YOLO("models/yolov8n.pt")

 

 

학습하기

- 코드상 epochs=1 인 것은 시간이 부족하여 프로그램이 돌아가는지 확인하기 위함 정상적으로는 100정도 권장

  • 이어서 학습
  • model = YOLO("이어서 학습할 모델파일 경로")
  • model.train(resume=True)
# 처음 학습
model.train(data="/content/data.yaml", # 학습 관련 yaml 설정파일의 경로
            epochs=1,
            patience=20, # early stopping - 지정한 epoch동안 성능개선이 안되면 멈춘다.
            imgsz=640, # 입력 이미지 크기. (다른 크기가 입력되면 알아서 resize한다.) default: 640
            optimizer="Adam",
            )

 

 

평가

  • YOLO객체 생성시 저장된 모델파일 경로를 넣어 생성한다.
        - 학습할때 사용한 yaml파일 학습때와 동일한 경로에 있어야 한다.
        - train/validation/test 데이터셋이 yaml에 등록된 경로에 있어야 한다.
  • YOLO.val() 이용
        - DetMetrics 타입 객체에 결과를 담아 반환

 

best_model -> 가장 결과가 좋은 모델(best.pt)를 가지고 평가한다.

- weights 디렉토리 안에 best.pt와 last.pt가 있는데 last.pt는 가장 마지막으로 학습한 모델을 의미한다.

best_model = YOLO("/content/drive/MyDrive/pytorch/object_detection/runs/detect/train/weights/best.pt")
metrics = best_model.val()

 

 

평가 결과 확인

print(metrics.box.map) # map50-95 결과
print(metrics.box.map50) # map50 결과
print(metrics.box.maps) # class별 map50-95