brunch

You can make anything
by writing

C.S.Lewis

by 모두의연구소 Nov 24. 2021

데이터 대회 도전기! (feat. 캐글 대회 노하우)

아이펠 세미나 - 대회에서 좋은 성적 받는 법

안녕하세요. AIFFEL SeSAC 2기 정강민입니다. 아이펠 학교에 입학한 지 엊그제 같은데, 정신 차려보니 기본 교육과정은 거의 끝나가고 해커톤 2가 다가오고 있습니다.


우선, 저는 CV 분야에 관심이 많습니다. NLP 영역도 전망이 좋다고 생각하지만, 한국어가 가진 특성으로 인해 저에게는 어렵게 다가왔습니다. 현우 님처럼 NLP와 CV 모두 섭렵해야 하지만 한정된 교육과정 안에서 CV 분야에 좀 더 관심을 기울이고 있으며, 현재 Open CV 스터디도 운영하고 있습니다.


이전 김현우 님의 추천 시스템 세미나에서 전공이 NLP 분야 인가?라는 착각이 들 정도로 많은 양질의 정보를 제공해 주셨는데, 실제 전공은 CV인 만큼 이미지 대회 관련 노하우를 접할 수 있는 유익한 시간이었습니다. 이미지 대회를 하면서 마주하게 되는 문제점들과 솔루션으로 세미나가 구성되었는데 총 4개의 대회(Understanding Clouds, 의료 데이터 등)를 설명해 주셨습니다. 4개의 대회, 대회당 5가지의 솔루션 정도로 모두 주옥같은 노하우였지만 그중 몇몇 노하우들을 정리해보려고 합니다.


우선, 캐글 대회를 참여하는 이유는?


Kaggle, DACON, AI CONNECT, ZINDI, upstage 등 많은 곳에서 데이터 대회가 열립니다. 기업에서는 많은 양의 데이터를 구할 수 있지만, 개인이 데이터를 구하기는 쉽지 않습니다. 그래서 각종 국내외 대회에 참여하여 데이터 관련 경험을 쌓을 수 있는 것이 첫 번째입니다. 그리고 대회를 진행하면서 데이터 정제 및 실험관리, 협업 관리, 프로젝트 경험 및 실전 테크닉을 얻을 수 있으며 이로 인해 머신러닝 딥러닝 기초를 닦을 수 있다는 점을 들었습니다.


예로 팀원들이 대회에서 어떻게 분석하고, 분석받고, 전달할지 혹은 중복되는 실험을 방지하고 더 효과적으로 스케줄링을 하게 되는 경험들은 실무 데이터 수집 및 협업 상황에서 필요한 요소입니다.

또한 이러한 부분들은 기술면접에도 아주 유리하게 작용하기에 케글 대회에 참가하길 권장하셨습니다.


캐글에서 다루는 부분?! 다루지 않는 부분?!


데이터를 다루는 캐글에서 다루는 부분과 캐글에서 다루지 않는 부분으로 나눠서 설명해주셨는데, 캐글에서 다루지 않는 부분 덕분에 현업과 대회의 괴리가 생겼습니다. 개인적으로 캐글에서 다루지 않는 부분을 잘 알고 있습니다. AIFFEL과정 전에 데이터 전처리 아르바이트를 잠시 한 적이 있었습니다. 가령 예를 들면, X-ray, CT 세그멘테이션과 같은 작업을 하였는데, 작업자의 컨디션, 각자의 기준으로 인해 전처리 결과물이 일정하지 않은 경우가 많았습니다. 검수 과정에서도 사람이 하기에 놓치는 경우가 있습니다. 이런 문제점들이 뒤에 캐글 데이터 문제점의 주요 원인으로 작용하는 것으로 추측됩니다.


그래서 캐글에서는?


