꿈꾸는 아이 경진대회 공식 홈페이지: https://dreamai.kr/
KISTI에서 빅데이터 전문가 양성과정을 수강할 때까지는 AI 쪽에 관심이 없었습니다. 원래 공기업을 준비했었기 때문에 월에 나오는 100만원을 취업 준비 생활비로 쓰기 위해 수강했었습니다. 수료하고 10월부터 가짜연구소 스터디에 우연히 참여하게 되면서 딥러닝에 관심이 생기기 시작했습니다.
꿈꾸는 아이 경진대회 같은 경우 이미지 분류기를 기반으로 진행되는 경진대회였기 때문에 초보자인 저도 참여해볼만하다고 생각되어 같이 KISTI 교육을 들었던 교육생 분들과 팀을 꾸렸습니다. 😀
경진대회 문제
드론을 조종하여 카메라로 인식한 사물을 GUI의 정확한 위치에 찍도록 하는 미션입니다. 제공되는 환경은 아래와 같습니다.
- intel사의 NUC AI kit PC
- DJI Trello 드론
- Linux OS, Inetel OpenVINO toolkit, Keras
경진대회 일정
전체적인 일정은 아래와 같았습니다. 코로나 팬데믹 상황 때문에 광주광역시에 집단 감염이 있기도 했어서 아래 일정은 기존 공지된 일정과는 다소 다르게 진행되었습니다.
- 원서 접수 : 10월 16일
- 서류 통과팀 통보 : 10월 23일
- 사전교육(온라인) : 10월 26일 ~ 11월 1일
- 심층 전화면접: 10월 30일 ~ 11월 1일
- 예선 참가팀 통보: 11월 2일
- 드론 날리기 실습 Hands-on (오프라인) : 11월 3일 ~ 11월 6일
- 예선 진행(오프라인), 본선 진출팀 발표 : 11월 20일 ~ 11월 21일
- 본선 준비: 11월 29일 ~ 12월 3일
- 본선 대회(오프라인) : 12월 4일 ~ 12월 5일
온라인 사전 교육 준비 & 전화 면접
사전 교육을 기반으로 10분 정도의 심층면접이 진행됩니다. 인공지능 기초, DL Infrence, Image Classification에 대한 사전 교육이 유투브 영상을 들으며 스터디원 각자가 파트를 나눠서 서로 설명해주는 식으로 스터디를 했습니다. 팀장인 ㅅㅎ님께서 전화면접에 대표로 참여해주셨고 덕분에 면접을 합격하고 약 20개 팀에 선정되어 예선을 준비할 수 있었습니다.
사전 교육 영상 - 오픈비노를 이용한 DL Inference: https://youtu.be/3bUenKiJRBk?list=PLB0ppFIbaAURxxt0eFvTUf70M7W0lVs8h
사전 교육 영상 - Mobilenet 을 이용한 Image classification hand-on: https://youtu.be/GUGEhMVRYYE?list=PLB0ppFIbaAUSD2AIDKPbPVwzM94F0ez1P
예선
예선에 대해 제공된 정보는 공식 홈페이지를 참고하면 많이 나와있습니다. 인식해야하는 대상은 A3 크기의 이미지로 제공됐습니다. 그리고 학습해야하는 데이터셋의 클래스 개수는 총 17개로 대회 직전에 공지가 되고, 이후 실제 예선 경기장에서는 17개 중 8개의 이미지가 랜덤하게 제공됐습니다.
저희 팀은 예선 준비를 위해 이미지 크롤링, 이미지셋 정제, 예외처리 데이터셋 토의, 데이터셋 문제 해결 등의 과정을 거쳤습니다. 이미지 크롤링은 Selenium을 이용해서 다음과 네이버 같은 웹사이트를 대상을 진행했습니다. 데이터셋이 많았기 때문에 ㅅㅎ님께서 크롤링 코드를 짜주시고 ㄱㅇ님과 저는 해당 코드로 데이터 개수를 분배한 후 수집하는 역할을 수행했습니다. 이미지셋 정제 같은 경우 일차적으로는 검색 대상이 아닌 이미지에 대해 제거하는 작업을 수행했습니다. 각 클래스가 천여개가 넘는 이미지에 대해 일차적으로 Detection이 아닌, Classification 과제라는 특성을 고려해 이미지에 다른 대상이 함께 있는 경우도 제거해줬습니다. 제거하는 과정에서 나타난 문제점은 지웠던 파일이 다시 보이거나 제대로 삭제되지 않는 중복 이미지들이 있다는 이슈가 있었습니다. 그래서 Visipics라는 프로그램을 통해 중복된 이미지를 제거하는 작업을 한번더 거쳐줬습니다.
데이터셋 클래스는 모두 동물이라거나, 사람이라거나 일관된 특징이 있지는 않았습니다. 사물, 동물, 텍스트, 신체 일부 이미지 등 다양하게 주어졌습니다. CNN 모델 같은 경우 엣지나 색 등이 학습에 영향력을 미친다고 알려져있기 때문에 여러 종류의 데이터셋에서 어떤 특징을 학습할 수 있도록 할지가 관건이었습니다. 다행이도 텍스트 이미지 같은 경우에는 클래스 불균형이 있었음에도 예측시 정확도가 높았습니다. 그러나 비슷한 생김새를 가진 동물들 예를 들어 뿔 달린 동물들끼리는 구분이 어렵다거나 하는 문제가 있어서 정제해줄 때 사람 눈에도 헷갈리는 이미지는 제거해줬습니다. 특정 이미지 데이터셋 같은 경우 크롤링으로 구하기 어려워 직접 여러 배경에서 사진을 촬영해가며 데이터셋을 구축했습니다. 일관된 배경에서 하다보면 배경을 해당 클래스의 특징으로 학습할 수 있어 여러 배경에서 데이터셋을 구축했습니다.
해당 대회에서는 미니 드론을 사용하기 때문에 일단 모델의 메모리가 크면 안 된다는 제한사항이 있습니다. 그래서 모델링을 통한 성능향상 보다는 데이터셋 정제와 예외처리에 대한 대응전략(?)을 통한 정확도 향상이 더 중요하게 작용할 것이라고 생각했습니다. 그래서 저희 팀 같은 경우 최대한 품질이 좋은 이미지 데이터셋을 만드는 것을 최우선 목표로 두었습니다. 그 결과 Mobilenetv2 모델을 활용해 Transfer learning을 수행했고 그 결과 Validation Accuracy가 95%를 찍을 수 있었습니다.
예선을 진행할 때 딱 타임랩스를 제기 직전 몇분간 어떤 데이터가 필드에 있는지 확인할 수 있었습니다. 저희 팀이 생각한 데이터셋의 예외사항들이 주어진 클래스도 있었습니다. 그래서 드론 조종이 더 중요하고 저희가 데이터셋을 구축할 때 세워둔 규칙과 거리감이 있는 데이터의 경우 포기하는 식으로 진행했습니다. 현장에서 당혹스러운 이미지가 많이 주어졌지만 저희 모델이 생각보다 잘 인식해줬고 1차 예선을 5등, 2차 예선을 2등으로 통과할 수 있었습니다.
참고로, 현장에서 약간의 대회 규칙 수정이 있었는데 미리 이동 스크립트를 짤 수 없다는 점과 인식 개수가 속도보다 더 중요하단 지표라는 점 등 여러 규칙을 함께 참여한 팀들이 모인 자리에서 명확하게 정했습니다.
본선
꿈꾸는 아이 경진대회 본선 진출 관련 홈페이지 설명: https://dreamai.kr/fair_intel
본선까지 준비기간을 일주일 정도 주어졌고 토너먼트 형식으로 진행됐습니다. 1차전, 2차전, 3차전이 있었는데 1차전은 예선과 같은 방식으로 드론으로 이미지 분류를 수행하는 모델에 대한 경쟁이었고, 2차전과 3차전은 창업관련 비즈니스 모델을 구상해오는 아이디어 경진대회 형식으로 진행됐습니다.
본선은 예선과 동일한 시스템이지만, 예선때 느낀 당혹스러웠던 이미지 케이스를 교훈 삼아서 예외처리에 대한 고민을 더 하면서 데이터셋 구축에 힘썼습니다. 예를 들어 버스라는 클래스에 대한 데이터셋을 구축하게 되더라도 노란 버스, 대중교통 버스, 2층 버스 등 다양한 종류로 나뉘는 해당 클래스의 경우들을 같이 고민한 후 데이터셋을 구축해나갔습니다. 그리고 동물과 같은 경우에는 질감을 기준으로 클래스들 간의 구분을 뒀습니다. 같은 뿔 달린 동물인 소나 염소 등과 같은 동물이 물소라는 데이터가 추가되면 염소와 헷갈리게 인식하는 경우가 있었습니다. 이러한 경우 소는 일반적으로 털의 질감이 윤기가 나고, 길이가 짧다는 점을 고려하고 염소는 수염이나, 뿔의 모양이 올곧은 것만 고려하지 않는 등의 노력을 했습니다. 정말 데이터셋을 정제해나가면서 생각보다 세워야하는 규칙들이 많아서 난감했습니다. 동물의 새끼 시절은 사람이 봐도 구분하기 힘든데 어떻게 셋을 구축할지 캐릭터나 캐리커쳐 같은 경우 해당 데이터셋에 추가를 해야하는지 등 여러 요소들을 고려해가면서 데이터셋을 구축했습니다. 모델링 측면에서는 전이학습을 해보기도 하고, 그냥 pre-trained 모델 없이 자체 셋으로만 학습을 해보기도 하면서 두 개의 훈련 방식 결과로 정확도를 비교한 후 소수점 단위로 미미한 경우 실제 드론으로 필드 테스트를 해보면서 최종 모델 파일을 정했습니다.
2차전과 3차전 준비를 할 때는 아이디어 공모전을 참여했던 경험들을 활용해서 진행했습니다. 각자 아이디어를 2개씩 정도 생각해오는 것으로 했고 해당 아이디어에 대해 선정이유, 사례, 관련 기술 개발 사례, 문제점에 대해 토의했습니다. 2차전과 3차전을 준비할 때는 모두가 창업 아이디어를 내는 과정은 처음이라 사업계획서를 작성하는 부분이나 멘토링 피드백이나 발표하는 과정이 낯설기만 했습니다. 그래도 끝까지 해보자..!라는 마음으로 같이 오프라인으로 온 팀원이나 온라인으로 같이 참여한 팀원도 으쌰으쌰하면서 계속해서 틈틈이 아이디어나 계획안을 구체화하려고 노력해갔고 그 끝에 부족하지만 그런 부분이 어필이 되어 우승까지 할 수 있었습니다!
후기
발표를 진행하면서 서로 상대방 팀에게 질문을 주는 식으로도 진행하는 형식으로 진행됐기 때문에 서로 아이디어를 잘 설명하고 제한점을 지적받았을 때 어떻게 대응할지 준비해나간 과정도 힘들었지만 즐거웠습니다. 심사위원으로 인공지능 관련 교수님, 스타트업 CEO 등 정말 창업으로나 기술으로나 전문가 분들이 오셔서 저희 팀 아이디어의 부족한 점들이 드러났습니다. 그 과정에서 위축되기도 했지만 기술에 대해 잘못 이해한 부분과 비즈니스 모델을 고려할 때 추가적으로 고려해야하는 사항들을 배워가는 시간이기도 했습니다.
무엇보다 운영진 분들이 저희 팀이 타지에서 멀리 와서 그런지 여러모로 발표때 긴장할 때도 경기에 참여할 때도 응원을 많이 해주셨고, 대회 진행사항에 대한 질의응답도 정말 밤늦은 시간에도 답변주시는 ... 열정을 보여주신 부분에 정말 감사드립니다. 많은 공모전을 참여해봤지만 참가팀들에게 이만큼 애정을 쏟고 케어해주는 운영진은 처음이었습니다. 처음 진행되는 큰 규모의 경진대회라 운영진 분들도 정말 고생이 많았던 대회였습니다. 다시 한번 압도적.. 감사..!
후기를 작성하면서 지금은 잊혀진 아이디어이고 최종적으로 선정된 아이디어는 아니지만, 본선을 준비하면서 진행한 아이디어 노트를 다시 찾아봤는데 생각보다 많은 고민의 흔적이 있었던 부분이라 일부만 공유해봅니다. 😂