<---google adsense---> <---/google adsense---> 'Competition' 카테고리의 글 목록 :: noti note
반응형

주최

데이콘, 크라우드웍스, 피씨엔

대회 개요

  • 국내 인공지능 기반 Large-Scale 이미지 분류 알고리즘 개발 저변 확대 모색
  • 고성능 딥러닝 알고리즘의 확보를 통한 개발기간의 단축과 개발비용 감소
  • 불균형 데이터셋을 해결하기 위한 집단지성 활용

개발 목표

대용량 이미지에서 랜드마크 이미지를 분류하는 인공지능 알고리즘 개발

분야

컴퓨터 비전 | 이미지 분류 | GAP

링크

dacon.io/competitions/official/235585/overview/prize#prize-info

 

랜드마크 분류 AI 경진대회

출처 : DACON - Data Science Competition

dacon.io

 

후기

이 대회는 정말 무지막지한 리소스가 필요했던 것으로 기억이 난다. 당시에 2080ti라는 좋은 리소스를 가지고 있었음에도 불구하고 2~3일을 학습해야만 어느정도 결과를 볼 수 있었었다.(물론 대회하면서 회사 업무를 병행하는 것이 쉽지도 않았다.)

 

랜드마크 분류대회는 Computer Vision분야에 몸을 담고 있거나, Kaggle을 좀 해보신 분이라면 다들 알고 계실거라 생각한다. Kaggle에서 매년 진행하는 대회이기 때문이기도 하고 크고 많은 이미지를 학습해야 할 때 참고할만한 code와 discussion이 많기 때문이다.

 

이 대회를 참가했던 이유는 간단하다.

1. 2080ti 구매

2. 늘 kaggle landmark clf 대회 참가하고 싶었다.

3. 데이콘대회에 캐글 수상자 솔루션을 적용 시킨다면 어떨까? 라는 생각이 들었다.

 

위 2가지 이유 때문인데 사실 2번이 1번에 종속되어 있다. 로컬gpu가 없었기 때문에 2번을 하지 못했었다. 물론 코랩을 사용해서 할 수도 있긴 하겠지만, 코랩 프로를 써본 사람으로써 중간에 자꾸 끊기는 것도 짜증이 났었고 24시간 제한 시간도 불편했었다.(그럼에도 불구하고 코랩을 이용해서 딥러닝 하시는 분들은 리스펙합니다)

 

이 대회를 처음으로 pytorch-lighting을 사용해봤는데, multi-gpu를 사용하시는 분들에게 유용할 것 같다는 생각이 들었는데 gpu할당이 쉬웠기 때문이다. 나중에 2개 이상의 gpu를 사용하시는 분들이라면 pytorch-lighting을 추천한다.

 

참고로 데이콘의 랜드마크 대회와 캐글의 랜드마크 대회는 성격이 꽤 다르므로 참고하길 바란다.(캐글의 경우 라벨이 없는 데이터도 있었기 때문에, 이를 극복하려는 trial and error가 많이 있었던 것으로 안다. 나의 경우에는 이러한 부분을 제거하고 모델 아키텍처, 학습/검정 방법, 앙상블 기법 등을 많이 사용했다.

 

솔루션

늘 그렇듯이 베이스라인 모델을 먼저 구축하고 다양한 실험을 하는 것으로 목표를 세웠다.

 

단, 이번에는 캐글 솔루션을 이해해야 했기 때문에 이 부분에서 상당한 시간이 소요되었다. 대회를 참가했었도 아니여서 대회 자체에 대한 이해도도 낮았었고 이는 늘 "why?"라는 의문부호가 따라다녔다.

 

 

데이터가 매우 많았고 large image 특성 상 256x256으로 resize을 한 뒤 학습을 하여도 gradient exploding현상이 발생하였다. 이 현상에 대한 원인을 정확히 진단을 하진 못하였지만 조사해본 결과 high lr, large scale image 등이 있었다. 최대한 방지하기 위해서 batch size와 start lr을 컨트롤 했었다.

 

 

 

 

'CV Strategy'

Multi-Stratified KFold를 이용하여 각 랜드마크 클래스당 추출하여 진행했다. 

아쉬운 점은 5fold를 하지 못한점이다.(학습이 느렸기 때문에)

 

 

'Model'

Efficientnet b1~b3를 사용하였다. (앙상블)

 

 

'Model Architecture'

차후에 마저 작성

 

 

'Augmentation'

이 대회의 핵심은 이미지 사이즈였다. 후에 상위권에 들은 팀에게 들은 이야기인데 이미지 사이즈를 크게 해서 학습을 한 후 낮은 lr로 깊은 학습을 진행했다고 했다. 점수차이가 오밀조밀했기 때문에 이러한 테크닉이 유효했던 것 같다.

 

 

'Learning Technique'

차후에 마저 작성

 

 

'Ensemble'

simple average ensemble을 하였다.(b1~b3)

 

최종 결과

8/436

결과는 생각보다 아쉬웠지만 그래도 만족한다.

내가 가진 리소스를 최대한 활용했다고 생각하기 때문에...

 

 

참고

solution github

github.com/hyeonho1028/landmark-classification

 

hyeonho1028/landmark-classification

랜드마크 분류 AI경진대회에서 캐글 1~3등 솔루션을 적용했습니다. Contribute to hyeonho1028/landmark-classification development by creating an account on GitHub.

github.com

kaggle solution

https://www.kaggle.com/c/landmark-recognition-2020/discussion/187821
https://www.kaggle.com/c/landmark-recognition-2020/discussion/190983

 

Google Landmark Recognition 2020

Label famous (and not-so-famous) landmarks in images

www.kaggle.com

 

Google Landmark Recognition 2020

Label famous (and not-so-famous) landmarks in images

www.kaggle.com

 

반응형
반응형

주최

서울대학교 병원

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

대회 개요

수면 데이터는 인생의 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
반응형

 

 

 

www.kaggle.com/c/instant-gratification

반응형
반응형

 

 

 

 

 

www.kaggle.com/c/liverpool-ion-switching

반응형
반응형

 

 

 

www.kaggle.com/c/understanding_cloud_organization

반응형
반응형

 

 

www.kaggle.com/c/bengaliai-cv19

반응형
반응형

 

 

 

 

 

 

 

www.kaggle.com/c/deepfake-detection-challenge

반응형
반응형

 

 

 

 

www.kaggle.com/c/santander-customer-transaction-prediction

반응형

+ Recent posts