AI+ Vision

2020 인공지능 그랜드 챌린지 참가기

안녕하세요, AI PLUS Tech Blog입니다. 새해부터 기분좋은 소식으로 찾아뵙게 되었습니다. 바로 이스트소프트가 과학기술정보통신부가 주최한 <2020 인공지능 그랜드 챌린지>에서 행동인지 트랙 1위를 하게 되었는데요!

이번 포스팅에서는 AI 챌린지가 낯선 분들도 쉽게 이해하실 수 있도록 해당 대회 소개 뿐만 아니라, 준비과정을 자세히 소개드리려고 합니다. 특히 이번 챌린지에 참가해 문제를 풀어내는 과정이 회사에서 AI 프로젝트를 진행하는 과정과 매우 유사하게 느껴졌는데요! 챌린지 참여와 AI 프로젝트 수행 과정이 어떤 점에서 유사한지에 초점을 맞춰 대회 참가기를 소개하고자 합니다.

1. 인공지능 그랜드 챌린지 소개

먼저 인공지능 그랜드 챌린지는 기존의 연구계획서로 수행기관을 선정하는 전통적인 연구개발 선정방식 대신, 정부가 제시한 도전문제에 연구팀(혹은 개인)이 자율적으로 해결방안을 제시하고, 이에 대한 해결책을 심사하여 우수한 팀에게 후속 R&D를 지원하는 방식입니다. 국내 뿐만 아니라 해외 연구자들도 참여할 수 있고, 상위 팀에게 주어지는 후속 연구비 지원 총액도 120억원에 달하는 국내 최대 규모의 인공지능 대회입니다.

올해는 복합재난상황 이해 및 대응 기술 개발을 목표로 하는 3차 대회와 지역사회 생활문제 대응 기술개발을 목표로 하는 4차 대회가 동시에 개최돼, 주어진 기간 동안 온라인으로 다양한 솔루션을 제출하여 실력을 겨루는 방식으로 진행되었습니다.

2. 대회 준비

2.1 문제 분석

먼저 이스트소프트가 도전한 행동인지 트랙은 ‘응급환자 신속대응 기술 개발’을 목표로, 주어진 동영상 내에서 갑자기 실신하는 사람을 검출하고 해당하는 사람의 위치를 제시하는 문제가 출제되었습니다. 대회 규격에 대한 상세 내용은 <그림1>에 요약되어 있습니다.

<그림1. 행동 인지 트랙 대회 규격 (출처: 인공지능 그랜드 챌린지 사무국[1])>

챌린지 문제를 확인하는 것은 사업부서나 고객사로부터 문제를 의뢰받는 경우와 유사합니다. 실제로 이렇게 문제를 접하면 기술연구소 관점에서 볼 때, 문제 정의가 명확하지 않은 경우가 많은데요. 사업부서와 외부 고객사의 요청인 경우, 문제 정의와 평가 방법에 대한 많은 논의를 거쳐 상세 기능을 정하게 됩니다. 챌린지의 경우, <그림1>과 같이 대회 규격이 어느정도 정해져 있긴 하지만, 해당 규격에 맞는 프로그램을 작성하기 위해 매우 엄밀한 정의가 필요하기 때문에 특정사항이 논의되어야 할 필요가 있는데요. 초기 사업 설명회 이후 참여팀들의 피드백과 질의를 통해 문제 규격이 엄밀하게 정의되고, 이 과정에서 여러 상황을 아우를 평가 데이터 샘플과 그에 대한 라벨, 평가코드가 마지막으로 정해지게 됩니다.

여기서 유의해야 할 점은 인공지능 그랜드 챌린지의 경우, 훈련 데이터가 제공되지 않는다는 점입니다. 해외 유명 챌린지 플랫폼인 ‘캐글(Kaggle)’에서 진행되는 대회는 대부분 훈련 데이터를 제공하기 때문에 캐글에 익숙한 분들은 이런 방식이 조금 낯설수도 있을 것 같은데요. 일반적으로 사업부서나 고객사에서 연구소에 문제를 의뢰할 때도 훈련 데이터를 제공해주지 않는 경우가 대부분이기 때문에 신규 개발 프로젝트와 이번 AI 그랜드 챌린지의 과정이 더욱 유사하게 느껴졌습니다.

