[부스트캠프 AI Tech 4기] Object Detection 대회

신현수·2022년 12월 23일
0

Object Detection 대회

9주차부터 11주차까지 3주에 걸쳐 Object Detection 대회가 진행되었다. 이 대회를 시작으로 앞으로 계속 3개의 대회가 연속으로 진행된다.

대회 개요

바야흐로 대량 생산, 대량 소비의 시대. 우리는 많은 물건이 대량으로 생산되고, 소비되는 시대를 살고 있습니다. 하지만 이러한 문화는 '쓰레기 대란', '매립지 부족'과 같은 여러 사회 문제를 낳고 있습니다.

분리수거는 이러한 환경 부담을 줄일 수 있는 방법 중 하나입니다. 잘 분리배출 된 쓰레기는 자원으로서 가치를 인정받아 재활용되지만, 잘못 분리배출 되면 그대로 폐기물로 분류되어 매립 또는 소각되기 때문입니다.

따라서 우리는 사진에서 쓰레기를 Detection 하는 모델을 만들어 이러한 문제점을 해결해보고자 합니다. 문제 해결을 위한 데이터셋으로는 일반 쓰레기, 플라스틱, 종이, 유리 등 10 종류의 쓰레기가 찍힌 사진 데이터셋이 제공됩니다.

여러분에 의해 만들어진 우수한 성능의 모델은 쓰레기장에 설치되어 정확한 분리수거를 돕거나, 어린아이들의 분리수거 교육 등에 사용될 수 있을 것입니다. 부디 지구를 위기로부터 구해주세요! 🌎

Input : 쓰레기 객체가 담긴 이미지가 모델의 인풋으로 사용됩니다. 또한 bbox 정보(좌표, 카테고리)는 model 학습 시 사용이 됩니다. bbox annotation은 COCO format으로 제공됩니다. (COCO format에 대한 설명은 학습 데이터 개요를 참고해주세요.)

Output : 모델은 bbox 좌표, 카테고리, score 값을 리턴합니다. 이를 submission 양식에 맞게 csv 파일을 만들어 제출합니다.

데이터 개요

우리는 수많은 쓰레기를 배출하면서 지구의 환경파괴, 야생동물의 생계 위협 등 여러 문제를 겪고 있습니다. 이러한 문제는 쓰레기를 줍는 드론, 쓰레기 배출 방지 비디오 감시, 인간의 쓰레기 분류를 돕는 AR 기술과 같은 여러 기술을 통해서 조금이나마 개선이 가능합니다.

제공되는 이 데이터셋은 위의 기술을 뒷받침하는 쓰레기를 판별하는 모델을 학습할 수 있게 해줍니다.

  • 데이터셋 통계

    • 전체 이미지 개수 : 9754장

    • 10 class : General trash, Paper, Paper pack, Metal, Glass, Plastic, Styrofoam, Plastic bag, Battery, Clothing

    • 이미지 크기 : (1024, 1024)

  • Annotation file

    • annotation file은 coco format 으로 이루어져 있습니다.

    • coco format은 크게 2가지 (images, annotations)의 정보를 가지고 있습니다.

  • images :
    • id : 파일 안에서 image 고유 id, ex) 1
    • height : 1024
    • width : 1024
    • filename : ex) train/0002.jpg
  • annotations :
    • id : 파일 안에 annotation 고유 id, ex) 1
    • bbox : 객체가 존재하는 박스의 좌표 (xmin, ymin, w, h)
    • area : 객체가 존재하는 박스의 크기
    • category_id : 객체가 해당하는 class의 id
    • image_id : annotation이 표시된 이미지 고유 id

진행

EDA

  • 이미지 당 annotation 수
    이미지가 대체로 적은 수의 annotation을 가짐. 간혹 하나의 이미지에 지나치게 많은 annotation이 존재하기도 한다는 것을 알 수 있음.
  • 하나의 이미지가 가지는 class 수 분포
    최소 1가지 종류의 class만 포함된 이미지가 가장 많고 최대 7가지 class를 포함한 이미지가 있음.
  • Class 당 annotation 분포
    General trash, Paper, Plastic bag의 비율이 매우 높은 반면, Battery의 비율이 굉장히 낮음을 알 수 있음.
  • Bounding Box의 크기 비율
    대체로 이미지의 0~10% 정도의 크기를 차지한다는 것을 알 수 있음.
  • Bounding Box의 위치 분포
    대체로 Bounding Box는 이미지의 중앙 부분에 위치한다는 것을 알 수 있음.
  • Class별 Bounding Box의 width/height 비율 분포
    비율이 1.0~1.5 사이인 것으로 보아 대체로 정사각형에 가깝거나 가로가 약간 긴 모양의 Bounding Box를 가지고 있음.

모델 선정