우선, 모델링 개발 전체 프로세스에서 세미나에서 집중한 부분은 데이터 분석(EDA)과 인사이트 얻기입니다. 이렇게 수집된 데이터를 바탕으로 대회 종료까지 EDA - 인사이트 - 엔지니어링 - 모델 성능평가 - Dicussion의 무한 루프를 돌면서 SOTA(State-of-the-Art)와 선택한 모델로 점수를 올리면서 대회 당 2~3달을 반복하게 됩니다. 오늘 세미나에서는 EDA부터 Discussion까지 과정 중  데이터 분석 및 인사이트 얻기를 중점이었습니다.


이미지 한국인 헤어 세그멘테이션 (2등 솔루션)


타겟과 제출 형식이 폴리곤 형식으로 구성 이미지로, 영상 데이터 속 객체의 불규칙한 경계를 정교하고 정확하게 라벨링이 관건이고, 학습 이미지 수는 20만 장 , 크기 512x512, 한국인 헤어스타일 이미지 20만 장에 대하여 세그멘테이션을 수행하는 테스크였습니다.


이 대회에서 접할 수 있는 흔한 문제 상황에 대해서 나열해보면 레이블이 없는 혹은 적게 된 유형, 마스킹 영역보다 넓은 이미지, 양갈래의 머리 중 한쪽 누락, 한 사람에 대해 유사한 이미지의 경우로 전처리가 잘못된 경우가 많았다고 합니다. 이런 상황에서 직접 세그멘테이션을 시도한 팀들도 있었다고 합니다. 간혹 동일한 잘못된 자료들이 많아지기도 하는데 당시 대회 전에 한국인 헤어로 GAN대회가 있었는데 그대회에서 생성된 이미지가 아닌가 추측하셨습니다.


데이터 크기의 문제점


GPU에서 512*512는 훈련하기 부담되는 사이즈의 이미지 크기이고 v100 2대로 9:1로 HoldOut 한 상황에서 학습을 완료하는데 24~30시간 정도가 소요됩니다. 결국 많은 실험을 할 수 없었다는 것을 의미합니다.


그래서 리사이즈 학습된 사이즈 이미지가 512인데, 256256으로 실험을 진행하였습니다. 그 후, 256256으로 성공한 사이즈 이미지로 성공하면 다시 512 사이즈 이미지를 적용하는 전략을 취하여, 결국 제한된 시간에 얼마나 효율적으로 훈련을 진행하였는가라는 점이 대회의 핵심 승부 요소였습니다. 최종적으로 19만 장에서 5만 장으로 실험하여 처리속도가 빨라져 8시간 내에 실험 결과가 도출되는 성과를 내었습니다.


TTA + Epoch Ensemble Soution


지금까지 문제점과 솔루션을 들으면서 문득 이 기법들이 정확도에는 얼마나 기여할까?라는 생각이 들었습니다. 당시 대회에서 1등에서 10등까지 정확도 점수대가 0.94x 였고, 소수점 3번째 자리로 경쟁을 한다는 것이었습니다.



그리고 소개된 솔루션중 정확도에 가장 큰 기여를 한 TTA + Epoch Ensemble 기법이었습니다. 이 기법 역시 시간이 문제가 되어 실행한 설루션이었습니다. 학습 및 추론의 규정시간이 있어서 여러 모델을 학습에 어려움이 있었습니다. 그래서 하나의 모델을 학습하면서 얻는 여러 개의 가중치 파일을 이용해서 Epoch Ensemble과 TTA를 함께 적용하는 방법을 적용하였습니다. 특히, TTA의 경우에는 입력 이미지의 변형이 가장 덜한 Horizontal Flip만 사용되었습니다. 대신 가중치를 다르게 해서 원본 이미지에 가중치를 크게 주고 TTA 적용하였습니다.


What is Test Time Augmentation?


TTA는 말 그대로 Inference(Test) 과정에서 Augmentation을 적용한 뒤 예측의 확률을 평균(또는 다른 방법)을 통해 도출하는 기법이었습니다. 모델 학습 간에 다양한 Augmentation을 적용하여 학습하였을 시, Inference 과정에서도 유사한 Augmentation을 적용하여 정확도를 높일 수 있습니다. 또는 이미지에 객체가 너무 작게 위치한 경우 원본 이미지, Crop 이미지를 넣는 등 다양하게 활용이 가능합니다.


