관리 메뉴

TEAM EDA

NIPA 2020 인공지능 문제해결 경진대회, 4관왕 달성 후기 본문

TEAM EDA /EDA 3기 (2020.04.01 ~ 2021.12.31)

NIPA 2020 인공지능 문제해결 경진대회, 4관왕 달성 후기

김현우 2020. 12. 30. 02:07

NIPA 2020 인공지능 문제해결 경진대회, 4관왕 달성 후기


이번 포스팅에서는 해달이라는 팀으로 2명의 팀원과 함께 나간 인공지능 문제 해결 대회의 후기를 작성하겠습니다.


저희 팀은 카이스트 산업 및 시스템공학과인 저와 고려대학교 통계학과 대학원에 다니는 2명 팀을 이루어 대회에 참여했습니다. 이번 경진대회는 기존의 경진대회와는 다르게 예선을 통해서 상위 150팀을 선정하고 150팀이 2주 동안 최대 5개의 대회에 참여하는 형식이었습니다.

예선


예선의 경우 7일이라는 짧은 기간동안 대회가 진행되었습니다. 주어진 데이터는 식물에 대한 병충해의 데이터였습니다. 식물의 이미지에 맞게 질병이 없는지부터 각종 질병 중 어느 질병에 속하는지를 총 2가지 카테고리를 예측하는 대회인데, 14개의 식물의 종류와 20개의 병충해의 종류가 있지만, 최종적으로 둘의 카테고리를 조합해서 분류해야 하는 클래스는 20가지였습니다.


저희 팀의 경우 2019년도에 진행되었던 Plant Pathology 2020 - FGVC7의 솔루션을 참고하여 코드를 만들었습니다. 먼저 데이터의 전처리 부분입니다. 데이터의 전처리를 위해 아래의 4가지 Augmentation을 적용했습니다.

  • Horizontal flip
  • Vertical flip
  • Horizontal flip + Vertical flip
  • Grid Mask


flip Augmentation을 적용해준 이유는 이후의 TTA와 같이 활용할 목적과 주어진 데이터의 잎 모양이 왼쪽으로 향한 것과 오른쪽으로 향한 모습이 같이 있기 때문이었습니다. 참고로 Grid Mask와 cutout 방식의 Augmentation을 사용했는데 최근 캐글에서 성능도 잘 나오는 방법이고 잎 일부분을 가리고 학습을 수행할 경우 모델의 일반성이 더 강해질 것으로 판단했습니다.


이후, 모델의 경우 캐글 Competition에서 가장 성능이 좋은 EfficientNet을 사용했습니다. EfficientNet에서 B0~B7 중에서 성능이 괜찮은 EfficientNet-B2를 이용해서 예측을 진행했습니다.


참고로 식물의 질병에 대한 클래스의 비율이 같아서 검증방법에 대한 신경은 별로 안 썼고, 검증 데이터셋의 클래스 비율을 학습 데이터셋과 같게 만들기 위해서 Stratified Kfold 방식을 사용해서 적용했습니다. 이렇게 해서 만든 5개 Fold에 관한 결과를 앙상블 해서 모델을 생성했습니다.


하지만 위의 과정만으로는 충분히 순위권에 들기 어려웠고 마지막으로 TTA (Test Time Augmentation)이라는 기법을 적용해서 4개의 이미지에 대해 예측한 결과를 평균 내어서 제출에 사용했습니다.


다행히도 위의 기본적인 과정만으로도 150팀 안에 들 수 있었고 본선에 참여할 수 있게 되었습니다.

본선

저희 팀이 참여한 대회는 4개의 대회였습니다.

  • 한국임업진흥원 - 항공사진을 활용한 AI 임상판독 (2위)
  • KB캐피탈 - KB차차차 중고차 매물 판매기간 예측 모델 개발 (1위)
  • 페이레터 - 모바일 결제환경에서의 이상거래 탐지 (2위)
  • 한국타이어앤테크놀로지 - 독일 지역의 Winter 타이어 수요 예측 (2위)

대회를 선택한 기준은 수상 시에 나에게 충분한 스펙이 되는가? 짧은 시간 내에 수상권에 들 수 있는가? 다른 사람들이 얼마나 참여하는가? 3가지이었습니다. 아무래도 150명이 20개의 대회에 분산해서 참여하는 구조이다 보니 다른 대회 대비 경쟁이 약하고 대학원생들에게는 상금과 스펙이 중요해서 배우기보다는 수상을 목적으로 진행했습니다. 본선의 경우 수상한 코드 및 모델에 대해서는 계약을 했기에 자세한 내용은 설명해 드리지 못하는 점 양해 부탁합니다.