나는 주로 2stage model들을 위주로 실험을 진행하였다. 아무래도 real-time detection을 하는 것이 아니기 때문에 2stage detector가 더 안정적인 성능을 보일 것이라고 생각하였다. 또한 1stage detector와의 앙상블을 통해 성능을 올려보고자 하였다.

Cascade RCNN

Baseline 모델을 학습시킨 후 결과를 확인해 보았을 때, 과도하게 많은 예측 bbox가 존재함을 알 수 있었다. 이에 따라 많은 False Positive가 존재할 것이라고 생각하였고, 이를 줄이기 위해 Cascade RCNN 기반의 모델들을 사용하기로 하였다.

BackBone

EDA 결과 bbox의 크기가 대체로 이미지에 비해 작은 크기를 가지고 있어 큰 input image size를 사용하는 것이 작은 크기의 객체들을 탐지하는데 유리하다고 생각하였다. 그에 따라 무거운 모델을 사용하는 것이 좋을 것이라고 생각하여 나는 다음과 같은 두 모델을 사용해보았다.

  • ResNet152
  • SwinTransformer

Augmentation

MosiacRandomCropColorTransformPaste In

Mosaic

Mosaic Augmentation을 활용하여 모델의 성능을 향상시켰다.

  • Mosaic이란? : 여러장의 이미지에서 각 부분을 잘라 붙여 하나의 이미지로 만들어 학습을 시키는 Augmentation 방법

RandomCrop

RandomCrop을 활용하여 모델의 성능을 향상시켰다.

Ensemble

최종 성능을 높이기 위해 성능이 좋았던 여러 모델들을 Ensemble하는 과정을 거쳤다.

Weighted Boxes Fusion

Weighted Boxes Fusion이라는 앙상블 방법을 사용하였다.

  • Weighted Boxes Fusion : 예측의 일부를 단순히 제거하는 NMS, Soft-NMS 방식과 달리, WBF는 예측된 모든 사각형을 사용하므로, 결합된 사각형의 품질이 크게 향상시킨다.
    출처 - https://lv99.tistory.com/74

해보았지만 잘 안 된 것

  • Soft-NMS
    모델을 앙상블 하는 과정에서 Soft-NMS를 활용해보고자 하였다.

    • Soft-NMS란? : 기존 NMS는 가장 높은 confidence를 가지는 bbox를 찾고, 같은 클래스 인 bbox들 중 겹치는 영역이 일정 비율 이상인 (iou > threshold) bbox 를 제거해서 중복된 detection 결과를 없앤다. 이러한 hard NMS 방식은 실제로 존재하는 object 를 제거함으로써 mAP 가 낮아지는 문제가 있다. 그래서 일정 비율 이상인 (iou > threshold) 겹치는 bbox 들의 confidence를 0으로 만들어 없애지 말고, confidence 를 줄여서 최종 mAP 를 향상 시키자는 개념이다.
      출처 - https://eehoeskrap.tistory.com/407

    이러한 Soft-NMS를 활용하여 mAP를 높이고자 하였으나 오히려 큰 폭으로 점수가 낮아졌다. 우리의 예측 모델은 이미 Ground Truth에 비해 많은 bbox를 예측하고 있었고, 그런 모델들을 Soft-NMS를 통해 앙상블을 하려다보니 오히려 잘못된 bbox 또한 많이 남게되어 mAP가 낮아진 것 같다.

  • MixUp
    Detection 논문들에서 MixUp을 통해 성능 향상을 이루었다는 이야기가 많아 MixUp을 시도해보았다. 하지만 Augmentation을 하는 과정에서 MixUp을 시도해보았을 때, 모델의 성능 향상을 이끌어내지는 못했다. 대부분의 bbox가 가운데에 위치하여 있고 또한 Paper와 PaperPack과 같이 비슷한 특성의 class가 있다보니 오히려 분류하는데 혼동을 크게 주어 점수가 떨어졌을 것이라고 생각했다.


결과

Confusion Matrix

Cascade ResNet152Cascade ResNest200Cascade Swin-TUniverseNetYolov7x

Metric : mAP50

Cascade ResNet152Cascade ResNest200Cascade Swin-TUniverseNetYolov7x
0.5173
0.5092
0.5292
0.5665
0.5374

Ensemble

Ensemble Weight Box Fusion
0.6258

