본문 바로가기
Boostcamp

[부스트캠프] object detection competition 회고

by Yonghip 2023. 5. 24.

image classification대회가 끝나고 새로운 팀으로 object detection대회에 들어갔는데

이때동안 여러 프로젝트를 경험했는데 그중 가장 협업이 잘된 대회라고 생각한다.

그 이유로는 여태껏 프로젝트를 진행하면 보통 한두 명의 리더가 팀을 기획부터 개발까지 모두 먹여 살리는? 경우가 많았다.

솔직히 이번 프로젝트동안 팀원 모두가 같은 목표로 달린다는 느낌이 들지는 않았지만 오히려 자기 맡은 부분에서 최선을 다하고 결과를 공유하며 장단점을 잘 보완한 것 같다. 

 

프로젝트의 전반적 흐름과 코드는 전부 이 링크에서 확인할 수 있습니다. 이번 글에서는 단기간의 프로젝트 기간 동안 저희 팀이 지표를 향상시키기 위해 어떤 과정을 거치었으며 제가 중요하게 생각하고 느낀 점을 위주로 나열해 보겠습니다.

 

 

문제  정의

프로젝트에 본격적으로 들어가기 전 저희는 aistage에서 제공해 준 코드와 추가적인 EDA를 통해 어떤 점이 프로젝트에서 주로 풀어야 할 문제점이 될지 먼저 정의하였습니다.

1. 레어 한 케이스였지만 bbox가 과하게 중첩되어 있는 이미지가 존재하였습니다.

개인적으로 이 문제가 이번 대회에서 가장 중요하게 작용될 요소 중 하나라 생각되는 부분이었습니다.

label을 다시 처리하거나 제외하는 방법이 가장 먼저 떠올린 방법이었는데 대회의 labeling 방식이 기존 방식과 달라 시간 소비도 클 것 같았으며 같은 방식으로 라벨링 했다면 test image에서도 비슷한 image가 존재할 것이므로 추가적인 처리는 해주지 않았습니다.

2. class별 bbox개수 imbalance

데이터의 개수차가 컸으며 모델 학습 시 문제가 될 가능성이 존재한다고 판단했습니다.

bbox의 image특성을 추가적으로 분석하지는 않아 클래스별 모델의 결과를 먼저 확인한 다음 focal loss, hard sampling 등의 기법으로 처리해 줘도 되는 문제라 판단하여 이 역시 처리를 해주지 않았습니다.

 

모델  학습

mmdetection2, mmdetection3, UniverseNet, yolov8 총 4개의 라이브러리에 구현된 모델을 여러 개 학습시켜 본 다음 일정 이상의 성능을 내는 모델을 선택하여 학습시켰습니다.

 

후보모델 선택

총 6개의 모델을 선발하였으며 선발된 모델은 [UniverseNet, ATSS, GFLv2, Cascade RCNN, TOOD, yolov8] 이와 같습니다.

성능이 좋아서 선택된 모델이 대부분이나 ATSS, TOOD와 같은 모델들은 여타 모델과 문제를 풀어내는 방식이 크게 달랐기에 추론 시간이 제한되지 않은 대회의 특성상 ensemble시 성능 향상을 가져올 거라 믿어 추가하였습니다.

 

모델 구조 튜닝

각자 모델의 특징을 리서치하고 backbone, neck, optimizer 등 다양한 세팅을 바꿔가면 성능 향상을 시도하였습니다.

자원이 한정되어 있고 모델에 대한 조사가 부족한 상태였기에 대다수가 backbone->optimizer->neck->etc 순서로 시간 대비 큰 성능 향상을 가져올 수 있는 순서로 실험을 진행하였습니다.

시도해 본 결과 중 의미 있는 결과를 낸 결과를 각자 구글 docs로 공유하였으며

이를 통해 모두가 더 최적의 결과를 이끌어냈다고 생각합니다.

base모델 구조를 고른 뒤로는 각자 다른 면에서 모델을 학습시켰으며 저는 아래와 같은 순서로 추가적인 실험을 진행하였습니다.

 

learning rate에 따른 성능 비교

learning rate는 mmdetection에서 기본적으로 제공해 준 warm up과 step을 적용하고 있었습니다.

개인적으로 학습이 완전히 진행되지 않았다 판단하여 여러 세팅에서 추가실험을 진행하였습니다.

 

