[AITech][Object Detection][P stage] 20220408 - Retrospect

3 minute read


Retrospect

P stage 동안 진행한 일

진행 사항 회고
Code review 대회 첫 주에는 대회를 바로 시작하지 않고 강의를 수강한 후 강의에서 주어지는 mission 들을 수행했다. 그 중 중요하다고 여러 차례 강조되었던 faster r-cnn 코드를 각자 line by line으로 분석한 후 팀원들과 함께 리뷰하였다. 중요한 만큼이나 여타 detection model 코드보다도 훨씬 어렵고 복잡했다. 하지만 결국 이를 끝까지 수행한 후 faster r-cnn 모델이 어떻게, 어떤 흐름으로 동작하는 지 코드 레벨에서 알게 되었고 분석한 코드에서 확장하여 다른 코드들도 더 쉽게 분석할 수 있는 것을 느낄 수 있었다. 모델을 코드 레벨에서 분석하는 것이 해당 모델을 제대로 이해하는 데 중요한 과정임을 깨닫고, 또한 어려운 코드여도 결국 해낼 수 있다는 자신감을 얻었던 기회였다.
Github 본 대회에 앞서 멘토님께 실무에서 원활한 협업을 위한 github 활용법에는 무엇이 있는지 배웠고, 이를 이번 대회를 통해 직접 경험해보기로 했다. 팀원들과 ground rule을 정의했고, commit template/issue template 등 여러 요소들을 준비했다. 실제 대회 과정에서는 그 활용도가 초기에 계획했던 것보다는 높지 않았지만, 최대한 사용하려 하면서 여러 가지를 배웠다. 각 branch를 어떻게 관리해야 하는지, issue는 언제/어떻게 작성해야 하는지, pull/push 시에는 어떻게 해야 하는지 등에 대해 정말 많이 배울 수 있었다.
EDA 2주차를 시작하며 본격적으로 대회를 시작하면서 먼저 EDA를 수행했다. Object detection task에서 수행할 수 있는 EDA에는 무엇이 있는지 생각해 볼 수 있었고, 이를 직접 코드로 구현해 볼 수 있었던 기회였다. Image, bounding box 등에 대한 EDA를 진행하며 데이터셋에 대한 이해를 높일 수 있었고 대회의 점수를 높일 수 있는 방안에는 무엇이 있을지 insight를 얻을 수 있었다. 또한 다른 팀원들의 EDA를 참고하며 미처 생각하지 못 했던 EDA에는 무엇이 있고, 어떻게 할 수 있는지 배울 수 있었다.
Model Experiment EDA를 수행한 후 가장 먼저 진행한 업무는 모델 실험이었다. 팀원들과 각자 몇 개의 모델을 정하여 같은 조건 하에서 성능을 측정하여 어떤 모델이 이번 대회의 데이터셋에 있어서 좋은 성능을 보이는지 확인하였다. 이는 시간이 제한적인 상황 하에서 좋은 성능을 보이는 모델에 집중하는 것이 더 효율적일 것이라는 판단 하에서 내린 결정이었다. 결과적으로 Faster RCNN, Cascade RCNN 등의 RCNN 계열의 2-stage model이 가장 좋은 mAP 성능을 보이는 것을 확인했고, 두 모델을 사용해 많은 실험을 진행하였다. 그런데 실험을 진행하다 보니 2-stage model이 small object detection 성능이 매우 떨어지는 것을 확인할 수 있었다. 이를 위해 anchor box를 변경하는 등 많은 시도를 하다가, 1-stage model이 small object detection에 훨씬 뛰어난 성능을 보인다는 것을 알 수 있었다. 비록 전체적인 mAP 성능은 떨어지고 학습 시간이 비교적 오래 걸리더라도, 2-stage model과의 앙상블을 통해 대회 점수의 향상을 일으킬 수 있다고 생각하여 다양한 1-stage model 실험도 진행하였다. 그 중 SOTA 모델인 ATSS/YOLOv5/TOOD 모델이 가장 좋은 성능을 보여주는 것을 확인하였다.
HPS (Hyper Parameter Search) 실험할 모델을 정하고 나면, 여러 요소들을 변경해보며 모델 튜닝을 수행하였다. 변경 요소에는 image resolution, augmentation, batch size, backbone, neck, bbox head, roi head, anchor box scale/ratio/stride 등 여러 가지가 있었으며, 모델의 성능에 변화가 생기는 것을 확인할 수 있었다. 또한 실험 전 본인이 기대했던 결과와 실제 실험 후 성능이 상이한 경우도 꽤 많이 있었다. 이를 통해 실험의 중요성에 대해 느낄 수 있었다. 또한 실험을 체계적으로 수행하는 법에 대해 터득했고, 이를 위해서는 조작변인/통제변인을 명확히 설정하고 기록하는 것이 매우 중요하다는 것을 느꼈다.
Ensemble 다른 팀원 분이 앙상블 작업을 맡아서 잘 해 주셔서 앙상블 작업에 있어 많이 참여하지는 않았지만, 몇 차례 이야기를 나누며 여러가지를 배울 수 있었다. 대표적으로 사용되는 nms/soft nms/wbf 등의 앙상블 기법과 각 기법에서 사용할 수 있는 parameter에는 무엇이 있는지, 각각이 무엇을 의미하고 이를 변경했을 때 실제로 성능에 어떠한 영향을 끼치는지 확인할 수 있었다.


느낀 점

  • 코드 분석, EDA, 실험, 학습, 성능 평가 등의 일련의 과정을 통해 object detection이라는 task 자체에 많이 친숙 해졌다는 것이 가장 큰 수확이 아닐까 싶다. 이전까지 막연하게 기술에 대해 알고 있었다면, 이번 대회를 통해 직접 실습을 진행해보며 조절 가능한 요소에는 무엇이 있는지, 각각의 요소들이 실제로 모델의 성능에 영향을 어떻게 미치는지를 직접 확인할 수 있었다.

  • 또한 저번 대회에서는 미흡했던 부분인 ‘협업’에 대해 더 체계적으로 진행할 수 있었다. Notion, github 등의 협업 툴을 사용해보며 익힐 수 있었고, 실제 협업 시에 발생하는 불편함 들에 기반하여 여러 차례 ground rule을 수정하기도 했다. 이를 통해 협업이라는 개발자의 큰 소양 중 하나를 크게 함양할 수 있었다.

  • Object detection task에서 앙상블이 매우 큰 영향을 발휘한다는 것을 알 수 있었다. 따라서 여러가지 실험 하에서의 여러 모델 실험을 실험해보는 것이 대회에 있어서 중요한 부분이라는 것을 느꼈다. 이 과정에서 cv set 분리, random seed 고정 등의 요소들도 중요하다는 것을 알 수 있었다.

  • 아쉬운 점으로는 실험 중 빠르게 모델의 성능 향상을 이루기 위해 통제변인을 제대로 설정하지 못 한 적이 있었다는 것과 github의 활용이 생각만큼 활발하지는 않았다는 것이 있다. 해당 부분들은 앞으로 이어지는 대회들을 통해 보완할 수 있다고 생각한다.



Categories: ,

Updated:

Leave a comment