한국임업진흥원 - 항공사진을 활용한 AI 임상판독


항공사진을 활용한 AI 임상판독대회는 항공사진으로 찍은 이미지가 7개의 산림종 클래스를 가지고 이를 Segmentation 하는 대회였습니다. 해당 대회를 참여한 이유는 경쟁자가 없었던 것도 있지만, 대학원에서 현재 연구하는 분야가 Semantic Segmentation여서 입니다. 연구실에서 혼자 Semantic Segmentation 분야를 연구해서 코드나 방법에 대한 이해를 제대로 했는지 항상 고민이 많았습니다. 이번 대회를 기반으로 연구 분야에 대한 자신감을 얻기 위해 참여했습니다.


대회의 평가 함수로는 대회 설명에는 mAP@IoU라고 나와 있지만 실제로는 Pixel Accuracy 였습니다. 해당 대회를 수행하면서 가장 힘들었던 점은 학습데이터의 부족과 메모리의 문제였습니다. 해당 대회에서 주어진 학습 이미지는 1장이고 평가 이미지는 200종이 넘었습니다. 그리고 모델의 입력값과 출력값을 512 x 512로 고정했는데 아직도 왜 이런 식으로 구성을 했는지에 대해서는 의문이 있습니다. 이미지가 한장이기에 베이스라인의 코드에서는 512 x 512의 이미지를 8750 x 7680 정도까지 키우고 Sliding Window 형식으로 이동해가면서 512 x 512로 조각내는 방법을 사용했습니다. (마치 Unet 논문에서 조직에 대한 사진을 조각내서 사용하는 것과 같은 방법이었습니다) 베이스라인은 Window가 겹치지 않도록 구성했고 추가로 겹치도록 하는 방법도 실험해봤지만 조각낸 이미지 간의 유사도가 너무 높아서 성능은 오히려 하락했습니다. 이러한 문제를 해결하기 위해 적용했던 방법은 Augmentation이었습니다. 기본적으로 상하반전, 좌우 반전, 회전등의 Augmentation부터 다른 방법들도 적용해봤지만, 성능은 떨어졌습니다. 사실 위의 방법에 대해서 성능을 평가는 리더보드의 점수를 기준으로 판단했습니다. 아무래도 한장의 이미지로 검증하는 것은 말이 안 되는 것 같고 최종 평가가 다른 대회들과는 다르게 리더보드 점수 * 0.5 + 숨겨진 데이터에 대한 점수 * 0.5으로 구성되었기 때문입니다.


두 번째로 어려운 점은 메모리였습니다. V100을 처음 사용해봤는데 돌릴 때 마다 메모리가 터지는 문제가 발생했고 서버 문제인지 메모리가 터지면 설치한 토치까지 지워지는 문제가 발생했습니다. pip을 이용해서 토치 설치하는데 10분이나 걸려서 답답해 죽는 줄 알았습니다. 추후에 해당 문제를 주최 측에서 해결해주었지만, 해당 방법으로 설치된 토치는 1.6 버전이었습니다. 저희 팀은 기존에 토치 1.4로 학습을 했는데 1.6과 비교해서 성능이 0.1 ~ 0.2 가까이 차이가 나는 이슈가 있었습니다. 아무래도 torchvision.models에 저장된 네트워크의 구조나 가중치 문제 인 것 같은데 되게 신기한 경험이었습니다. 아무튼, 메모리 이슈를 방지하기 위해 amp를 도입하려고 했지만, 해당 방법은 설치가 안 되어서 사용하지는 못했고 학습 및 예측 시에 결과물을 중간중간 떨구고 불필요한 부분은 계속 삭제해주는 형식으로 진행했습니다. 해당 방법 해결하면서 Pytorch out of memory 오류의 글이 많은 도움이 되었습니다.


