해당 포스팅은 2020년 꿈꾸는아이 Drone Competition에 참가한 내용을 바탕으로 작성했습니다.
1. 꿈꾸는아이 경진대회 소개
꿈꾸는아이는 AI 기술을 활용해 꿈을 꾸고 실현할 수 있는 ‘즐거운 놀이터’를 조성하고, AI 창업을 꿈꾸는 예비창업가의 꿈을 펼칠 수 있도록 도움을 주고자 개최된 경진대회입니다. 과학기술정보통신부, 광주광역시, NIPA 협력 하에 인공지능산업융합사업단이 주관하며, 지스트 인공지능연구소가 수행했습니다. 2020년을 시즌1로 하고 앞으로도 지속적으로 추진할 것으로 예상됩니다.
2020년에는 LG전자, NVIDIA, INTEL, AWS, CJ올리브네트웍스, 한국광기술원이 참여했으며, 헬스케어, 스마트 제품, 드론, 자율주행 등 다양한 분야의 문제를 가지고 경진대회를 실시했습니다. 저희 팀은 INTEL의 NUC와 OpenVINO를 활용한 드론 경진대회에 참여했습니다.
2. 무턱대고 도전!
저희 팀은 KISTI에서 교육받았던 사람들끼리 한 조를 이뤄서 신청하게 되었습니다. KISTI 교육과정에서 데이터셋을 만들어보고, 구현해본 경험을 통해서 드론에 적용할 모델도 만들 수 있을 것이라고 생각했습니다. 하지만, 예선으로 가는 길은 생각보다 험난했습니다. 최초에 제공될 드론과 NUC의 수가 한정되어 있다 보니, 모든 팀을 다 받을 수 없어서 인공지능연구소에서 제공해준 동영상 강의를 기반으로 전화면접이 진행되었습니다. 물론, 저희 팀의 조장이 전화 면접을 진행했습니다(그게 저였다는..). 전화면접은 동영상 강의를 충실하게 들었고, 대략적인 모델을 만드는 방법에 대해서 어느 정도 숙지하고 있었다면 답변하기 쉬웠습니다. 다행히도 저희 팀은 1차 관문이었던 전화면접을 pass 하게 되어 약 20개의 팀 안에 들게 되었습니다.
3. 예선 준비
합격 문자와 함께 드론과 NUC를 수령하기 위해 GIST로 가야 했습니다. 대전에서 광주는 버스로 약 2시간 정도가 소요되어 팀원들과 함께 광주로 향했습니다. 광주 GIST에 도착해서 NUC와 드론을 수령받고 직접 작동해봤습니다. 인공지능연구소 관계자 분들께서 잘 준비해주신 덕분에 충분히 연습해볼 수 있었습니다. 예선 과제는 OpenVINO를 활용해서 드론과 NUC를 연결시킨 뒤 마우스로 드론을 조작해서 이미지가 인식되도록 하는 것이었습니다. 드론 조작보다는 데이터셋 구성이 중요했기 때문에 class에 대한 정보가 주어지기 전까지는 드론 날리는 연습을 했습니다. 예선 대회 1주일 전쯤 총 17개의 클래스 정보를 알려주셨고 저희 팀은 미리 만들어 놓은 이미지 크롤러를 활용해 데이터 셋을 만들기 시작했습니다.
역시나 이미지 정제는 쉽지 않았습니다. 이미 한번 고통을 느껴봤기 때문에 중복 사진은 Visipics라는 프로그램을 활용해서 제거했습니다. 그러나 Windows10에서 백업을 잘해놨는지 3일 동안 수만 장의 이미지를 정제했는데 지웠던 이미지가 다시 생성되는 현상이 발생했습니다. 어쩔 수 없이 데이터들을 클래스별로 완료된 내용은 따로 옮기는 작업을 진행했습니다. 그렇게 아침부터 밤까지 계속 정제를 하다 보니 처음엔 귀여웠던 강아지들도 징글징글해졌습니다. (마치 KISTI에서 음료수 캔 수집했을 땐, 길거리에 음료수 캔만 보였던 것처럼 말이죠.) 아무튼 고뇌의 시간을 지나서 초기 데이터셋을 만들어서 학습해보니 생각보다 많은 데이터가 필요하지 않은 클래스도 있었습니다. 예를 들면, 로고같이 1개밖에 없는 이미지의 경우에는 다른 강아지나 고양이와 같은 라벨과 다르게 쉽게 학습하는 현상을 알게 되었습니다. 무조건 균형적으로 맞추는 것이 답은 아니라고 생각하면서 데이터셋을 만들어서 진행했습니다. 데이터셋 구성 과정에서 주먹, 가위, 보에 대한 이미지가 부족해서 다양한 배경으로 직접 촬영한 이미지도 추가했습니다.
앞에서 모은 데이터 셋으로 저희 팀은 Tensorflow에서 지원하는 Mobilenetv2 모델을 활용해서 모델링했습니다. 클래스 이미지가 imagenet과 비슷하다고 생각해서 pre-trained 모델로 학습을 했습니다. 학습 결과 validation accuracy 95%까지 나오는 것을 확인할 수 있었습니다. 그렇게 학습된 모델을 가지고 예선 대회날이 되어 GIST로 향했습니다.
4. 예선
1) 예행 연습
예선 대회 전날에 대회 현장과 동일한 환경에서 연습해볼 수 있는 기회가 주어졌습니다. Hands-on 했을 때의 이미지가 놓여있었고, 후딱 연습해보고 GIST에서 제공해준 저녁식사를 수령하고 숙소로 이동했습니다. GIST 인공지능연구소에서 참가자들을 위해서 많은 편의를 제공해주셔서 감사했습니다.
예선 일정이 오전부터 시작되기 때문에 타지에서 참석하는 사람들을 위해 GIST 인공지능연구소에서 제공해주셨습니다. 제공해주신 숙소는 굉장히 깔끔해서 편안하게 묵을 수 있었습니다.
2) 오전 경기
예선 아침에 현장에 도착해서 제공받았던 NUC와 드론을 반납하고 열심히 모델링한 파일을 제출했습니다. 예선 방식은 정해진 시간 동안 경기장에 놓인 이미지들을 분류하는 경기였습니다. 순위는 맞춘 이미지 개수로 측정이 되고, 부가적으로 동률일 경우에는 시간을 더 적게 사용한 순으로 정하게 됩니다. 오전의 경기는 전체 팀 중에서 10개의 팀을 뽑기 위한 경기로 진행되었고, 오전의 경기는 오후 경기에 영향은 없었습니다. 그래도 내가 만든 model의 성능을 오전으로 추측할 수 있으니 중요한 경기였습니다.
경기장은 위의 사진에서 보시는 것처럼 총 8개의 이미지가 세팅이 되어 있었습니다. 2팀씩 진행해야 했기 때문에 4개 이미지를 분류하는데 5분씩 주어졌습니다. 특별하게 어려운 이미지는 없다고 생각했으나, 저희 데이터셋에 포함되지 않은 아주 오래된 기차의 정면 사진이 포함되어 있었습니다.
저희 팀의 데이터셋에는 ktx같은 이미지가 많았고, 특히 정면보다는 측면의 사진이 학습이 많이 되어 있었습니다. 저희 팀은 사진을 보자마자 저건 분류하지 못할 것이라고 생각하고 빠르게 포기하고 나머지에 집중하기로 했습니다. 그 결과 8개 중 7개의 이미지를 맞췄고, 5등으로 예선을 통과할 수 있었습니다.
예선 결과는 위의 사진처럼 실시간으로 sorting을 해주셨고, 다양한 팀들이 경기를 펼쳤습니다. 아버지가 아이들과 함께 출전한 팀도 있었는데 굉장히 부러웠습니다. 무사히 오전 예선 경기가 끝나고 GIST에서 제공해준 파*바게트 빵과 샐러드를 맛있게 먹었습니다. 이외에도 물과 다과 등을 준비해주셔서 감사했습니다.
3) 오후 경기
예선 2차 경기는 1차와 동일한 방식으로 진행되었지만 이미지가 많이 변경되었습니다. 또한 1차 예선에서는 4개 이미지 당 5분씩 주어졌지만 2차에서는 시간이 7분으로 줄어들었습니다. 예선 2차에서는 총 10개 팀 중에 4팀을 선정하고 각 팀별로 250만원의 상금이 기본적으로 보장되게 되며 본선에서 올라갈 경우 더 많은 상금이 주어지게 됩니다. 저희 팀은 4등 안에만 들자는 마음으로 경기에 임했고, 무엇보다 조종을 해야 하는 제가 너무 긴장을 해서 걱정이 많았습니다. 저희 차례가 되어 드론을 조종하려고 컴퓨터에 앉으면서 예측해야 하는 이미지들을 스캔했는데, 당황스럽게 하는 한 녀석이 있었습니다.
바로 고양이로 분류해야 하는 슈렉 고양이였습니다. 당연하게도 저희 모델에는 슈렉 고양이는 학습이 되어 있지 않았고, 고양이의 얼굴만 학습시킨 것이 많지 않았기 때문에 안되면 바로 포기하자는 마음으로 컴퓨터에 앉았습니다. 역시나 고양이의 얼굴에 아무리 가까이 가도 90%에 미치지 못해서 빠르게 포기하고 착륙을 했습니다. 결과는 어떻게 되었을까요?
5. 본선행 티켓은?
다행하게도 8개 중에 7개를 맞추면서 2등으로 본선에 올라가게 되었습니다. 사실 어떤 공모전을 나가서 입상해본 경험이 없어서 잘될까라는 걱정이 많았는데 열심히 해준 팀원들 덕에 본선에 올라갈 수 있었습니다.
창피하지만 이렇게 사진도 한 장 찍었답니다(집에 가는 버스 안에서 창 밖이 얼마나 아름다워 보이던지..) 아직 끝나지 않았지만 다 끝난 기분으로 집으로 돌아오게 되었습니다. 본선 1차는 예선에 했던 경기와 동일한 방식으로 새로운 클래스에 대해 학습을 시켜야 했고, 2차, 3차는 드론을 활용해서 창업아이템을 구상하는 것이었습니다. 1주의 정비 시간을 가지고 다시 준비를 시작했습니다.
저희 팀은 몇 등으로 이 대회를 마무리했을까요? 나머지 내용은 다음 포스팅에서 전해드리도록 하겠습니다. 읽어주셔서 감사합니다.