티스토리 뷰

반응형

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/469666

 

성능 개선을 위한 모델을 모색하던 중, 흥미로운 디스커션을 보게 되어 기록하게 되었다.

EfficientNet에서 learning rate와 DATA, AGUMENTATION을 바꿔가며 실험한 데이터를 보게 되었다.

 

 

주요 기술 개선 아이디어 요약

데이터 전처리 및 증강:

  • 스펙트로그램 중간 10초 강조: 전문가들이 주목하는 영역이므로 모델이 집중하도록 유도.
  • 데이터 증강: MixUp, 이미지 반전, 회전 등 다양한 기법 활용.
  • 외계값 및 노이 제거: UMAP 시각화를 통해 외계값 확인 및 제거, 스펙트로그램 및 EEG 데이터의 NaN 값 처리.
  • EEG 스펙트로그램 재생성: NaN 값 채우기, 로그 변환 및 표준화 제거, 데이터 생성 시 적용.
  • 입력 드롭아웃: 3개 채널 모두 단색 이미지 특징 활용, 채널 전체 또는 부분 드롭아웃 실험.

모델 개선:

  • 사용자 정의 손실 함수: 이진 교차 엔트로피 및 쿨백-라이블러 발산도를 모두 고려하는 가중치 손실 함수 사용.
  • 가중치 투표: 투표 수가 많을수록 신뢰도가 높으므로 가중치를 높게 부여하는 기법 사용. (예시 포함)
  • 분산 학습: 멀티 GPU 및 TPU 지원을 위한 맞춤 학습 루프 구현 (fit 메서드 사용 시 골칫거리 해결).
  • 주줄기 변경: 새로운 스템 구축하여 기존 주줄기 일부 교체, (IMG_SIZE,IMG_SIZE,8) 이미지를 3채널로 변환하는 방법 사용.
  • 자동인코더 차원 축소: 8채널 이미지를 3채널 이미지로 변환하는 숨겨진 표현 학습.

다른 기술:

  • 시계열 모델 사용: 시계열 신호인 EEG 데이터에 대해 Transformer Encoder 전이 학습 및 미세 조정 활용.
  • 머신러닝 분류: 머리와 특징 모델 분리 시 랜덤 포레스트, 그래디언트 부스트 모델, 스태킹, 블렌딩 등 활용.
  • 주줄기 가중치 고정: EfficientNetB2 주줄기 대부분 고정, 상위 레이어 특정 레이어만 학습 가능하게 설정.
  • 다른 주줄기 실험: 성능 향상을 위해 다른 주줄기 모델 학습 및 앙상블 활용.

 

결론적으로 말하면 딥러닝으로 Spectrogram 자체를 훈련시키는 게 더 뛰어난 효과라는 뜻이다.

그리고 EEG Spectrogram에서 시계열 모델을 사용하는 게 더 좋다는 것.

그렇기에 유의미한 성능개선을 하려면 EfficientNetB2를 더 알아야 할 것 같다.

 

Features+Head Ensemble Starter for HMS Brain Comp

개요

이 노트북은 Kaggle의 HMS 뇌파 대회를 위한 결합 및 앙상블 시작 노트북입니다. 4가지 모델을 다음과 같은 방법으로 학습할 수 있습니다.

  • Kaggle 스펙트로그램 (CV 0.6365 - LB 0.43)
  • Chris의 EEG 스펙트로그램 (수정된 버전) (CV 0.6336 - LB 0.41)
  • Kaggle 및 EEG 스펙트로그램 모두 (CV 0.5726 - LB 0.39)
  • Chris의 WaveNet (CV 0.6992 - LB 0.41)

앙상블은 LB 0.35를 달성했습니다. 최신 점수를 얻은 @KOLOO의 훌륭한 토론을 여기에서 확인하세요!

사용 데이터 및 코드

  • Chris Deotte's Kaggle 데이터셋: [링크]
  • Chris의 EEG 스펙트로그램 (수정된 버전): [링크]

학습 및 추론 팁

이 노트북은 Kaggle LB에 학습하고 제출(추론)하는 데 모두 사용할 수 있습니다. 학습 시 변수 submission = False를 설정할 수 있으며, TEST_MODE = TRUE를 설정하여 테스트를 위해 전체 데이터셋 대신 500개 샘플을 빠르게 업로드할 수도 있습니다.

특정 모델 유형을 학습하려면 DATA_TYPE = 'both|eeg|kaggle|raw'를 설정합니다. kaggle은 Kaggle 스펙트로그램에서 학습하고, eeg는 EEG 스펙트로그램에서 학습하고, both는 Kaggle과 EEG 스펙트로그램 모두에서 학습하고, raw는 WaveNet을 사용하여 EEG 신호에서 학습합니다.

모델 학습 후 제출하려면 모델을 LOAD_MODELS_FROM 데이터셋에 저장하고 submission = True로 노트북을 실행합니다.

모든 모델을 저장하고 앙상블 준비가 되면 submission = True와 ENSEMBLE = True를 설정하고 미리 지정한 모델 버전과 가중치 앙상블을 위한 LB를 설정합니다.

추가 실험

이 노트북은 가능한 한 일반적으로 만들어져 다양한 실험을 시도할 수 있습니다. 몇 가지 아이디어는 다음과 같습니다.

  • LOAD_BACKBONE_FROM을 사용하여 EfficientNetB(0-7) 변경
  • DataGenerator의 매개변수를 augment = True로 설정하여 데이터 증강
  • 다른 이미지 구성을 입력으로 사용
  • WaveNet 모델 조정

참고

이 노트북은 Chris의 노트북을 기반으로 합니다: [링크]

노트

  • 한글 번역 시 약간의 수정을 가했습니다. (예: 'queckly' -> '빠르게', 'here' -> '링크')
  • 기술 용어는 원문 그대로 유지했습니다.

 

성능개선을 위한 새로운 문제 정의는 이렇다.

 

Spectrogram 자체에 대한 EDA 하기.

EEG Spectrogram에서 Transformer Encoder 전이 학습 및 미세 조정 어떻게 하는지 알아보기.

EfficientNetB2의 파인 튜닝 방법 알아보기.

 

역시 괴수들이 많기에 갈길이 멀다..그러나 동메달만이라도 얻기 위해 힘내자.

반응형