카테고리 없음

YOLOv8 custom Train

_펭구_ 2024. 2. 5. 20:22

Ultralytics의 YOLOv8은 23년 1월에 출시된 모델이다. YOLOv5를 만든 곳과 동일하다. 그래서 github 와 docs등이 인터넷에 아주 잘 설명이 되어있다. 막연히 최신버전이라고 가장 좋은 성능을 나타내는 것은 아니라고 알고 있다. 상황에 따라서 각자 가진 dataset에 따라서 적합한 모델을 사용하면 될 것 같다. 또한 YOLOv8은 아래와 같이 다양한 Task를 수행할 수 있다. 여기서는 object Detection을 중심으로 다뤄볼 예정이다. 다른 Task도 시간이 나면 다룰 예정이다. 이전 글을 보면 감이 오겠지만 

YOLOv5 부터는 custom Train을 하는 방법이 큰 틀에서는 비슷한 것 같다. 파일 디렉터리의 순서, 패키지 버전만 주의하면 될듯하다.  

YOLOv8 Tasks

일단 아나나콘다 환경에서 아래의 명령어를 입력해 yolov8 가상환경을 생성하고 가상환경을 실행한다. 

$ conda create -n yolov8 pyton=3.8
$ conda activate yolov8

URL : https://github.com/ultralytics/ultralytics을 입력해 git clone을 진행한다. 디렉토리는 사용자가 편한 곳으로 설정한다.

지원하는 버전은   Python>=3.8.0 및 PyTorch>=1.8 환경에서 실행이 되므로 다음과 같이 Pytorch를 설치를 해준다. 

$ conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch

YOLOv8 공식문서에 보면 ultralytics 패키지를 만들어 사용이 쉽게 만들어 두었다.

 pip install, conda install 등 다양하게 지원하니 공식 문서를 참고하면 좋을 듯하다. 

$ conda install -c conda-forge ultralytics

필요한 패키기 설치가 끝났으면 custom dataset을 정리해주어야 한다.

custom dataset은 YOLO_mark(다른 annotation tool)을 사용해 학습할 이미지, txt파일(YOLO_format)을 준비한다. 

imgaes에는 .jpg파일이 / labels파일에는 .txt파일이 들어가야 한다. 이때 .jpg파일과 .txt파일 이 일치해야 한다. 

custom yolov8 파일구성


다음은 custom.yaml파일을 만들어 준다. 모델의 구성파일이다.

아래의 사진과 같이 구성을 해주면 된다. 

custom yolov8 data.yaml

path : train, validation, (test) 이미지와 annotation이 있는 폴더의 경로

train : train 이미지의 경로 / val : validation 이미지의 경로 

nc : class의 갯수 

names : class의 이름 


pretrain 모델을 이용하면 좀 더 빠르고 정확한 학습을 진행할 수 있다. pretrained된 모델을 선택한다. 

YOLOv8에는 모델의 종류가 많다. Yolov8는 n, s, m, l, x 5가지 버전이 존재한다. 

yolov8 pretrained model

이제 학습을 시작할 차례이다. 사전에 wandb와 같은 딥러닝 실험 과정을 손쉽게 Tracking하고, 시각화할 수 있는 Tool을 사용하면 더 쉽게 추적이 가능하다. 우선 훈련 관련 인자들을 확인할 수 있다. 중요한 인자들만 살펴보도록 하겠다. 

Parameter Value Description
model None 모델 파일의 경로(yolov8n.pt)
data None 데이터 파일의 경로(data.yaml)
epochs 100 학습 횟수 
patience 50 조기 중단을 위해 개선이 없을 때 까지 기다리는 epochs 수
batch 16 batch-size(auto batch -1)
imgsz 640 이미지의 크기 
device None GPU의 갯수 1개이면 0 / 여러개이면 0,1,2,3 등 / CPU도 가능하다
optimizer 'auto' 사용할 optimizer (SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto)

공식 문서에 인자들의 관한 내용이 더 많으니 확인해보면 좋을 듯하다. 


이제 학습을 시작할 차례이다. 아래의 명령어를 입력하면 훈련이 시작된다.

yaml, weights 파일의 위치만 주의해서 적어주면 된다. 

$ yolo detect train data=data.yaml model=yolov8m.pt epochs=400 imgsz=640 batch=8

wandb와 연동이 되어 있다면 학습 진행중 결과를 실시간으로 확인을 할 수 있다.

학습이 끝나면 다음과 같이 결과파일도 확인 할 수 있다. 

yolov8 result
yolov8 confusion matrix


아래의 파이썬 파일을 생성해 아래의 코드를 입력하면 웹캠으로 결과를 확인할 수 있다. 

from ultralytics import YOLO

model = YOLO("best.pt")

result = model.predict(source="0", show=True)

print(result)

YOLOv8 webcam test


Reference

https://docs.ultralytics.com/

 

Home

Explore a complete guide to Ultralytics YOLOv8, a high-speed, high-accuracy object detection & image segmentation model. Installation, prediction, training tutorials and more.

docs.ultralytics.com

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

 

Train YOLOv8 on a Custom Dataset

In this article, we walk through how to train a YOLOv8 object detection model using a custom dataset.

blog.roboflow.com

https://blog.naver.com/wintercamo/223278337613

 

[DL/ML]커스텀데이터셋으로 yolov8 학습하기

저번 게시물에서 다룬 것... https://blog.naver.com/wintercamo/223272162681 이 때 다룬 것은 이미지 라...

blog.naver.com

https://velog.io/@choonsik_mom/YOLO-Detector-%EC%BB%A4%EC%8A%A4%ED%85%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%ED%9B%88%EB%A0%A8%ED%95%98%EA%B8%B0

 

velog

 

velog.io


정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다. 틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글 남겨주시거나 또는 이메일로 보내주시면

감사하겠습니다.