아쉬운 점

  • 이번 대회도 역시 시간이 많이 부족하다고 느꼈다. 지난 대회보다는 일주일이 더 긴 3주라는 시간이 주어지기는 하였지만 object detection이라는 task에 대한 학습을 우선하여 첫 주의 시간을 보내다 보니 사실상의 주어진 시간은 비슷하다고 느꼈습다. 또한 모델의 학습 시간이 훨씬 길어지면서 다양한 실험을 하는데 어려움을 겪었다. 좀 더 많은 시도를 해보고, 정교한 실험을 할 수 있는 시간이 있었으면 좋았겠다는 아쉬움이 남았습니다.
  • 지난 대회와는 달리 이번 대회에서는 모델을 다루는데 library를 주로 활용하였다. Object Detection Task에 최적화 된 mmDetection library를 활용해 프로젝트를 진행하였다. 지난 classification 대회와는 달리 학습을 위한 모든 설정을 config를 통해 진행하니 많이 낯설게 느껴졌다. 이런 config를 활용하여 학습을 시키는 방법이 실험을 하는데에는 편리하였지만 모델을 직접 만지거나 자세히 들여다보기 쉽지 않았다. 모델에 대해 좀 더 자세히 공부하고 이해도가 높은 상태로 이런 library를 활용해보면 더욱 좋았을 것 같았다. 또한 쓸 수 있는 모델, scheduler 등의 옵션이 굉장히 많았다. 수업에서 다루지 않은 것들도 많아 뭐가 어떤 건지 많이 헷갈리기도 하였다. 강의를 열심히 들었지만 Library를 활용하는 것 자체에 어려움을 느껴 Detection Task에 대한 공부보다는 Library를 공부하는데 더 많은 시간을 투자한 것 같은 느낌도 들어 아쉬웠다.
  • 직접 데이터를 뜯어보며 만지기를 못한 것이 아쉬웠다. 앞서 언급한 것처럼 Library를 사용하는데 어려움을 느껴 대회 초반에 많은 시간을 Library를 익히는데 투자했고 그러다보니 데이터를 직접 확인해보며 여러 전처리를 시도해보지 못하였던 것이 아쉬웠다.
  • 실험 기록에 아쉬움이 좀 남았다. wandb로 실험 기록을 하기는 하였지만 자세한 기록을 보려면 metadata 혹은 files를 들여다봐야하는 불편한 과정을 거쳐야했다. 또한 다른 실험들과 비교를 할 때에도 결과가 한눈에 들어오지 않았다. 대회 종료 후 다른 조의 발표에서 notion을 통해 실험 기록을 한 것을 보고 매우 깔끔하다고 느꼈고 시도해보고 싶었다.
  • EDA를 충분히 활용하지 못한 것 또한 아쉬웠다. 팀 자체의 eda와 조교님께서 남겨주신 좋은 eda 자료가 있었지만, 잘 활용하지 못하였다. 이런 eda 결과를 활용하여 그에 맞는 학습을 시켰다면 더 좋은 결과가 있었을 것 같아 아쉬움이 남는다.

배운 점

  • 대회 기간 올라온 강의들을 꼼꼼히 듣고, 비록 100%를 이해하지는 못하였지만 수업에서 들은 내용들을 프로젝트에 적용해보려고 하였다. 여러 기법들, 혹은 모델들을 활용해보며 object detection에 대한 전반적인 이해와 실습을 목표로 프로젝트를 진행했다. 다양한 모델들과 library를 만져보며 어떤식으로 object detection task가 진행되는지 익혔다. 프로젝트를 통해 Object Detection Task에 대한 전반적인 이해를 가질 수 있었다.
  • 지난 대회에서는 학습 및 실험을 위한 세팅을 팀원들의 도움을 받아서 진행했다. 다른 팀원분이 주도하여 어떻게 세팅하면 되는지 알려주면 그것에 따르며 세팅을 하고, 필요에 따라 도움을 주었다. 하지만 이번 프로젝트에서는 주도적으로 본격적인 실험 전 세팅을 해보았다. mmdetection 라이브러리와 wandb의 연결, valid set 분리, 데이터 시각화 등 여러 사전 작업들을 해보았다.
  • GitHub를 지난 대회보다 체계적으로 사용해보았다. 지난 대회에서는 task 별로 branch를 만든 후 진행하였다면, 이번에는 dev, feat 등의 branch를 파서 기능에 따라 branch를 관리하였다. 이를 통해 더욱 체계적이고 깔끔하게 대회를 진행하고, 코드를 정리 할 수 있었던 것 같다. Git을 거의 사용해보지 못한 나로써는 Git을 잘 다루는 팀원들에게 많을 것을 배울 수 있었다.
  • mmdetection library 사용법을 익혔다. library 자체가 사용하기 어려웠지만 이런 library를 사용해 봄으로써 다른 library도 금방 익힐 수 있을 것 같다는 자신감이 들었다.
  • wandb를 활용하여 detection 결과 시각화를 해 보았다. 모델을 학습시키며 각 모델이 예측한 detection 결과를 wandb로 logging 하여 확인 할 수 있었다. 이를 통해 모델이 어떻게 예측을 하였는지 확인하고 발전 시킬 방향을 정해 볼 수 있었다.

재활용 품목 분류를 위한 Object Detection 대회 - 팀 GitHub Repository
https://github.com/boostcampaitech4lv23cv2/level2_objectdetection_cv-level2-cv-09

0개의 댓글