Trouble Shooting 2 : Class Imbalance (1)

조훈·2025년 6월 17일

1. 문제 상황

  • Dataset_3까지의 mAP50 값은 0.66
  • Dataset_4를 학습하니 mAP가 0.3대로 떨어짐

2. 문제 발생 조건 파악

  • 이전 모델 Overfitting
    • Dataset 1~3과 Dataset 4가 도메인이 다를 경우 (ex. 실내 ↔ 실외, 주간 ↔ 야간)
    • freeze=8로 backbone을 고정했기 때문에 새로운 특징 학습 불가

  • 학습률(LR) 문제
    • 이전 학습 상태에서 이어받았지만 Dataset 4 특성에 맞지 않아 학습이 제대로 되지 않음
    • 모델이 이미 특정 방향으로 수렴한 상태라 더 이상 변화가 어려움


3. 해결 방안

  • Dataset 4만 따로 시각화하여 클래스 분포, 이미지 품질, 애노테이션 정확도 점검
  • freeze=4 또는 freeze=0으로 완화 → backbone까지 업데이트할 수 있게 설정 변경

  • 학습률 재설정 (높이거나 낮춰보기) or -resume 없이 새로 초기화하여 best.pt만 load해서 학습 시작 (모델 가중치는 유지하되, optimizer 상태는 초기화)

  • val dataset 이미지들을 확인해보고 도메인 일치 여부 확인

4. 결과 분석

1. freeze=4 또는 freeze=0으로 완화 → backbone까지 업데이트할 수 있게 설정 변경

  • freeze = 8 → 4로 조정 시 mAP = 약 0.42
  • freeze = 0으로 조정 시 mAP = 약 0.4

결론 : Dataset 1~3과 Dataset 4는 데이터 수집 환경이 다름

  1. 장소 : Dataset 1 ~ 3 = 병원(기타) ↔ Dataset 4 = 병원(대형)
  2. 시간 : Dataset 1 ~ 3 = 15시 경 ↔ Dataset 4 = 11시 경
  3. 조명 : Dataset 1 ~ 3 = 어두움 ↔ Dataset 4 = 밝음
    → 데이터 특성이 다름에도 Back-bone을 Freeze하고 학습했기 때문에 mAP하락

2. 데이터 리샘플링(Under / Over Sampling) : 소수 클래스 이미지 비율을 의도적으로 늘리거나, 다수 클래스 일부를 제거하여 균형을 맞춤

  • Albumentations 패키지를 활용해 데이터 증강을 통한 OverSampling
    • 특정 Class의 id가 포함된 이미지를 Flip, Rotate 등을 적용시켜 데이터 증강
      → 그에 따라 매칭되는 txt 파일도 생성
    • 소수 Class의 부족한 데이터량을 매꿈

결론 : 하나의 이미지에 하나의 Class만 있는 것이 아니기 때문에 데이터 증강 시 소수 Class뿐 아니라 같이 인식 된 다수 Class의 데이터도 증강 됨

→ 데이터 불균형 해소 X

0개의 댓글