본문 바로가기
[ Program ]/YOLO11 c#

3.YOLO11 모델로 학습

by 관이119 2025. 1. 14.

 

 

데이터를 학습하기 위해 어떤 대상을 찾아낼지 먼저 선정한다.

개인적으로 강아지를 찾아내기위해 강아지 사진을 백여장 수집했다.

학습할때 내부적으로 자동으로 리사이징 하기 때문에 학습할 이미지의 크기나 비율은 통일할 필요는 없고 너무 과도하게 크지만 않으면 된다(GPU 메모리 이내).

이미지 사이즈를 640x640 으로 통일하면 학습속도는 약간더 빠를수있지만 만들어진 모델을 사용할때 속도는 동일하다.

 

 

 

 

이미지를 학습할때 이미지 전체를 학습하는게 아닌 위 이미지와 같이 빡간네모박스 표시한 부분만 학습할 예정이다.

위와 같이 전체이미지의 일부분만 학습하던지 아니면 이미지 전체를 학습한다해도 욜로로 학습시 이미지의 어느 위치에 어느정도 크기를 학습할지 내용을 전달해줄 텍스트파일이 필요하다.

 

위와 같은경우 txt 파일에 0 0.4 0.5 0.4 0.5 라고 적어주면 되는데

내용형식은 (클래스,중심위치x,중심위치y,너비,높이) 순서이다.

이작업을 라벨링 이라고 부른다.

 

즉 , 0 0.4 0.5 0.4 0.5 일경우 0번클래스 중심위치x  는 0.4 중심위치 y 는 0.5 너비 0.4 높이 0.5 가 된다.

1이 전체 너비 일경우 0.4 정도에 네모 모양의 중심이 위치할것이고 네모모양의 크기는 전체크기가 1일 경우 40%정도 인 0.4 정도 되어 보인다. 높이 역시 마찬가지로 계산한 내용이다.

 

가장 첫번째 클래스 값의 경우는 만약 내가 강아지와 고양이 두가지의 데이터를 학습한다고 할때 강아지와 고양이를 분류 해주는 이름이 필요할것이다.

dog 0.4 0.5 0.4 0.5

cat 0.4 0.5 0.4 0.5

위와 같이 분류해주면 좋겠지만 욜로학습시 라벨에서는 문자가 허용되지않기때문에 숫자로 적어줘야한다.

0 0.4 0.5 0.4 0.5

1 0.4 0.5 0.4 0.5

그래서 위와같이 0 1 로 클래스를 적어주고 강아지이미지는 이미지의 어디에 있다고 표시할때는 클래스 0 을 써주고 고양이 이미지를 표시할때는 클래스 1을 써서 위치와 크기를 표시해주면 되겠다.

 

 

 

 

학습을 위해서는 위와 같은 구조가 필요하다.

dataset 라는 폴더를 만들고 그안에 images  와 labels  폴더가 위치해야하고 각가의 폴더내에는 train val test 폴더와 이미지 및 이미지에 대한 라벨링 파일도 필요하다.

라벨링 하는 방법은 바로 위에서 설명했는데 일일이 이미지를 하나씩 보면서 라벨링파일을 만들기에는 너무 고된 작업이 될것이다.

 

 

 

 

위 라벨링 작업을 편하게 할수 있는 labelImg 라는 프로그램인데  https://github.com/HumanSignal/labelImg 해당경로로 들어가면된다.

설치 및 사용방법은  4.labelimg 설치및 사용법 https://ldg119.tistory.com/790 을 참고하자

 

 

 

위와 같이 라벨링 작업을 완료했다.

각 이미지파일명.txt 에는 클래스,위치,크기정보가 들어있고 classes.txt 에는 클래스 정보가 들어있다.

 

 

 

위와 같은 구조로 파일및 폴더를 생성해서 최종적용한다.

 

train 은 학습용 데이터로 전체 데이터의  70~80% 정도를 할당하면되고

val 은 학습중 학습되고 있는 데이터를 평가하기 위해 사용하는데 10~20% 정도를 할당하면된다.

test 는 학습된 모델의 최종테스트용 데이터로 최근데이터를 사용해서 10~15% 정도를 할당하자.

 

참고로 동일한 이미지가 train,val,test 에 중복되면 안된다.

 

 

 

 

dataset.yaml

yaml 파일은 위 형식처럼 만들어 주면 된다.

