<---google adsense---> <---/google adsense---> Sleep AI Challenge SNUH 참여 후기 - First Place(1등) :: noti note
반응형

주최

서울대학교 병원

아워랩(수면의학 분야 의료기기 연구개발 기업)

대회 개요

수면 데이터는 인생의 1/3을 차지하는 주요 라이프 로그 데이터
수면다원검사 결과 이미지를 이용한 수면 단계 분류 모델링에 도전하라

수면 다원 검사란

수면다원검사는 대상자가 수면을 취하며 뇌파, 심전도, 호흡 등의 생체 신호를 측정하는 검사입니다.
수면 기사 또는 수면전문의는 측정된 여러 신호들을 종합적으로 분석해 수면 단계 분류, 이상 호흡 검출, 움직임 및 각성 검출 등을 판독합니다. 이는 수면무호흡증, 기면병, 렘수면 장애 등 수면과 관련된 여러 질환을 진단하는 기반이 됩니다.

문제 정의

수면다원검사 이미지 데이터를 기반으로 각 이미지의 수면 단계(Wake, N1, N2, N3, REM) 분류

포스터

대회 포스터

후기

대회가 끝난 지 약 한 달이 지난 시점에서 후기를 적으려고 하니 벌써 기억이 가물가물한 부분이 있다. 최대한 정리해서 적어보았으니, 후에 비슷한 대회를 하는 분들에게 도움이 되길 바란다.

 

이 대회의 가장 큰 특징은 '폐쇄망에서 딥러닝 모델을 개발'하는 것이었다.

이런 환경에서 개발하는 것은 팀원뿐만 아니라 본인도 태어나서 처음 경험하는 진귀한 경험이었다고 생각한다.

 

주최 측에서 이런 환경을 제공한 이유는 간단하다. 민감정보인 '의료 데이터' 였기 때문에 데이터를 실제로 보거나 다운로드하는 행위를 방지하기 위해서였다.

 

여차저차 이러한 환경에서 개발하면서 발생한 문제점들을 적어보았다.

1. env 셋팅 에러

2. 모델 사전 다운로드 (pretrained models)

3. 데이터를 보지 못함

 

먼저 1번의 경우

우리 팀은 miniconda를 이용하여 환경셋팅을 했고, sleep이라는 새로운 env를 만듦으로써 그 안에 라이브러리를 올려놓았었다. 그러나, gpu가 잡혀있지 않은 불상사가 발생하였다. 아래에 간단히 정리해 보았다.

 

base 환경 gpu 잡혀있음
(주최측에서 기본 환경에는 잡아준 듯 하다)
라이브러리 설치
sleep 환경 gpu 안잡혀있음
cudnn 미설치? 원인은 미상이다.
yaml file을 이용하여 설치했었는데...
라이브러리 미설치

 

이해가 정확히 될지는 모르겠지만 이러한 이유로 base환경에서는 opencv 등의 라이브러리가 없고, sleep환경에서는 gpu가 잡히지 않는 현상이 있었다. 이때 굉장히 고생했던 게 sleep에 올리면서 저장된 temp(conda libarary install file)를 찾아서 일일이 library를 install 하는 노가다 작업을 했다. 이 글을 읽는 독자님들께서는 폐쇄망에서 작업할 때 특히 모든 것을 검토하길 바란다.

 

2번의 경우

우리 팀의 경우 timm에 존재하는 다수의 models weight를 다운로드를 해놓았었다. 그러나, 대회를 진행하던 와중 디스크 용량 문제로 모델을 지워달라는 연락을 받았고 눈물을 머금고? 사용하지 않을 것 같은 모델들을 상당수 삭제했다. 결국 원래의 계획이었던 se-resnet 모델을 앙상블로 사용하려 했던 것을 철회하고 다른 모델을 적용할 수밖에 없었다. (최종 솔루션은 efficientnet b0 ~ b4 앙상블)

 

3번의 경우

분석 직군을 몸담고 계시는 분들이라면 다들 느끼실 감정이라고 생각한다. 데이터를 보지 않고 분석하는 말 그대로 사막에서 눈감고 진주알을 찾아야 하는 격이다. (이 보다는 쉬울 것 같다.) 이거에 대한 팁은 다수의 경험이 필요하다고 생각한다. 논문이나 캐글 등 다양한 사례를 서치하고 준비하는 게 최선 아닐까...

 

솔루션

우리의 전략은 간단했다.

'학습효율을 극대화해서 짧은 대회 기간 동안 다양한 실험을 하자'