cosine annealing과 cyclic메서드를 적절히 결합하여 사용해 보았는데 cyclic메서드의 특성상 기존 방법보다 수렴이 늦었습니다.

대회 마감이 다가와 추가적인 튜닝이나 실험이 불가능하였기에 실험은 중지시키고 기존의 step scheduler에 step ratio와 빈도를 높이고 에포크를 높이는 방법을 사용했습니다.

 

Augmentation

문제정의 시 물체가 중첩되어 있는 경우에 대해 다양한 augmentation을 이용하여 해결가능할 것이라 믿어 주로 사용되는 augmentation기법들과 물체의 사이즈를 줄여줄 수 있는 Mosaic기법을 더하여 실험하였습니다.

성능비교시 기존의 클래스 mAP가 낮았던 general trash와 plastic에 대한 지표 그리고 mAP50에 대한 성능을 비교하며 증강기법을 선택했습니다. flip류 channel정보 변환류 그리고 Jpegcompression?이 성능이 크게 향상된 기법들이었는데 객체 색깔 및 모양이 일정치 않은 general trash를 더 잘 잡아낼 수 있었기 때문이라 판단하였습니다.

왼쪽과 같이 증강법을 조합하여 적용하여 성능향상을 이루어 냈습니다.

 

 

Ensemble

초기 앙상블 적용 시 성능이 계속 상승하였으나 일정량 이상의 모델을 합칠 때부터는 오히려 성능이 하락하였습니다.

test set에 대해 bbox를 visualize하고 추가적으로 이미지당 bbox개수를 확인해 본 결과 앙상블하는 모델이 많아질수록 이미지의 bbox개수가 많아져 wbf의 파라미터를 튜닝하지 않았을 때 물체의 클래스를 잘못된 예측 들도 하나로 합쳐지게 되어 컴페티션의 평가지표인 mAP50에 맞지 않는 방식이라 판단하였습니다. 이후 앙상블시 최대 박스 개수를 confidence score순으로 정렬 후 300개의 예측만 사용하였습니다.

앙상블시 test set에 대한 검증이 불가능하여 이미지를 눈으로 보며 parameter를 튜닝했는데 최적값이라 생각했던 결과의 예측이 좋지 않았습니다. 이는 단순히 눈으로 검증했을 때는 문제가 없지만 mAP50 평가지표의 특징상 IoU threshold를 높이는 방식이 이미지의 recall을 크게 떨어뜨리기 때문이라고 생각했습니다.

따라서 kfold모델 앙상블시에는 nms를 사용하였고 각 모델을 앙상블 할 때는 nmw를 사용하였습니다.

 

 

Insights

이번대회는 처음으로 대회의 평가지표에 대한 의심을 가지게 된 대회였습니다.

위의 이미지에서 보이는 것처럼 사람의 눈으로 보기에는 오른쪽의 정제된 결과가 더 정확한 예측이라 생각하기 십상이지만 실제로는 왼쪽의 점수가 mAP상 0.3정도 더 높았습니다.

저 역시 정량적인 평가지표로는 이 task에 대한 수행능력을 파악하기 어렵다 생각했으며 주최진분들 역시 고민하에 최대한 정당한 평가방법을 사용했다고 했는데 어째서 kaggle같은 사이트에 detection문제가 많이 없는지도 알 것 같습니다. 

만일 실제 detection task에 투입된다면 평가방법을 고르는 것부터 많은 노력을 기울이게 될 거라 생각했습니다.

 


 

mmdetection과 같은 라이브러리를 처음 사용해보면서 기능 하나를 같다 붙이는데도 애를 먹었다.

대회 마감이 다가올수록 점차 팀원들의 검증이 끝난 기법들을 서로 하나씩 같다 붙이며 새로운 시도는 하지 못했는데

아마 당장 새로운 기법은 공부하고 적용하는데 시간을 쏟아도 성능향상을 이루지 못 할수도 있다는 생각 때문이었던 것 같다.

코드 이해와 구현능력의 부족이 실험의 다양성을 제한했다고도 볼 수 있을것 같다.

대회를 진행하고 나서야 데이터 엔지니어 ,리서처 가리지 않고 코딩능력이 필요하다는 것을 다시 한번 체감했다.

 

 

이미지 및 대회 출처: 네이버 부스트캠프 AI Tech