학습 실행

항목내용
기본 방식사전 학습 .pt 모델 불러와 Fine-tuning
CLI 방식yolo detect train 명령어로 터미널에서 실행
학습 재개resume=True로 중단된 학습 이어가기
Backbone 고정freeze=10으로 초반 레이어 동결
결과 위치runs/detect/<name>/ 폴더에 자동 저장

문서 탐색


Step 1: 사전 학습 모델로 Fine-tuning

가장 기본적인 학습 방법입니다. COCO로 사전 학습된 .pt 파일을 불러와 커스텀 데이터셋에 맞게 조정합니다.

from ultralytics import YOLO
 
# 1. 사전 학습 모델 로드 (없으면 자동 다운로드)
model = YOLO("yolov8n.pt")   # n=nano, s=small, m=medium, l=large, x=extra-large
 
# 2. 학습 실행
results = model.train(
    data="railway_dataset/data.yaml",  # 데이터셋 설정 파일
    epochs=100,                         # 학습 반복 횟수
    imgsz=640,                          # 입력 이미지 크기
    batch=16,                           # 배치 크기
    lr0=0.01,                           # 초기 학습률
    optimizer="SGD",                    # 최적화 알고리즘
    patience=30,                        # Early stopping 대기 에포크
    project="runs/railway",             # 결과 저장 상위 폴더
    name="finetune_v1",                 # 실험 이름
    save=True,                          # 체크포인트 저장
    exist_ok=False                      # 같은 이름 폴더 있으면 오류 (True면 덮어쓰기)
)
 
print("최고 성능 모델:", results.save_dir / "weights/best.pt")

모델 크기별 특성 비교

모델파라미터 수추론 속도mAP권장 상황
yolov8n3.2M매우 빠름낮음시작 실험, 엣지 디바이스
yolov8s11.2M빠름보통균형 잡힌 성능
yolov8m25.9M보통높음충분한 GPU 환경
yolov8l43.7M느림매우 높음서버 환경, 최고 성능 필요 시
yolov8x68.2M가장 느림최고연구, 벤치마크

처음에는 반드시 yolov8n 또는 yolov8s 부터 시작하세요. 빠른 실험 주기가 최종 성능보다 중요합니다.


Step 2: CLI로 학습

Python 코드 없이 터미널에서 직접 실행할 수 있습니다. 서버나 배치 스크립트 환경에서 유용합니다.

# 기본 학습
yolo detect train \
    data=railway_dataset/data.yaml \
    model=yolov8n.pt \
    epochs=100 \
    imgsz=640 \
    batch=16 \
    project=runs/railway \
    name=cli_train_v1
 
# 한 줄로 실행
yolo detect train data=railway_dataset/data.yaml model=yolov8n.pt epochs=100 imgsz=640
 
# 추가 파라미터 포함
yolo detect train \
    data=railway_dataset/data.yaml \
    model=yolov8s.pt \
    epochs=200 \
    imgsz=640 \
    batch=-1 \
    lr0=0.01 \
    patience=30 \
    degrees=15 \
    flipud=0.3 \
    scale=0.7 \
    name=drone_railway_v2

CLI와 Python API는 동일한 결과를 냅니다. 환경에 따라 편한 방식을 선택하세요.


Step 3: 학습 재개

학습이 중간에 중단되었을 때(전원 차단, 서버 오류 등) resume=True로 이어서 학습할 수 있습니다.

from ultralytics import YOLO
 
# 마지막으로 저장된 last.pt 불러와 재개
model = YOLO("runs/railway/finetune_v1/weights/last.pt")
 
results = model.train(
    resume=True   # 이전 학습 설정과 에포크를 자동으로 이어받음
)
# CLI로 재개
yolo detect train resume=True model=runs/railway/finetune_v1/weights/last.pt

resume=True를 사용하면 last.pt에 저장된 이전 학습의 모든 설정(epochs, lr, data 등)이 자동으로 복원됩니다. dataepochs 등을 별도로 지정하지 않아도 됩니다.


Step 4: Backbone Freeze 학습

데이터가 적거나(수백~수천 장) 빠른 초기 수렴이 필요할 때 Backbone 레이어를 동결하고 Head만 먼저 학습합니다.

from ultralytics import YOLO
 
model = YOLO("yolov8n.pt")
 
# Phase 1: Backbone 동결 후 Head만 학습 (빠른 초기 수렴)
results_phase1 = model.train(
    data="railway_dataset/data.yaml",
    epochs=30,
    imgsz=640,
    batch=16,
    freeze=10,                  # 처음 10개 레이어 동결 (Backbone)
    lr0=0.001,                  # Freeze 학습은 낮은 학습률 권장
    project="runs/railway",
    name="freeze_phase1"
)
 
# Phase 2: 전체 Fine-tuning (더 정밀한 학습)
model2 = YOLO("runs/railway/freeze_phase1/weights/best.pt")
results_phase2 = model2.train(
    data="railway_dataset/data.yaml",
    epochs=70,
    imgsz=640,
    batch=16,
    freeze=None,                # 전체 레이어 학습
    lr0=0.0001,                 # 낮은 학습률로 세밀하게 조정
    project="runs/railway",
    name="finetune_phase2"
)

학습 출력 파일 설명

학습이 완료되면 runs/railway/<name>/ 폴더에 다음 파일들이 생성됩니다.

파일설명활용 방법
results.csv에포크별 loss, mAP 수치 기록학습 곡선 분석, Excel 시각화
results.pngloss와 mAP 그래프 이미지학습 진행 상황 한눈에 확인
train_batch*.jpg학습 배치 시각화 (증강 적용 후)증강 설정이 올바른지 확인
val_batch*_pred.jpg검증 배치에 대한 모델 예측 결과모델이 어떤 객체를 탐지하는지 확인
confusion_matrix.png클래스별 혼동 행렬클래스 간 혼동 패턴 파악
weights/best.pt검증 mAP 기준 최고 성능 모델실제 배포에 사용
weights/last.pt마지막 에포크 모델학습 재개(resume)에 사용

실전 팁

처음 시작할 때

  • yolov8n부터 시작하세요. 빠른 실험으로 데이터셋 품질과 파이프라인을 먼저 검증합니다.
  • 성능이 어느 정도 확인된 후 yolov8s, yolov8m으로 모델 크기를 키웁니다.

빠른 데이터셋 검증

# 전체 데이터의 10%만 사용해 파이프라인 빠르게 테스트
model.train(
    data="railway_dataset/data.yaml",
    epochs=5,
    fraction=0.1,   # 데이터의 10%만 사용
    imgsz=640
)

이미지 크기 설정

# 일반 객체 탐지 (기본)
imgsz=640
 
# 드론 이미지의 소형 객체 (균열, 체결구)
imgsz=1280   # 더 많은 메모리 필요, 배치 크기를 절반으로 줄여야 함

배치 크기 자동 설정

# batch=-1: GPU 메모리에 맞게 최적 배치 크기 자동 탐색
model.train(
    data="railway_dataset/data.yaml",
    epochs=100,
    batch=-1    # 자동 설정 (약 60% GPU 메모리 활용 기준)
)

학습 중 모니터링

# 학습 중 실시간 GPU 사용률 확인
watch -n 1 nvidia-smi
 
# TensorBoard로 loss 곡선 실시간 확인 (별도 터미널)
tensorboard --logdir runs/railway

문서 탐색


참고 자료