AI 모델 개발 과정에서 데이터의 양과 질은 그 모델의 성능을 좌우할 정도로 중요한 역할을 하기 때문에 기업연구소의 경우, 서비스될 환경과 유사한 훈련데이터를 예측하고 수집하는 능력도 핵심역량으로 볼 수 있는데요. 특히 신규 서비스 개발인 경우 데이터 확보에 많은 어려움을 겪기도 합니다. 실제 글로벌 선도 기업이나 학교 연구소에서도 인공지능으로 해결할 문제를 정의하고, 이에 따른 평가방식 고안과 데이터를 마련하는 일들을 많이 진행하고 있는데요. 이러한 점들을 고려했을 때, 이번 챌린지는 작금의 기술로 풀기는 어려우나 사회적으로 유의미한 문제를 선정하고, 참여팀들은 해당 문제를 풀기에 적합한 데이터셋을 마련해 연구를 진행하는 방향성은 여러모로 긍정적인 면이 있다고 생각됩니다. 다만, 이번 대회에서 코드화가 가능한 엄필한 평가 방식과 문제를 충분히 설명할 정도의 평가 데이터 샘플, 라벨 공유가 이루어지지 않았다는 점이 아쉽지만, 이 부분들은 향후 대회에서 개선되리라 기대하고 있습니다.

2.2 전략 도출

위와 같은 문제 분석 후, 공략 방법을 도출했습니다. 이 과정은 챌린지나 회사 프로젝트나 동일한데요. 먼저 개발 기간, 투입 가능 인력, 투입 가능 비용 등 가용 리소스를 산정합니다.

이번 챌린지는 비록 동영상 문제이지만, 여러 정황을 고려하여 일반 이미지 탐지(object detection) 기술을 기본 공략으로 사용하기로 결정했습니다. 그 이유로는 먼저 문제 규격 중 10초 룰(10초간 쓰러짐이 지속되어야 실신으로 인정) 외에는 동영상에 특화된 부분이 없다고 판단하였고, 저희 팀이 이전 AI 아나운서 프로젝트를 통해 동영상을 어느정도 다뤄보기는 했으나, 짧은 시간 내에 대회를 준비해야 하는 상황에서 능숙하게 다룰 수 있는 이미지 탐지 기술을 사용하는 것이 더욱 효과적일 것이라 판단했기 때문입니다.

코드 베이스는 이전부터 이미지 탐지에 사용해왔던 mmdetection 툴을 사용하고, 모델은 VarifocalNet을 사용하였습니다. 멀티 스테이지 디텍터의 정확도가 뛰어나기 때문에 mmdetection을 선택했고, sementation 없이 box만 도출하면 되기 때문에 속도도 빠르고 box detection 정확도가 매우 높은 pre-trained 모델을 제공하는 VarifocalNet을 선택했습니다. VarifocalNet은 <그림2>의 오른편에 보이는 github 저장소에서 ‘box map 51.3’이라는 수치를 보여주는 모델을 사용하였습니다.

<그림2. 코드베이스: mmdetection의 github 저장소[2]와 VarifocalNet 설명[3]>

2.3 학습 이미지 마련

공략법이 도출되면 훈련 데이터를 확보해야 합니다. 이 과정도 챌린지와 회사 프로젝트 모두 동일합니다. 데이터 수집 작업은 해당 연구원이 직접 할 수도 있고, 회사 내 데이터 라벨링팀과 나누어 하거나, 외부 회사에 아웃소싱 형태로 비용을 지불하고 맡길 수도 있습니다. 이번 챌린지에 필요한 쓰러진 사람의 이미지의 경우 대량으로 수집하기도 어렵고, 별도 촬영을 통해 진행하기에는 비용이 부담되었기 때문에 연구소에서 직접 수집하기로 결정했습니다.

먼저 한국정보화진흥원에서 운영하는 AI 통합 플랫폼 ‘AI Hub’에 있는 데이터를 기본으로 사용했습니다. <그림3>과 같이 AI Hub 내 ‘사람동작 영상’, ‘이상행동 CCTV 영상’, ‘공항 이상행동 CCTV 영상’ 등의 동영상 데이터를 활용했습니다. 다만, 이 영상 데이터를 바로 학습에 사용할 수 없었기 때문에 영상 데이터와 함께 제공되는 라벨 파일을 분석하여 ‘쓰러짐’ 부분만 추출하는 라벨링 작업이 추가로 필요했습니다. 이 밖에도, validation 데이터로는 챌린지 주최 측에서 제공한 샘플 데이터와 직접 촬영한 데이터를 사용했습니다.

<그림3. 학습 데이터에 사용할 이미지를 제공받은 AI Hub[4]>

2.4 학습 이미지 라벨링

라벨링 툴은 <그림4>와 같이 ‘labelme’라는 오픈소스 툴을 사용했습니다. 해당 툴을 이용한 라벨링 작업은 회사 내 데이터 라벨링팀에 의뢰하여 데이터의 질을 확보할 수 있었습니다.