names 에는 0 , 1 처럼 아이디를 적으면 안되고 사용할 클래스 명칭을 적으면 된다.

 

-------------------------------------------

train: C:/Users/L/Desktop/dataset/images/train
val: C:/Users/L/Desktop/dataset/images/val
test: C:/Users/L/Desktop/dataset/images/test

nc: 1 
names: ['dog']

-------------------------------------------

위와같이 yaml 파일을 만들어줬다.

 

 

 

cmd 창에서 위와 같이 입력해서 yaml 파일의 내용이 정삭적으로 나오면 정상적으로 만들어진 파일이라고 생각하면 된다.

-------------------------------------------

import yaml
with open("C:/Users/L/Desktop/dataset/dataset.yaml", "r") as file: data = yaml.safe_load(file)
print(data)

-------------------------------------------

경로는 개별 변경필요

 

 

 

 

최종적으로 위와 같이 만들고 images , labels 폴더내에 각각의 폴더에 이미지와 텍스트 파일을 구분해서 8:1:1 비율로 넣어준상태다.

 

 

위와 같이 파이썬 파일을 생성해주자. ( 파이썬 파일은 UTF-8 로 만들어야 한다.)

---------------------------------------------------------------------------------------

from ultralytics import YOLO

# YOLO11 모델 학습 스크립트
model = YOLO("yolov8n.pt")  # YOLOv8 모델 (YOLO11과 호환)

# 학습 실행
model.train(
    data="C:/Users/L/Desktop/dataset/dataset.yaml",  # 데이터셋 yaml 경로
# 학습 에폭 수 - train 이미지로 몇번반복학습할지 여부 , 일반적으로 50~300 사용, 너무적으면 학습을적게해서 과소적합 , 너무 많으면 학습을 너무잘해서 과대적합이 발생할수 있음.
    epochs=50,                   
# 이미지 크기 - 학습에 사용할 이미지크기, 해당크기로 변환되어 학습함. 일반적으로 416,512,640,1280 사용. 수치가작으면 객체탐지성능이 떨어지고 , 수치가 클수록 탐지성능이 좋아짐. 클수록 GPU 메모리필요량 증가.
    imgsz=640,                   
# 배치 크기 - 학습시 몇개의 이미지를 한번에 학습에 사용할지에관한 수치. 높을수록 학습속도는 빨라지지만 GPU 메모리 초과될수 있음.(학습속도는 탐지속도와 관련없음)
    batch=16                     
)

# 학습 결과 출력
print("Training complete. Model saved at:", model.ckpt_path)

---------------------------------------------------------------------------------------

 

 

 

위에서 만든 파이썬 파일을 cmd 창에서 실행하자(경로는 개인저장한 경로)

python C:/Users/L/Desktop/train_yolo.py

 

 

 

내가 설정한 Epoch 으로 학습을 진행한다.

 

 

 

설정한 만큼 다 반복하면서 학습이 완료 됐는지 확인한다.

 

 

 

학습이 완료 되면 py를 실행한 경로에 runs 라는 폴더가 생성된다.

내부 경로를 따라 들어가면 위와 같이 결과 파일들이 생성되있는걸 확인할 수 있다.

 

 

그중 results 파일을 보면 학습한 모델의 성능을 확인할수 있다.

왼쪽에 있는 loss 들은 계속적으로 감소하는 형태가 이상적이다.

우측 상단에 있는 precision 과 recall 은 0.5 이상이 안정적인 성능을 발휘한다고 한다.

Epoch 50번의 평균으로 보면 성능이 좋아보이지는 않은데 학습자료가 늘어나면 더 좋은 결과가 나올수 있을것이다.

우측하단에 있는 mAP50 역시 0.5 이상이 일반적으로 좋은 성능으로 간주된다고 하는데 해당수치역시 학습량이 적어 결과가 좋지는 않은 편이다.

 

 

 

위와 같이 weights 폴더에 들어가면 best.pt 라고 되있는 파일이 있는데 해당 파일이 학습된 최종 모델 파일이다.

 

 

 

'[ Program ] > YOLO11 c#' 카테고리의 다른 글

4. labelimg 설치및 사용법  (0) 2025.01.14
2. ultralytics 설치  (0) 2025.01.11
1. 파이썬 설치  (0) 2025.01.11
Yolo11 을 c# 에서 사용해보기 위한 내용정리  (0) 2025.01.11

댓글