[AITech][Object Detection][P stage] 20220408 - Retrospect
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의 활용이 생각만큼 활발하지는 않았다는 것이 있다. 해당 부분들은 앞으로 이어지는 대회들을 통해 보완할 수 있다고 생각한다.
Leave a comment