Bootcamp MissionComputer Vision
축구 장면 세그멘테이션
U-Net으로 축구 경기 장면을 영역 단위로 분할하는 실습
게시 2026-07-10
PythonPyTorchtorchvisionOptunaOpenCVJupyter
Contents · 목차
무엇을 하는 미션인가
축구 경기 장면을 11개 클래스로 나누는 세그멘테이션 미션입니다. 이미지와 마스크를 쌍으로
읽는 FootballDataset을 만들고, U-Net 계열 세 구조를 같은 조건에서 비교했습니다.
구현
- 손실 —
DiceLoss와CrossEntropyLoss를 함께 정의해 사용 - 평가 —
calculate_iou로 클래스별 IoU를 구해 mIoU와 Dice를 계산 - 학습 — Adam(
lr=0.001,weight_decay=1e-4), 최대 100 에폭 이상 - 하이퍼파라미터 — Optuna로 탐색한 파라미터를 세 구조에 동일 적용
세 구조 비교 (검증셋)
| 구조 | Best Epoch | Val Loss | Val mIoU | Val Dice |
|---|---|---|---|---|
| U-Net | 91 | 0.2631 | 0.8666 | 0.9071 |
| U-Net++ | 77 | 0.2627 | 0.8743 | 0.9133 |
| Attention U-Net | 108 | 0.2689 | 0.8699 | 0.9098 |
U-Net++가 세 지표 모두에서 근소하게 앞섰고, 가장 이른 에폭(77)에서 최고점에 도달했습니다. 다만 mIoU 차이는 0.008 이내입니다.
한계
- 시드 반복이 없어 위 차이가 실행 변동 범위 안인지 확인되지 않았습니다. 구조 간 우열을 주장하기에는 간격이 좁습니다
- 검증셋 기준이며 별도 테스트셋 평가는 없습니다
- 예측 마스크 시각화는 노트북 안에만 있고 사이트로 옮기지 않았습니다