이 점이 다른 팀과의 차이점이 아니었을까 생각한다. (다른 팀의 솔루션을 듣지 못했으므로 본인의 뇌피셜인 것을 고려해 주었으면 좋겠다.) 

 

1. 3채널 이미지 -> 1채널 이미지 (score 하락에 비해서 학습시간이 1/3정도로 감소)

2. AMP(Automatic Mixed Precision) 적용 (학습시간이 정확히 얼마나 줄었는지는 기억이 가물가물한데 확실히 줄었던 것으로 기억한다. 마찬가지로 score는 소폭 하락)

3. Dataloader를 10개로 만들어서 각 에폭마다 다른 loader를 학습하게 만들었다. (비슷한 데이터였기 때문에 효과를 볼 수 있었던 방법이지 않았을까 생각한다; 최종 13~15 epochs 까지만 학습, 학습시간을 매우 매우 단축시켜 준 방법)

 

지금 돌아보면 3번의 경우에는 문제가 있었던 방법이다. 경험적으로 1번 데이터셋을 학습한 후 2번 데이터셋을 학습하면 1번 데이터셋에 대한 건 모델이 잊어버리는(정확히는 weight가 소실되는) 경향이 있기 때문이다. 여기서 가능했던 이유는 모든 데이터셋이 비슷한 그림과 사이즈였기 때문이 아닐까 생각한다.

 

 

이 3가지로 12시간? 정도면 모델 하나를 실험하기엔 충분했다.

 

 

'CV Strategy'

이 또한 분석을 하는 사람이라면 중요한 것을 알 것이다. 우리 팀은 user_id와 label을 이용하여 Multi-Stratified KFold를 진행하였다. 직관적으로 score가 상승하였는지는 모르겠지만(label만을 이용한 Stratified KFold와 비교하였을 때) 일반화를 위해서는 이 방법이 더 타당하다고 생각했다. (사람마다의 수면 패턴이 상이하다는 논문을 본 적이 있어서 사람도 라벨의 한 부분으로 파악하였다.)

 

 

'Model'

Efficientnet b0~b4을 사용하였다. (앙상블)

VIT(Vision Transform)도 사용했었는데 결과는 평범했다. epoch을 늘리면 괜찮을 까 싶어서 늘렸더니 overfit이 발생하였다.

디스크 용량상 다른 모델은 삭제하였기 때문에 실험을 많이 하지는 못했다.

 

'Model Architecture'

Kaggle Competition인 'Mechanisms of Action(MoA) Prediction'에서 차용한 아이디어(요즘 트랜드이기도 하다)로써 Meta data와 CNN 이후의 feature extraction된 feature를 concatenate를 진행 후 dense layer를 구축했다.

Meta data의 경우 수면 시간, 수면에 들기 시작한 시간 등의 feature를 user_id마다 만들어준 후 사용하였다.

이를 적용한 뒤 overfit을 상당히 방지할 수 있게 되었다.

 

'Augmentation'

Masking을 사용했다. (신호의 중간중간을 가려줌으로써 overfit을 방지하였다.)

blur, gaussian noise를 사용 (마찬가지로 신호에 noise를 부여함으로써 overfit을 방지하였다.)

 

'Learning Technique'

Image size는 변환하지 않고 그대로 사용했다.

warmup scheduler를 사용하였고 cosine annealing을 기반으로 사용했다.

CE(categorical cross entropy) Label smoothing을 적용했다.

 

 

 

최종 결과

1등

정말 오랜만에 달성한 1등이라서 더 기뻤고 상금도 기뻤다.

 

고생한 팀원들에게 박수를 👏👏

 

 

 

참고

대회 링크

maic.or.kr/competitions/3/infomation

 

MAIC

MAIC Copyright 2020. MAIC All Rights Reserved.

maic.or.kr

 

주최 github

github.com/AI-Challange/Sleep

 

AI-Challange/Sleep

Contribute to AI-Challange/Sleep development by creating an account on GitHub.

github.com

 

solution github

github.com/hyeonho1028/Sleep_AI_Challenge_SNU_2021

 

hyeonho1028/Sleep_AI_Challenge_SNU_2021

Code for 1st place solution in Sleep AI Challenge SNU Hospital - hyeonho1028/Sleep_AI_Challenge_SNU_2021

github.com

관련기사

www.medigatenews.com/news/3074356460

 

반응형

'Competition > 기타 대회' 카테고리의 다른 글

랜드마크 분류 AI 경진대회 참여 후기  (0) 2021.04.21

+ Recent posts