YOLO 학습
이 문서에서는 Ultralytics를 사용하여 커스텀 데이터셋으로 YOLO 탐지 모델을 학습하는 전 과정을 실습합니다.dataset/
├── images/
│ ├── train/
│ │ ├── img001.jpg
│ │ └── img002.jpg
│ └── val/
│ ├── img101.jpg
│ └── img102.jpg
├── labels/
│ ├── train/
│ │ ├── img001.txt
│ │ └── img002.txt
│ └── val/
│ ├── img101.txt
│ └── img102.txt
└── dataset.yaml
# dataset.yaml
path: /path/to/dataset # 데이터셋 루트 경로
train: images/train # 학습 이미지 경로
val: images/val # 검증 이미지 경로
nc: 3 # 클래스 수
names: ['person', 'helmet', 'no_helmet'] # 클래스 이름
from ultralytics import YOLO
# 사전학습 모델 로드
model = YOLO('yolo11m.pt')
# 학습 실행
results = model.train(
data='dataset.yaml',
epochs=100,
imgsz=640,
batch=16,
lr0=0.01, # 초기 학습률
lrf=0.01, # 최종 학습률 비율
optimizer='AdamW',
patience=20, # Early Stopping patience
device=0, # GPU 번호 (CPU는 'cpu')
project='runs/detect',
name='safety_helmet',
)
epochsimgszbatchlr0optimizerpatiencemosaicmixupclose_mosaic# 학습 결과 디렉터리 확인
# runs/detect/safety_helmet/
# ├── weights/
# │ ├── best.pt # 최적 모델
# │ └── last.pt # 마지막 에폭 모델
# ├── results.csv # 에폭별 지표
# ├── results.png # 학습 곡선
# ├── confusion_matrix.png
# ├── F1_curve.png
# ├── PR_curve.png
# └── val_batch0_pred.jpg # 검증 예측 시각화
CLI 사용법
Python API 대신 명령줄에서도 학습할 수 있습니다.학습 모범 사례
| 항목 | 추천 | 이유 |
|---|---|---|
| 모델 크기 | YOLO11m | 속도/성능 균형 |
| 이미지 크기 | 640 | YOLO 표준, 필요 시 1280 |
| 배치 크기 | GPU 메모리에 맞게 | batch=-1로 자동 탐색 |
| 에폭 | 100~300 | 데이터 규모에 비례 |
| 증강 | Mosaic + 기본 증강 | 기본 설정 충분 |
| 옵티마이저 | AdamW | SGD 대비 빠른 수렴 |
트러블슈팅
학습 중 mAP가 0에서 오르지 않습니다
학습 중 mAP가 0에서 오르지 않습니다
- dataset.yaml의 경로가 정확한지 확인하세요. 2) 레이블 파일의 좌표가 0~1 사이의 정규화 값인지 확인하세요. 3) 레이블 파일의 클래스 인덱스가 0부터 시작하는지 확인하세요.
GPU 메모리 부족(OOM) 오류가 발생합니다
GPU 메모리 부족(OOM) 오류가 발생합니다
batch 값을 절반으로 줄이거나, batch=-1로 자동 설정하세요. 이미지 크기(imgsz)를 640에서 480으로 줄이는 것도 효과적입니다.이전 학습을 이어서 하고 싶습니다
이전 학습을 이어서 하고 싶습니다
model='runs/detect/train/weights/last.pt'를 사용하고 resume=True를 추가하면 중단된 지점부터 학습을 재개합니다.