<그림4. 이미지 라벨링 툴 labelme의 github 저장소[5]>

2.5 학습 및 초기 모델 결과 검토

학습된 모델의 결과를 보니, ‘기어가는 강아지’나 ‘앉아 있는 사람’도 쓰러졌다고 판단하는 경우가 많았습니다. 이는 학습에 투입한 AI Hub 데이터가 모두 연출된 화면으로 다양한 장면이 없었기 때문에, 학습 때 보지 못한 ‘기어가는 개’나 ‘앉아 있는 사람’이 입력되었을 때 학습된 ‘서 있는 사람’과 ‘쓰러진 사람’ 중 ‘쓰러진 사람’에 더 가깝다고 판단하고 있기 때문이었습니다.

실제 AI 프로젝트를 진행할 때도 모델의 정확도가 낮은 이유가 모델의 아키텍처나 훈련 기법이 고도화되지 않아서라기 보다, 학습 데이터 자체에 문제가 있는 경우가 훨씬 많습니다. 모델 자체나 최적화 등 단위 연구가 아니라 이번 대회나 AI 프로젝트처럼 AI 기술을 종합해서 실제 문제를 풀어야 하는 상황에서는 이와 같은 학습 데이터 분포를 실제 서비스 환경과 맞추려는 노력과 기술이 무엇보다 중요하다고 볼 수 있습니다.

2.6 학습데이터 보강

앞선 문제를 해결하기 위해 2가지 처방을 하였습니다. 첫째, 모델이 다양한 화면을 학습할 수 있도록 <그림5>와 같이 구글 이미지와 유튜브 동영상에서 캡쳐한 이미지를 추가하는 것이었습니다.

<그림5. 쓰러진 사람 이미지 검색>

다음은 사람이 쓰러지기 전 상황도 탐지하도록 하는 것이었습니다. 쓰러지기 전 상황도 별도의 dummy 라벨을 부여하여 학습시키기로 했습니다. <그림6>에서 붉은색 라벨이 실제 대회에서 요구하는 쓰러짐에 대한 라벨이고, 녹색 라벨이 정확도 향상을 위해 추가로 학습시키는 dummy 라벨입니다.

<그림6. labelme를 사용한 라벨링. 쓰러짐 라벨과 쓰러지기 전 동작 모두 라벨링>

또한, <그림6>에서 볼 수 있듯이 학습 속도 향상을 꾀하기 위해 AI Hub에서 다운받은 이미지를 크기를 다양하게 하여 한개의 이미지로 병합해 학습 데이터로 사용하였습니다. 대회 규격은 사각형 박스만 제출하는 것이지만, 정확도를 떨어뜨리지 않는 ‘회전 오그멘테이션(augmentation)’ 등이 가능하도록 폴리곤 라벨링(Polygon Labeling)을 하였습니다.

3. 챌린지 진행

3.1 제출 및 점수 확인

이번 챌린지는 챌린지 기간 솔루션을 여러번 제출하고, 점수판을 통해 점수를 확인할 수 있었습니다. 이 과정은 프로젝트 시, 연구소 내부 테스트를 끝내고 실제 서비스에 모듈을 반영하는 과정에 대응됩니다. 어떤 챌린지는 참가자가 실제 평가 데이터를 받아보고 정답만 작성해서 제출하는 경우도 있고, 이번 그랜드 챌린지처럼 평가 데이터는 볼 수 없고 솔루션 제공 후 최종 메트릭 값만 볼 수 있는 챌린지가 있습니다. 실제 프로젝트 수행 시에도 이번 챌린지 상황과 유사한 면이 있는데요. 서비스 반영 시 개별 데이터를 연구소에서는 직접 볼 수 없고, 메트릭 또는 사용자 피드백만 받는 경우가 있습니다. 외부 고객사에 제품을 납품해야 되는 경우에도 개별 데이터를 쉽게 볼 수 없는 경우가 종종 있습니다.

이번 챌린지는 많은 참여팀들이 초반 평가 플랫폼 환경에서 코드가 정상 동작하지 않아 애를 먹었습니다. 실제 프로젝트에서도 외부 고객사에 납품을 하는 과정에서 개발팀이 직접 접근이 불가능한 서비스 서버에 코드를 배포하는 경우, 이런 문제 상황이 흔히 발생되곤 하는데요. 이 경우는 보통 서비스 오픈 직전이거나 서비스 오픈 직후이기 때문에 운영팀 분들의 피드백과 에러 로그를 전달받아 정상 동작하는 코드로 빠르게 수정해야할 필요가 있습니다.

