! 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'Data_Analysis_Track_33 > Python' 카테고리의 다른 글
| Python_Computer_vision_04(yolov8_pose) (0) | 2023.11.10 |
|---|---|
| Python_Computer_vision_03(yolov8_segmentation) (0) | 2023.11.09 |
| Python_Computer_vision_01(yolov8_object_detection) (0) | 2023.11.08 |
| Python_Deeplearning_pytorch_12(DCGan_실습) (1) | 2023.11.03 |
| Python_Deeplearning_pytorch_11(LSTM을 활용한 주가예측) (1) | 2023.11.03 |