마지막으로 어려운 점은 아니지만 시도했던 방법 중에 잘 안된 점은 TTA와 Test Resize였습니다. 예선에서도 먹혔고 대부분의 딥러닝 대회에서는 TTA 방식을 많이 사용하는데 학습 단계에서부터 Augmentation이 잘 안 먹혀서 그런지 TTA를 적용했을 때에도 성능이 안 좋았습니다. 메모리의 문제 때문에 TTA를 적용하기도 쉽지 않았습니다. 그리고 학습 데이터의 경우 원본 이미지 512 x 512를 키우는 구조라 평가 이미지와 해상도가 많이 다를 거라 생각했습니다. 그래서 평가 이미지도 8750 x 7680로 키운 후에 512 x 512로 Crop 해서 예측하고 결과를 합쳐주는 방법을 적용해봤는데 초반에 베이스라인이었던 FC ResNet에서는 성능 향상이 있었지만, 최종적으로 사용한 모델에서는 성능이 나빠졌습니다.


최종적으로 저희 팀은 0.611의 점수로 2등을 하였습니다. 마지막의 Final Score와 비교해서는 0.14로 많이 감소했는데 아무래도 학습 이미지가 1장이다 보니 많이 오버피팅 되었던 것 같습니다. 실제 1, 2, 3등 중에서 저희 팀이 가장 하락 폭이 컸습니다. 하지만 다들 비슷하게 0.13 가까이 떨어진거 봐서는 숨겨진 평가용 셋도 어느 정도 기존의 데이터와는 많이 달랐던 것 같습니다.



개인적으로 대학원에서 Semantic Segmentation을 연구하는데 해당 기법을 사용하는 대회에서 수상해서 가장 뿌듯한 대회였습니다. 비록 메모리 문제가 있고 학습 이미지가 한 장밖에 안되는 상황이어서 많은 실험은 못 했지만, 반도체 데이터가 아닌 데이터에 Segmentation을 해봐서 재밌었습니다. 그리고, 해당 대회 진행하면서 권순환님에게 도움 많이 받았는데 이 글을 통해서 감사인사드립니다.

KB캐피탈 - KB차차차 중고차 매물 판매기간 예측 모델 개발


중고차 판매 기간 예측 대회는 중고차 판매 기간을 예측함으로써 고객들에게 투명한 중고차 거래를 제시하기 위한 대회였습니다. 기본적으로 제공되는 모든 변수가 비식별화되었기에 파생변수를 만드는 과정에서 어려움이 있었고 30개 정도 되는 변수들이 모두 one-hot encoding된 Categorical 데이터로 값이 0 아니면 1만 가지는 형태였습니다. 개인적으로 대회를 참여하면서 이 부분이 가장 아쉬웠는데 변수의 의미를 제공해주면 더 좋은 모델링을 하지 않았을까 생각이 듭니다. 참고로 해당 대회는 규정으로 학습 데이터셋과 평가 데이터셋을 함께 사용하는 전처리나 평가 데이터셋을 이용해서 파생변수를 만드는 행위를 엄격하게 제한하였습니다. 개인적으로는 이 부분이 이해가 안 갔던 게 다른 대회 같은 경우에는 평가 데이터셋이 미래의 시점의 데이터를 의미했지만, 해당 대회는 같은 시점의 데이터 같았는데 굳이 이런 규정이 있을 필요가 있었나 생각이 듭니다.


변수의 의미가 모두 숨겨져 있어서 변수의 의미는 모두 모른다는 가정에서 의미를 탐색하려고 접근하였습니다. 먼저 중고차판매에서 어떤 특성이 중요한지를 알아보기 위해 KB 차차차의 홈페이지에 들어가서 어떤 정보들을 사용하는지 알아봤습니다.



이러한 정보와 기사 자료, 다른 웹사이트의 글을 보면서 정보들을 수집했고 이를 바탕으로 데이터 탐색을 진행해서 차의 연식, 주행거리 등과 같은 주요한 변수들을 파악할 수 있었습니다.


제일 처음으로 사용했던 방법은 생존분석이었습니다. 통계학과 대학원에서 연구하려고 하는 게 딥러닝과 생존분석을 결합한 연구였고 중고차의 판매 기간이라는 특성상 해당 대회에 잘 맞을 거라 생각했습니다. 하지만 중도에 절단된 데이터가 존재하는 상황이 아니었기 때문에 일반적인 생존분석(Cox-PH model)보다 단순 선형회귀 모델이 더 우수하였습니다. 추가적으로 survival tree model, deepsurv와 같은 모델들도 시험으로 사용해보았지만 좋은 성능을 내진 못 하였습니다. (참고로 이때 평가 메트릭이 사전설명서에는 주어졌지만, 홈페이지에는 작성이 안 되어있어서 성능을 평가하는 데에만 일주일 정도의 시간을 낭비했습니다. ㅠㅠ)


