Minseong Code Lab
← Projects
Bootcamp MissionComputer Vision

축구 장면 세그멘테이션

U-Net으로 축구 경기 장면을 영역 단위로 분할하는 실습

게시 2026-07-10
PythonPyTorchtorchvisionOptunaOpenCVJupyter
Contents · 목차
  1. 무엇을 하는 미션인가
  2. 구현
  3. 세 구조 비교 (검증셋)
  4. 한계

무엇을 하는 미션인가

축구 경기 장면을 11개 클래스로 나누는 세그멘테이션 미션입니다. 이미지와 마스크를 쌍으로 읽는 FootballDataset을 만들고, U-Net 계열 세 구조를 같은 조건에서 비교했습니다.

구현

  • 손실 — DiceLoss와 CrossEntropyLoss를 함께 정의해 사용
  • 평가 — calculate_iou로 클래스별 IoU를 구해 mIoU와 Dice를 계산
  • 학습 — Adam(lr=0.001, weight_decay=1e-4), 최대 100 에폭 이상
  • 하이퍼파라미터 — Optuna로 탐색한 파라미터를 세 구조에 동일 적용

세 구조 비교 (검증셋)

구조Best EpochVal LossVal mIoUVal Dice
U-Net910.26310.86660.9071
U-Net++770.26270.87430.9133
Attention U-Net1080.26890.86990.9098

U-Net++가 세 지표 모두에서 근소하게 앞섰고, 가장 이른 에폭(77)에서 최고점에 도달했습니다. 다만 mIoU 차이는 0.008 이내입니다.

한계

  • 시드 반복이 없어 위 차이가 실행 변동 범위 안인지 확인되지 않았습니다. 구조 간 우열을 주장하기에는 간격이 좁습니다
  • 검증셋 기준이며 별도 테스트셋 평가는 없습니다
  • 예측 마스크 시각화는 노트북 안에만 있고 사이트로 옮기지 않았습니다