본문 바로가기
모두의 연구소 AIFFEL 교육

대국민 참여형 DNA+드론 챌린지 후기

by robotgo 2021. 9. 30.

대회를 나가게 된 동기

아이펠 팀원들과 드론챌린지(http://challenge-dnadrone.com/)에 나가게 되었다. 팀원 중 큰형님인 다형님이 드론쪽 정보가 빠삭하시다 보니 대회 정보를 접할 수 있었다. 퍼실활동을 하면서 병행할 수 있을 지에 대한 고민도 조금 있었지만, 내가 로봇공학과 학부생일 때 부터 공부하고 싶었던 드론과 지금 공부중인 AI 분야를 접목한 드론 + AI 대회라니 정말 꼭 나가고 싶은 주제의 대회였다. 처음에 이전 대회를 같이 했던 다형님, 이삭님, 영준님 셋이 팀을 꾸려 베이스를 구축해놨고, 나와 수민님은 막바지에 팀원이 되어 5명이서 나가게 되었다.

팀원 소개

심영준 팀장님 : 이번에 우리팀 팀장!! 팀장님이다. 취업 준비를 병행하며 대회 팀장역할도 잘 수행해 주셨다. 아이펠 대전1기 때 같은 조원이였던 인연이 지금까지 이어지고 있다. 이전에 k-digital 해커톤 대회에 같이 나가서 좋은 결과를 얻었고, 이번 대회에선 가상환경 데이터 만들기, 데이터 정제, 딥러닝 모델 학습, 대회 공지 안내, ppt 발표 등 정말 고생하셨다. 밤을 정말 자주 세시고, 안경도 새로 맞춰야하는데 그 시간까지 아껴서 하셨다 ㅠㅠ

전다형님 : 카이스트 석사출신 대한항공 연구원이시고, 쌍둥이 아빠가 최근에 되셨다. 회사일, 쌍둥이 키우기, 와이프 챙기기. 대회 넷 다 신경쓰시느라 너무 대단하시다. 슈퍼맨이 아닐까... 다형님도 아이펠 대전1기 때 같은 조원이였던 인연이 지금까지 이어지고 있다. 이전에 k-digital 해커톤 대회에 같이 나가서 좋은 결과를 얻었고, 이번 대회에선 아이디어 제안, 계획서 제출, 클라우드 환경 관리, 딥러닝 모델 학습, GPU 설정, ppt 자료 제작 등 진두지휘 하셨다. 오늘 AI 프렌즈에서 세미나도 하신다 ㄷㄷ

오수민님 : 수민님은 아이펠 해커톤3 때 같은 팀원이였는데 논문분석을 잘하시고 이론쪽이 강하셔서 같이 팀을 할 때 정말 든든했다. 대회 기간동안 데이터 사이언스분야 해외 대학원  준비를 병행가고 있다. 저번 팀일 때 딥러닝 레벨에서 가장 어렵다고 생각하는 모델 구조 변경 (Reverse separable convolution을 만드셨다! )을 같이 해서 뜻깊은 시간이였다. 이번 대회에서도 논문분석과 딥러닝 모델 이론, 하이퍼 파라미터 변경을 맡으셨다. 

김이삭님 : k-digital 해커톤 대회 전 팀장님이다. 대회 수상의 주인공!! (월클..) 이제 20살이라 대학교 진학을 병행하고 있고, 아이펠 대전1기 때 같은 조원은 아니였지만 옆조여서 자주 놀러왔던(예비12조) 인연이 지금까지 이어지고 있다. 이삭님은 지금도 대단한데 나중엔 페이스북 사장처럼 되지 않을까? 하는 생각이 든다. 이번 대회에선 딥러닝 모델 베이스 구축, 가상환경 데이터 만들기, TensorRT를 맡으셨다.

: k-digital 해커톤 대회에서 수상을 했었고, 대전 아이펠 퍼실활동과 대회 준비를 병행했다. 딥러닝 모델 베이스 구축, 모델 학습, 논문분석, 하이퍼 파라미터 변경을 맡았다.

대회소개

대회 부연 설명을 하자면, 딥러닝 모델성능을 속도와 정확도 둘다 보기 때문에 one-stage-object-detecter 딥러닝 모델이 좋아보였다. 데이터는 4K 이미지라 용량이 엄청 크다. 정확도는 AP(Average Precision)로 측정하고 속도는 ms(micro second)로 Frame per micro second로 측정했다.

우리팀 소개

팀명 : sim2data(simulation to data)
팀원 : 심영준(팀장), 전다형, 김이삭, 오수민, 김상민
아이디어 : Simulation to Data 활용 데이터 생성 및 모델 개발
설명 : Airsim으로 가상환경 데이터를 생성하고 모델 성능을 향상시키자
model : yolov5
model base : pytorch
하드웨어 GPU : 1080tix4 클라우드 서버, RTX2080TIx2 클라우드 서버, TITANx2 클라우드 서버, RTX2070 노트북 4대

1차 (준비)

제안서 작성, 클라우드 서버 설정, 가상환경 데이터 생성 준비, 딥러닝 모델 베이스 구축

  다형님, 영준님, 이삭님이 8월초 부터 대회준비를 해주셨다. 대회기간이 짧다보니 미리미리 준비해야됐다. 구글밋에서 회의를 진행했고, 노션에 자료를 정리해서 공유했다. 다형님은 제안서 작성 클라우드 환경 설정, 영준님은 가상환경 데이터 생성 준비, 이삭님은 딥러닝 모델 베이스 구축을 해주셨다. 그리고 국내 최대 AI 데이터 제공 사이트인 AIhub(https://aihub.or.kr/) 데이터를 다운로드 했다.


  가상환경 데이터는 unrealengine에서 제공하는 Airsim(https://github.com/microsoft/AirSim) 환경에서 생성했다. 요새 가상환경이 많이 발전해서 잘 제작할 경우 현실 데이터와 거의 차이가 나지 않고, 우린 추가적인 데이터 생성 툴로 사용했다. 원하는 배경과 사람의 포즈를 취할 수 있고, bbox를 자동으로 잡아줘서 이미지와 라벨 데이터를 편하게 생성할 수 있다. 준비기간 때 영준님께 생성방법을 간단히 배웠다.

가상환경 데이터


  딥러닝 모델은 Yolov5(https://github.com/ultralytics/yolov5) 모델을 사용했다. one-stage 모델중에 가장 유명한 모델이다. 버젼 5까지 나와서 대단한 것 같다. 아쉽게도 버젼 5에 대한논문은 아직 없다. 하지만 깃허브는 잘돼있다. 이삭님이 모델을 한번 돌려보는 정도까지 세팅을 해주셔서 이어받아 모델을 학습해봤다. 하지만 아직 대회 시작 전이라 어떤 모델이 좋은지 몰라서 Yolo의 라이벌 모델인 SSD도 조사했다. 그냥 SSD는 나온지 오래돼서 SSD의 후속작인 SSD-Lite도 있길래 학습해보려 했지만 생각보다 깃허브가 친절하지 않아 실패했다. 그래서 Yolov5 모델로 진행했다. Yolov5 모델의 특징은 s(small), m(medium), l(large), x(xlarge) 로 모델 사이즈를 선택할 수 있다. 모델 사이즈마다 속도도 다르고 정확도도 다른데 일반적으로 커질수록 속도는 느려지고 정확도는 데이터에따라 조금씩 달라진다. 그리고 yolov5의 라벨링 파일은 txt 형식이다. 그리고 bbox 중앙 좌표계였다. aihub 데이터는 json 형식이여서 json -> txt 형식 변환, bbox 좌상단 -> bbox 중앙 좌표계 변환 코드를 작성해여 변환했다.


  데이터는 마침 AIhub에서 제공하는 데이터에 조난자 수색 데이터(https://aihub.or.kr/aidata/27687) 가 있었는데 대회에서 목표로 하는 데이터와 일치했다. 그래서 일단 이 데이터를 베이스로 사용하기로 했다. 약 800GB로 엄청 큰 용량이여서 외장하드도 필요해서 1TB짜리 한두개 구매했다. 저장용량이 부족할 경우 샘플 데이터(16GB)만 받아서 테스트 했다. 데이터가 너무 크다보니 압축 푸는데도 엄청 오래걸리고 저장용량 문제도 자주 생기고 클라우드 서버에 데이터 올리는 것도 오래걸렸다. 조난자 데이터는 json 형식이였다. 그리고 좌상단 bbox 좌표 중심이였다.

AIhub 조난자 수색 데이터


  클라우드 서버는 1차가 통과되면 대회측에서도 제공해주지만, 준비기간엔 사용할 수 없으니 추가적으로 모두의 연구소에서 지원한 서버도 같이 사용했다. 1080ti 4개, 2080ti 2개, titan 2개 총 3개의 좋은 GPU 클라우드 컴퓨터 서버를 지원받아 요긴하게 잘 사용했다. 다형님이 cuda 설치, gpu 설치, pytorch 설치 등 초기 세팅을 해주셨다. 클라우드 서버는 vscode, filezilla, putty 프로그램을 통해 사용했다.

2차 (예선)

  역시 우리팀은 2차 예선 30팀 안에 들었다. 대회에서 기본 제공하는 딥러닝 모델은 yolov5 모델이고, 기본 제공 데이터는 4K image train : 1465장 5GB, validation 150장 0.4GB, test : 875장  2.7GB였다. 대회 서버에서 실시간으로  AP, 속도를 확인할 수 있었고 다른팀이 제출한 리더보드도 확인 가능했다. 그래서 yolov5 s,m,l,x 중에 어떤 모델을 사용할 지 선택해야 했다. yolov5 github에서 coco dataset 으로 학습한 weight file(.pt)을 모델별로 제공해줘서 이걸로 테스트해보고 성능이 좋은 걸로 학습하기로 했다. 그 결과 다른 모델들은 20~40 AP성능을 보인 반면 yolov5m 모델은 56 AP의 성능을 보였다. 그래서 기본적으로 yolov5m 모델을 사용하기로 했다. 

 

  이후에 조난자 데이터로 딥러닝 학습을 돌렸지만 생각보다 성능이 향상되지 않았다. 그래서 문제점을 분석해보니, 학습할 때 bbox가 정확하지 않았고, 800GB에 중복된 데이터가 너무 많았다. 그리고 데이터 용량이 너무 커서 학습하기에 너무 오래걸렸다.

 

  bbox문제는 json -> txt 변환 과정에서 자료형이 전부 int로 돼있어서 오차가 발생해서 생기는 문제였다. 그래서 float 형식으로 바꿔주고 마지막에만 int를 사용했다.

  중복 데이터 문제는 좋은 데이터만 선별해서 800GB -> 80GB로 줄였다. 데이터 퀄리티가 많이 좋아졌다.

 

  그리고 학습 과정을 시각화 할 수 있는 wandb(https://wandb.ai/site) 이라는 툴을 사용했다. yolov5 github에 소개된 학습 시각화 툴로, 학습이 잘 진행되고 있는지 확인하기 편하고 API로 동작하여 클라우드 서버에서도 잘 작동한다.

 

  최적의 하이퍼파라미터를 찾기위해 wandb에서 제공하는 sweep이라는 기능도 사용해봤다. Grid search, Random search, Bayesian search 로 하이퍼 파라미터를 찾을 수 있었다. 이중에서 Bayesian search를 사용했다. 하지만 object detection 딥러닝 모델 특징이 하이퍼파라미터에 매우 민감하다고 한다. 그래서 그런지 Bayesian search로 나온 하이퍼파라미터를 적용해봐도 학습은 되지만 정확도가 계속 0이였다. 결국 하이퍼파라미터는 튜닝하지 못했다.

SOTA 학습 과정

  SOTA 모델은 yolov5m 모델을 사용하고 coco 학습 weight를 pretrained로 넣고 DNA 데이터와 가상환경 데이터를 학습한 뒤 나온 가중치를 다시 또 pretrain으로 넣고 AI hub 60GB 데이터를 넣고 학습했다. 마지막으로 이전에 학습했던 pretrained weight를 넣고 AI hub 20GB와 SARD data를 넣고 학습했다. 최종 AP 94, 속도 15ms로 2차를 제출했고, 리더보드 순위는 9등, 10등이였다. AP가 98, 99점인 팀들이 많았다. 하지만 대회 채점은 비공개 데이터인 private 데이터로 채점해서 아직 어떻게 될지 모른다.

3차 챌린지

  3차까지 갈지 긴가민가 했지만, 3차까지 통과했다! 상위 10개 팀 안에 든 것이다. 그러나 private data 의 AP가 15로 너무 낮게 나왔다. 다행인건 private data를 공개해줘서 확인할 수 있었다. AP가 안나올법한 어려운 데이터였다. 하지만 우리 팀의 아이디어인 가상환경 데이터를 private data와 유사하게 제작 한 후 dataset에 추가하여 성능을 높이기로 했다. 결국 가상환경 데이터를 활용하여 15 AP -> 20AP 까지 성능을 올릴 수 있었다.

3차 발표평가 (PT)

  발표는 팀장님이 해주셨고, 가상환경 데이터에 대한 질문이 많이 있었다고 한다. 3등안에 들면 좋았겠지만.. 아쉽게도 수상하지 못하였다ㅠㅠ

 

후기

  팀원 모두가 정말 열심히 했는데 수상하지 못하여 아쉬웠다. 저녁 6시에 퍼실활동이 끝나면 자전거 타고 진흥원에 모여서 매일 밤 12시까지 달렸고, 팀장님은 밤새고 아침까지 있는 날이 종종 있었다. 열심히 한만큼 아쉬움이 큰 것 같다. 팀원들과 대용량 데이터에 대한 어려움도 있었고, 하이퍼파라미터도 열심히 튜닝해보려고 다양한 시도를 했는데 잘 되지않아 아쉬웠다. 마지막에 모든데이터를 한번에 다 넣고 학습하는 시도도 해보고 싶었는데 시간이 안돼서 시도하지 못했다. 다른 팀들은 private data AP는 어떻게 나왔을지 궁금했지만 비공개라 알 수 없었다. 

  처음 데이터를 정제해서 AP가 70이 넘었을 때 다같이 환호성을 질렀다. 데이터 정제의 중요성을 알 수 있었고, object detection에 대해 많이 알게된 것 같다. 일정한 고도, 일정한 간격, 일정한 task의 train 이미지를 넣었을 때 성능이 좋았고, 가상환경 데이터는 초기 모델성능을 높일 때 유의미했다. yolov5만 계속 썼는데 다른 모델도 사용해보고 싶다. 대학원과 기업에서 나온 팀들이 많이 있었는데, 그중에 10위 안에 든 것 만으로 잘한 것 같다고 위안을 삼는다.

'모두의 연구소 AIFFEL 교육' 카테고리의 다른 글

AIFFEL 노드에서 이미지 로드가 안될 때 해결법  (0) 2021.05.01
슬로우 페이퍼 CV반 스터디 모집  (0) 2021.04.13
딥러닝과 선형대수  (0) 2021.04.13
DenseNet 요약  (0) 2021.04.12
cutmix  (0) 2021.04.09