많은 솔루션 중 또 신박하다고 생각했던 것들 중 하나는 의료 데이터를 다루는 것이었습니다.


신장에서 Glomerulus 영역을 추출해서 Masking 하는 대회였는데, 의료 데이터에서 병변 부분이 아닌 불필요한 영역이 너무 많다는 점이었습니다. 첫 번째로 그런 불필요한 부분을 제거하기 위해서 crop을 하였는데, 여기에도 좋은 노하우가 있었다. 만약 25x25셀을 규격화해서 Window slice 해버리면 슬라이스에 특정한 병변만 위치하게 됩니다. 하지만 랜덤 하게 slice를 하면 같은 병변이 여러 위치에 놓이게 되는데, 이는 모두 새로운 데이터로 가치를 하게 됩니다.


의료 데이터의 고질적인 문제는 적은 양의 데이터!


의료법등 여러 가지 문제로 의료 데이터는 고질적으로 적은량일 가능성이 큽니다. 기계마다 방사선의 차이에 따라 다름 Contrast Range를 가집니다. 이를 해결해주기 위해서 입력 채널을 여러 종류의 Contrast로 구성여 입력해주면, 그림과 같이  (0,12040)의 이미지와 (0,256)의 이미지는 매우 다른 사진임을 알 수 있습니다.

마지막으로 인상 깊었던 기법 중에 Object Augmentation이었습니다. 재활용 세그멘테이션 경진대회 중에 나온 솔루션이 였는데, 적은 데이터를 늘리기 위해서, 병 이미지만 따로 분리해서 다른 이미지에 붙여서 데이터를 증가시키는 기법이었습니다.


이외에도 TTA , Dense CRF, Data Cleaning, nnunet, TTA 앙상블, 콘트라스 기법, 등등 많았으나 개인적으로 쉽게 도전해볼 만한 것을 중심으로 후기를 작성해보았습니다. 전처리 데이터가 대회의 중심이 된다는 것을 알 수 있었습니다. 대회인 특성상 시간적인 요소를 많이 고려하여 데이터 리사이징, 샘플링 기법 등등을 구사하였고 이런 수많은 기법들이 모여서 정확도를 조금씩 올려 점수를 구성하는 힘든 작업인 것을 알 수 있었습니다.


Q&A

질문) 이런 부분 모두 실험하여 성능에 얼마나 기여하는가?

수치를 얼마나 기여하는지 수지적 기록은 없지만 그중에서 TTA 기법이 많은 기여를 한다. 최종 스코어 0.942였으면 순위권 사람들은 소수 셋째 자리 경쟁을 한다고 한다.


질문) 모델을 대회에서 선택하는 기준은?

SOTA 모델을 실험하는 것은 당연하고, 일반적으로 잘 알려진 모델들을 익혀놓고 상황에 맞게 적용한다.


p.s

전체 과정에서 EDA와 인사이트 부분을 중점으로 살펴보았는데도 쉽지 않은 일인 것을 알 수 있었습니다. 위에 정리한 솔루션 외에도 고난도 솔루션들이 많았으나, 이제 입문인 제 입장에서 도전해볼 만한 내용을 중심으로 몇 개 추려서 정리해보았습니다. 나머지 솔루션들도 막 CV에 입문한 제가 지향해야 할 방향을 알려주는 좋은 세미나였습니다.



Written by AIFFEL SeSAC 2기 정강민


----------------------------------------


✅아이펠 부산-대구-울산 캠퍼스 교육생 그루(Grew)모집 중! (~6/5)

모두의연구소 'AI학교 아이펠(AIFFEL)' https://aiffel.io   



매거진의 이전글 머신러닝 엔지니어로 취업하기 위해서는?
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari