개요
NIPA 에서 주관하는 2020 AI 챌린지 예선전에 참여하며 느낀점과 결과에 대한 내용을 복기하고, 관련된 지식을 학습하기 위해 기록을 남깁니다. 아래는 2020년도에 작성한 글입니다.
훈련소 끝나고 출근한 날, 한 달 전에 제가 작성한 코드를 보며 뇌정지가 왔던 적이 있습니다. 그리고 그로부터 일주일 후, 팀원들과 함께 정보통신 산업 진흥원(NIPA)에서 주최하는 AI Challenge 2020에 참가했습니다. 평일에는 회사 일로 바빠 퇴근 후에도 코딩을 계속해야 하는 상황이었고, 6월 말에는 하루 평균 4시간밖에 잠을 자지 못했습니다.
머신러닝과 딥러닝에 대한 지식은 어느 정도 있었지만, 실제 프로젝트 경험은 많지 않았습니다. 그래서 순위에 들지 못하더라도 최선을 다하자는 마음으로 대회에 임했습니다. 제가 맡은 태스크는 코로나19 관련 폐 사진 데이터 중 양성 사진과 음성 사진을 구분하는 모델을 설계하는 것이었습니다.
처음에는 Matplotlib 라이브러리를 사용해 학습 데이터의 양성 및 음성 비율을 시각화하여 데이터의 분포를 파악했습니다. 그 후, 유명한 이미지 인식 모델인 VGG19와 ResNet50을 사용해 데이터를 학습시켰으나, 정확도가 69%에 불과했습니다.
대회 규정상 pretrained weight을 사용할 수 없었기 때문에, 의료 CT 데이터에 적합한 새로운 모델을 개발하기로 결정했습니다. 해외 논문을 참고하여 Keras 기반으로 모델을 설계하고 학습시킨 결과, 단일 모델로는 74%의 정확도를 달성했습니다.
하지만 단일 모델로는 정확도를 더욱 향상시키기 어려웠습니다. 데이터가 부족하고 오버피팅 문제를 해결해야 했기 때문입니다. 이를 해결하기 위해 데이터를 여러 개로 분할하고, 모델 앙상블 기법인 배깅(Bagging with Soft Voting with Sigmoid) 기법을 사용했습니다. 이 방법으로 정확도를 80%까지 올릴 수 있었습니다.
얻은 교훈
이번 경험을 통해 몇 가지 중요한 교훈을 얻었습니다.
첫째, 적은 데이터에서의 데이터 증강(Data Augmentation)은 유용하지만 극적인 효과를 기대하기 어렵다는 것을 알게 되었습니다.
둘째, VGG19, YOLO V3, ResNet50과 같은 유명한 모델들은 ImageNet으로 학습된 Pretrained Weight 없이는 특수한 상황에서 좋은 성능을 내지 못합니다.
셋째, 모델 앙상블, 특히 모델 부스팅 기법(XGBoost, LightGBM, AdaBoost)은 정확도를 향상시킬 수 있지만 오버피팅의 위험이 있으며, 속도가 느립니다.
넷째, 이미지 인풋 사이즈에 대한 이해가 중요하며, 다양한 사이즈로 리사이징 후 학습하여 최적의 결과를 도출해야 합니다.
느낀점
대회에서 순위에 들지는 못했지만, 이번 경험을 통해 많은 것을 배울 수 있었고, 시험기간에도 불구하고 열심히 참여해준 팀원들에게 감사의 마음을 전합니다.