선형회귀 모델의 성능이 잘 나오는 것을 파악하고 난 뒤에 접근했던 방법은 부스팅 계열의 모델이었습니다. 기본적으로 캐글, 데이콘에서 최근 정형 데이터의 솔루션이 모두 부스팅 모델이었고 실제로도 가장 성능이 높았습니다. 하지만 해당 방법만으로는 3등 안에 점수가 들기 어려웠는데 그 이유는 타겟과 예측값의 분포가 많이 달라지는 문제가 있었기 때문입니다. 이러한 문제를 해결하기 위해서 모델의 하이퍼파라미터를 조정하든지 후처리 방법을 도입한다든지 여러 가지 시도를 했고 결과적으로 2등의 점수까지 오른 매직이었습니다.


그 이후에는 추가적인 성능을 올리기 위해서 변수 선택기법이라든지 one-hot encoding 된 변수들을 다양하게 처리해보는 실험을 진행했습니다. 마지막으로는 부스팅 계열의 모델들을 다른 모델들과 앙상블 하여 최대한 안정적인 모델이 되도록 만들었습니다.


대회를 진행하면서 많은 시도를 했는데, 단순 KFold가 아니라 폴드마다 분포가 같게 한다든지 판매 소요기간의 분포를 고려한 검증 방법을 많이 시도해봤습니다. 아쉬운 점으로는 역시 시간상의 문제로 다양한 데이터 탐색을 진행해보지 못했고 변수의 의미를 알 수가 없어서 파생변수를 다양하게 만들어보지 못한 점입니다. 그래도 Public_score는 31.4091로 3등과는 압도적인 차이로 1등과는 조금의 차이로 2등을 달성했습니다.


2등으로 마감할 줄 알았는데 운이 좋게도 final_score에서 소수점 차이로 1등을 할 수 있었습니다. 이런 걸 보면 운칠기삼이라는 표현이 참 적절한 것 같습니다.



2등밖에 없어서 친구들과 홍진호 되었다고 계속 그랬는데, 다행히도 1등 하나라도 만들어준 좋은 대회여서 제일 수상하고 기뻤습니다.

페이레터 - 모바일 결제환경에서의 이상거래 탐지


모바일 결제환경에서의 이상거래 탐지대회는 고객에 대한 거래 내역을 바탕으로 5개월 이후까지 거래대금을 미납할 고객을 분류하는 대회였습니다. 해당 대회를 참여한 이유는 작년에 참여해서 25등을 한 IEEE-CIS Fraud Detection 대회와 굉장히 유사했고 기존의 접근방법이 그대로 먹힐 거라 생각했기 때문입니다. 예상대로 작년 솔루션인 깃허브의 코드와 유사하게 접근했을 때 좋은 베이스라인 성능이 나왔습니다.



하지만 기존과 달라진 규칙들때문에 조금 어려운 부분이 있었습니다.


첫 번째로는 미래 데이터의 사용을 엄격하게 금지했다는 점입니다. 과거 시점에서의 예측에 미래 데이터를 사용한다는 게 당연히 말이 안 되지만 개인적으로는 매우 아쉬웠습니다. 거래 시점에서 해당 금융거래가 이상인지 아닌지를 판단하면 제일 좋겠지만, Output 자체가 5개월 이후까지 거래대금의 미납 여부이고, 신규고객의 경우 과거의 정보가 없다 보니 아예 판단할 수 없다는 문제 또한 있었습니다. 그렇기에 과거의 거래내역을 바탕으로 파생변수를 만들거나 현재 거래의 특이한 점을 바탕으로 이상 거래 여부를 판단해야 하는데 성능적인 측면에서 신규고객과 그렇지 않은 기존고객 간의 차이가 크게 발생했습니다. 참고로 이러한 문제 때문에 검증방법을 어떻게 만들지에 대한 고민도 많았습니다.


두 번째로는 고객마다 특성이 다르기에 모델이 이를 어떻게 잘 구분해서 학습하느냐였습니다. 위에서 언급했던 것처럼 신규고객과 기존의 고객 차이가 있었고 최악에는 평가용 데이터셋에서 처음으로 등장하는 고객들이 존재하는 점이었습니다. 또한, 기존고객들 사이에서도 충성고객과 아닌 고객들간의 차이가 컸습니다. 예를 들어, 하루에 몇십 번의 거래를 진행하는 충성고객이 있고 한탕 뛰려고 하루에 수십 건의 사기거래를 진행한 고객이 있는데 이를 어떻게 구분할지 이슈가 많았습니다.