다시 대회 내용으로 돌아가서, 첫번째 제출에서는 대회 평가 데이터셋이 15fps이었지만, 빠른 결과를 얻기 위해 5fps로 추론하고 나머지 사진들은 이전에 추론한 값과 동일하게 답을 내는 버전을 제출했습니다. 제출 후 점수를 받아 보니 평가 측도인 map값이 0.75 근처가 나왔습니다. 다른 참여팀들과 점수 차이가 많이 났기 때문에 추가적인 알고리즘을 도입하지 않고, 남은 기간 동안 몇 가지 설정만 바꾸어 점수를 올리기로 하였습니다.

3.2 점수 올리기

이후 제출에서는 fps를 7.5로 올리기, iou 값을 기본값인 0.6에서 0.8로 올리기 등의 설정을 바꾸면서 최고 점수가 나오는 솔루션을 찾아 갔습니다. 실제 프로젝트에서도 이런 설정값의 미세 조정을 통해 서비스 퀄리티를 높이는 경우가 많습니다. 서비스를 오픈하고 나면 연구실 환경과 다른 데이터 분포에서 모델이 동작하게 되는데요. 서비스 환경의 데이터 분포를 파악하고 거기에 맞춰 모델을 새로 학습시키는 경우도 있지만, 이번 챌린지 대회처럼 서비스 퀄리티 피드백만 가지고 실제 서비스 환경에 적합한 설정값을 찾아 가는 경우도 있습니다. 이와 같은 설정값 변경만으로, map 0.75에서 map 0.799까지 결과값을 올릴 수 있었습니다.

4. 참가 결과

5번째 제출한 설정값이 map 0.799 값을 기록하며, 이 점수로 대회에서 최종 1위라는 성과를 얻을 수 있었습니다.

<그림7. 대회 최종 결과>

대회 최종 순위 확정 후, 각 트랙별 1위 팀들의 공략법을 공유하는 기술 교류회가 열렸습니다. 기술 교류회 발표 자료, 발표 동영상 등 모든 자료는 해당 링크를 통해 다운로드받을 수 있습니다. 발표 자료 외에도, 소스코드를 도커 형태로 공유하였기 때문에 누구나 손쉽게 저희 솔루션을 테스트해 볼 수 있습니다. 특히 4차 1트랙 참여팀들은 각 팀의 validation set에 대해 저희 솔루션을 사용하여 여러 가지 비교를 해 볼 수 있기 때문에 내년도 챌린지 참가에 도움이 될 것으로 기대됩니다.

5. 참가 소감 및 향후 계획

특히 이번 대회에서 좋은 점수를 받을 수 있었던 이유로는 1)정부에서 AI Hub를 통해 제공하는 풍부한 데이터를 기본 학습데이터로 삼고, 2)기본 학습 데이터에 부족한 부분을 google image와 유튜브 데이터 수집을 통해 보완한 것이 큰 역할을 했다고 생각합니다.

이번 챌린지는 대회 시작 전부터 대회 규격의 명확화를 위해 Q&A 게시판이나 메일 등을 통해 주최 측에 많은 피드백을 제공해야 했고, 대회도 중단되었다 재개되는 등 여러 이슈가 있었습니다. 일단 프로젝트가 시작되면 업무를 발주한 고객사와 솔루션을 개발해야 되는 연구팀이 ‘서비스의 성공적인 오픈’이라는 목표를 향해 함께 달려 가듯, 이번 챌린지에서도 개발팀과 주최 측이 의미 있는 챌린지가 진행되도록 서로 어느 정도 희생하고 어려운 결단을 내렸어야 했습니다. 그 과정에서 많은 분들이 속상한 일을 겪어야 하기도 했는데요. 저희 팀은 다행히 여러 운이 따라 주어 큰 난관 없이 챌린지 진행이 가능했지만, 다음부터는 대회 준비 부분에 더욱 적극적으로 의견을 개진하여 AI 본연의 실력 겨루기에 집중할 수 있는 대회가 되도록 노력해야겠다고 생각했습니다.

앞으로 이스트소프트의 후속 연구와 인공지능 그랜드 챌린지에 많은 관심과 응원 부탁드리며, 새해에는 더욱 유익한 소식으로 찾아 뵙겠습니다. 감사합니다.


※ 참고
[1] http://www.ai-challenge.kr/
[2] https://github.com/open-mmlab/mmdetection
[3] https://github.com/hyz-xmaster/VarifocalNet
[4] https://aihub.or.kr/
[5] https://github.com/wkentaro/labelme

[관련 포스팅 보러가기]
줌인터넷, AI R&D 그랜드 챌린지 참가기
AI 아나운서 개발기

댓글 남기기

이메일은 공개되지 않습니다.