모델 학습이란?
| 항목 | 내용 |
|---|---|
| 핵심 개념 | Transfer Learning: 사전 학습 모델의 지식을 내 데이터에 맞게 조정 |
| 왜 사용하는가 | 적은 데이터로도 높은 성능, 학습 시간 대폭 단축 |
| YOLO 적용 방식 | Backbone(특징 추출)은 동결, Head(탐지)를 새로 학습 |
| 핵심 파라미터 | epochs, batch, imgsz, lr0, optimizer, patience |
| 과적합 방지 | weight_decay, dropout, early stopping, 데이터 증강 |
문서 탐색
Transfer Learning 개념
Transfer Learning(전이 학습) 은 대규모 데이터셋(COCO, ImageNet 등)으로 이미 학습된 모델의 지식을 내 도메인에 맞게 재활용하는 방법입니다.
왜 Transfer Learning을 사용하는가?
| 이유 | 설명 | 철도 드론 적용 |
|---|---|---|
| 적은 데이터로 학습 | 사전 학습으로 이미지의 기본 특징(엣지, 패턴)을 이미 알고 있음 | 철도 결함 이미지를 수천 장만 확보해도 충분 |
| 빠른 학습 속도 | 처음부터 학습하는 것보다 수렴이 훨씬 빠름 | 에포크 수를 줄여 실험 주기 단축 |
| 높은 초기 성능 | 랜덤 초기화 대비 시작점이 이미 좋음 | 소형 GPU로도 실용 수준의 mAP 달성 |
처음부터 학습하는 것(Training from Scratch)은 수백만 장의 이미지와 수십 시간의 학습이 필요하지만, Transfer Learning은 수천 장의 데이터와 수 시간으로도 좋은 결과를 얻을 수 있습니다.
YOLO에서의 Transfer Learning
YOLOv8/v11의 구조는 크게 세 부분으로 나뉩니다.
입력 이미지
↓
[Backbone] ← 이미지에서 특징(패턴, 엣지, 형태) 추출
↓
[Neck] ← 다양한 크기의 특징 맵을 합성
↓
[Head] ← 최종 바운딩 박스와 클래스 예측
↓
출력: [x, y, w, h, class_id, confidence]
Backbone freeze vs Head 학습
Transfer Learning의 기본 전략은 Backbone(특징 추출 레이어)을 동결(freeze)하고 Head만 새로 학습하는 것입니다.
- Backbone: COCO로 학습된 범용 특징 추출 능력 유지 (레일 엣지, 균열 패턴 탐지에 그대로 활용)
- Head: 철도 도메인의 클래스(균열, 체결구, 침목)에 맞게 새로 학습
레이어 Freeze 전략
| 전략 | freeze 설정 | 적합한 상황 |
|---|---|---|
| Full Fine-tuning | freeze=None (기본) | 데이터가 1,000장 이상, 도메인 차이가 클 때 |
| Head만 학습 | freeze=10 | 데이터가 적고, 사전 학습 도메인과 유사할 때 |
| Backbone 완전 동결 | freeze=22 (전체 백본) | 데이터가 매우 적을 때 (수백 장 이하) |
| 점진적 해제 | 에포크마다 freeze 변경 | 최고 성능을 위한 고급 기법 |
드론 철도 이미지는 COCO의 일반 사물과 도메인이 다르므로, 초반 에포크에는 freeze=10으로 Head를 먼저 학습한 뒤, 이후 에포크에서 전체를 Fine-tuning하는 것이 효과적입니다.
핵심 학습 파라미터
| 파라미터 | 기본값 | 설명 | 권장 |
|---|---|---|---|
epochs | 100 | 전체 데이터를 학습하는 반복 횟수 | 100~300 (early stopping과 함께) |
batch | 16 | 한 번에 처리하는 이미지 수 | GPU 메모리에 맞게 조정, -1로 자동 설정 |
imgsz | 640 | 학습 이미지 크기 (정사각형 기준) | 640 기본, 소형 객체는 1280 |
lr0 | 0.01 | 초기 학습률 | 0.01 (SGD), 0.001 (Adam) |
lrf | 0.01 | 최종 학습률 비율 (lr0의 배수) | 0.01 (Cosine Scheduler와 함께) |
optimizer | auto | 최적화 알고리즘 | SGD (일반), AdamW (소형 데이터) |
patience | 50 | Early stopping 대기 에포크 수 | 20~50 |
학습률(Learning Rate) 이해
학습률이 너무 크면: 최솟값을 뛰어넘어 발산 (Loss가 오히려 증가)
학습률이 너무 작으면: 수렴이 매우 느리거나 지역 최솟값에 갇힘
적절한 학습률: Loss가 안정적으로 감소
YOLO는 Cosine LR Scheduler를 기본 사용하여 학습 초반에는 높은 학습률로 빠르게 수렴하고, 후반에는 낮은 학습률로 세밀하게 조정합니다.
정규화/과적합 방지 파라미터
| 파라미터 | 기본값 | 설명 | 권장 |
|---|---|---|---|
weight_decay | 0.0005 | 가중치 크기에 패널티를 주어 과적합 방지 | 0.0005 유지 |
dropout | 0.0 | 학습 중 무작위 뉴런 비활성화 비율 | 소규모 데이터 시 0.1~0.3 |
warmup_epochs | 3.0 | 초반 학습률을 서서히 높이는 에포크 수 | 3 (기본 유지) |
cos_lr | False | Cosine 학습률 스케줄러 사용 여부 | True 권장 |
close_mosaic | 10 | 학습 마지막 N 에포크에서 Mosaic 비활성화 | 10~15 |
close_mosaic는 학습 후반부에 Mosaic 증강을 끄는 설정으로, 모델이 실제 이미지에 가까운 패턴을 최종 학습하도록 도와줍니다.
Loss 가중치 파라미터
YOLO의 총 손실(Loss)은 세 가지 요소의 합입니다.
| 파라미터 | 기본값 | 설명 | 높이면 |
|---|---|---|---|
box | 7.5 | 바운딩 박스 위치·크기 Loss 가중치 | 박스 위치 정확도 향상 |
cls | 0.5 | 클래스 분류 Loss 가중치 | 클래스 구분 정확도 향상 |
dfl | 1.5 | Distribution Focal Loss 가중치 (경계 정밀도) | 박스 경계 정밀도 향상 |
총 Loss = box × BoxLoss + cls × ClsLoss + dfl × DFLLoss
드론 철도 이미지에서 소형 객체의 정확한 위치 탐지가 중요하다면 box 값을 약간 높이는 것을 고려할 수 있습니다.
과적합이란?
과적합(Overfitting) 은 모델이 학습 데이터에는 완벽히 맞지만 새로운 이미지에서는 성능이 떨어지는 현상입니다.
징후
징후: train loss ↓ (감소) + val loss ↑ (증가)
→ 학습 데이터는 잘 맞추지만 검증 데이터는 틀림
→ mAP@50(val)이 특정 에포크 이후 떨어지기 시작
주요 원인 5가지
- 학습 데이터 부족: 클래스당 이미지가 수백 장 이하
- 모델 크기 과대: 데이터 양 대비 파라미터가 너무 많음 (YOLOv8x를 소규모 데이터에 사용)
- 학습 에포크 과다: 필요 이상으로 오래 학습
- 데이터 다양성 부족: 특정 환경(맑은 날, 특정 고도)만 포함
- 정규화 부재: weight_decay, dropout 미적용
과적합 방지 기법
| 기법 | 설정 방법 | 효과 |
|---|---|---|
| 데이터 증강 | mosaic, flipud, scale 등 활성화 | 학습 데이터 다양성 증가 |
| Early Stopping | patience=30 | val mAP가 개선되지 않으면 자동 중단 |
| Weight Decay | weight_decay=0.0005 | 가중치 크기를 억제해 과적합 방지 |
| 전이 학습 | .pt 사전 학습 모델 사용 | 적은 데이터로도 일반화 가능 |
| 모델 크기 축소 | yolov8n → yolov8s 순으로 시도 | 파라미터 수를 줄여 단순화 |