이러한 문제를 해결하기 위해 파생변수와 검증 방법을 통해서 해결하려고 노력했습니다. 실제 사용한 방법은 소개해드리지 못하지만 해당 방법을 만들기까지의 실험했던 방법들을 소개해드리겠습니다. 먼저, 기존에 많이 사용하는 검증 방법인 Group KFold, Stratified KFold, KFold, HoldOut 방법을 기준으로 비교 실험을 진행했습니다. 위의 방법 외에 추가로 실험해본 방법은 IEEE CIS Fraud Dection의 1등 솔루션17등 솔루션의 방법입니다. 두 가지 방법을 구현해서 실험해본 이유는 해당 대회에서 Public Leaderboard의 성능과 Private Learderboard의 성능 차이가 작아서 였습니다.


마찬가지로 17등 솔루션의 검증방법은 아래와 같았습니다. 참고로 해당 솔루션은 한국의 캐글 마스터이신 허태명님의 솔루션이었습니다. (해당 방법 자세히 물어보려고 연락했었는데 친절하게 설명해주셔서 감사합니다)


위의 방법들과 추가적인 검증방법 몇개를 더해서 학습 파이프라인을 구성하고 파생변수를 생성하기 시작했습니다. 파생변수의 경우 미래의 정보를 사용할 수 없다보니 Frequency Encoding 이나 해당 월의 평균 거래와 같은 파생변수는 전혀 사용이 불가능했습니다. 그리고 참여한 4개의 대회중에서 데이터가 가장 커서 파생변수를 만드는데 힘들었습니다. 파생변수같은 경우는 최대한 과거의 정보를 반영하기 위해서 고객 UID를 중심으로 shift(1)cumsum() 등을 이용했습니다. 이러한 파생변수 같은 경우 충성고객와 일반고객간의 스케일 차이가 많이 발생하는 문제가 있어서 이를 해결하기 위해 몇가지 추가적인 트릭을 도입했습니다.


실제 최종 솔루션으로 작성한 코드는 위에서 언급했던 검증방법과는 구성이 많이 다르고 파생변수 또한 복잡한 형태로 구성했습니다. 하지만, 기존의 우승자분들의 솔루션들에서 인사이트를 많이 얻어서 만들 수 있었고 최종적으로 저희팀은 0.98099의 점수로 2등을 하였습니다.


참고로 모델을 되게 안정성 있게 만들어서 Final Score에서 역전할 수도 있겠다고 생각했는데, 1, 2, 3등 점수 차이가 public이랑 Final 모두 똑같은 거 봐서는 저만의 착각이었나 봅니다 ㅎㅎ


한국타이어앤테크놀로지 - 독일 지역의 Winter 타이어 수요 예측


독일 지역의 Winter 타이어 수요 예측대회는 독일 지역의 타이어 판매량에 대한 RMSE를 구하는 대회였습니다. 2020년이 오지 않아서 2015-2019년도 데이터를 주고 2019년도의 10~12월 (3개월)의 수요를 예측하는 문제였습니다. 해당 대회는 사람들이 많이 참여를 안 해서 참가했는데, 대회 끝날 즈음에 사람들이 몰려서 가슴 졸였던 대회입니다.

  • 1_daily_sales.csv: 일별 타이어 판매량(15년1월 ~ 19년9월)
  • 2_stock.csv: 월별 타이어 재고(Winter Tier, All Season Tire, 15년1월 ~ 19년9월)
  • 3_magazine.csv : 연도별 타이어 매거진 평가 데이터
  • 4_gdp.csv: 분기별 독일 GDP 데이터(15년1분기 ~ 19년3분기)
  • 5_car_registration.csv: 월별 차량 판매량(15년 1월 ~ 19년 9월)
  • 6_brand_sales.csv : 월별, 브랜드별 차량 판매량(15년 1월 ~ 19년 9월)
  • 7_weather.csv: 독일 내 지역(1, 2, 3)별, 월별 날씨 데이터(15년 1월 ~ 19년 9월)
  • 8_exchange_rate.csv: 일별 환율데이터(krw/euro, 15년1월 ~ 19년9월)


데이터의 경우 위의 총 8개가 있었습니다. 베이스라인으로 제공된 코드는 LSTM 기반의 예측이었는데 해당 방법은 10월은 잘 맞추는 경향을 보였지만 11월 12월 장기간으로 갈수록 잘못맞추는 경향을 보여서 사용하지 않았습니다. 저희 팀은 특이하게 베이스라인을 LightGBM의 부스팅 모델을 사용했습니다. 일단 다른 시계열 모델 대비해서 주어진 다양한 데이터를 활용해서 파생변수를 만들 수 있고 기본적인 성능이 좋다는 점 때문이었습니다. 작년 데이콘의 전력 수요량 예측 경진대회에서 상위 1, 2, 3등도 모두 LightGBM을 이용했는데 해당 코드를 사용해서 예측한 경우 14000 ~ 15000은 달성할 수 있었지만 더 큰 성능향상이 없어서 해당 방법은 포기했습니다.


데이터를 탐색하면서 확인했던 점은 독일은 한국과는 다르게 공휴일과 주말에 장사를 거의 안하는 경향이 있었습니다. 수요가 아예 0은 아니었지만 0에 가까웠습니다. 그리고 음수의 수요를 가지는 일들도 있었는데 아마 반품과 같은 현상이 발생하지 않았나 생각하고 있습니다. 참고로 독일의 문화에 대해 이해하기위해 독일에서 대학원을 다니는 친구한테 많이 물어봤는데 공휴일, 주말은 보통 아예 쉬고 특히 크리스마스 기간에는 연휴 기간이어서 전반적으로 통으로 휴가를 가기도 한다는 얘기를 들었습니다. 실제 학습데이터셋에서도 12월이 다른 월에 비해서 수요량이 많이 낮았는데 평가 데이터셋의 12월 크리스마스가 포함되어서 이를 잘 맞추는게 해당 대회에서 가장 중요한 이슈이지 않았나 생각합니다. 참고로 LSTM과 같은 시계열 모델의 경우 12월 크리스마스와 같이 장기적인 시계열 정보와 주말같이 연속적이지 않은 부분이 숨어 있어서 안좋지 않았나 생각합니다.


최종적으로 모델은 말씀드릴 수 없지만 저희 팀은 10828의 점수로 2등을 하였습니다. public_score가 제일 높았던 점수는 여러 가지 모델을 앙상블 해서 얻은 12400이었는데 해당 코드에 핵심이 되었던 모델 한개가 서버 점검 이후에 재현이 안되어서 public score 6등 정도의 단일모델을 제출했었습니다. 앙상블 코드가 재현되었으면 final_score에서 1등 점수였는데 조금은 아니고 많이 아쉽습니다.


시계열 대회답게 역시 public_ranking과 final_ranking 변동이 많았습니다. 저희 팀은 아래의 표기에서는 최고 점수여서 4등이라 찍혔지만, 실제로는 6등에서 2등으로 상승해서 shake up을 통해 수상을 했습니다.



상위 6개의 팀에 대해서 public_score와 final_score의 점수를 비교해본 결과 상위 1위팀의 경우 public_score와 final_score 모두 1위였지만 2위부터 6등팀까지 모두 반비례하는 모습을 보이는것도 보면 운이 많이 따랐던 것 같습니다.

후기

2주라는 짧은 시간 동안 4개의 대회에 참여하다 보니 쉽지 않은 대회였습니다. 데이터의 보안상으로 V100 + 램 32GB에 주어진 환경에서만 작업이 가능했고 서버도 불안정해서 자꾸 메모리 에러가 발생하는 문제가 있었습니다. AI 임상판독대회와 이상 거래 탐지의 경우 데이터의 크기가 굉장히 커가지고 돌릴 때마다 노트북이 죽는 문제도 많았습니다.


하루 24시간이라는 시간을 최대한 활용하기 위해서 팀원들과 작업 시간을 면밀하게 나누고 낮에는 비교 실험 위주의 코드를 돌리고 잠을 자는 시간에는 무거운 코드를 돌려가면서 시간을 활용했습니다. 팀원들이 작업할때에는 자료조사의 진행과 아이디어에 대해 고민을 했고 코드가 잘 안 돌아가서 며칠은 밤도 새가면서 작업했습니다. (이날 바로 얼굴에 대상포진 올라와서 슬펐습니다. ㅠㅠ.)


거리적으로도 서울, 대전으로 사는 곳이 멀었고 모든 회의를 사이버상으로 진행했지만 해당 대회를 통해 팀원들과 많이 친해질 수 있었습니다. 그리고 연구 분야인 Sematic Segmentation 에 대해서도 자신감이 붙을 수 있었습니다. 수상을 할 수 있게 도와준 팀원들과 주최측에 감사인사드립니다. 해달팀 만세 ~