[Boostcamp AI Tech] [P-stage] 9주차 Day 3 학습 기록

bluegun·2021년 9월 30일
0

AI Tech 2기 활동

목록 보기
38/87

학습 내용


Object Detection Library

Object detection library는 하나로 통합되어 있진 않고 여러 개의 라이브러리가 사용되고 있다. 그 중에서 주로 활용되는 두 라이브러리가 MMDetection, Detectron2 이다.

MMDetection

MMDetection은 Pytorch 기반의 detection 오픈소스 라이브러리이다.

2-stage 모델은 크게 Backbone / Neck / DenseHead / RoIHead 로 나눌 수 있고, 각 부분은 모두 커스터마이징이 가능하다. 해당 커스터마이징은 config 파일을 통해 할 수 있다. 즉 MMDetection을 쓰고 싶으면 config 파일만 잘 정의해 주면 된다.

Backbone은 Input image를 Feature map으로 변환해준다. Neck은 Feature map을 재구성한다(FPN 등). DenseHead에서 localization을 수행하고, RoIHead에서 Bbox regression, classification을 수행한다.

MMdetection github에 들어가서 다양한 config 파일들을 볼 수 있다. config 파일을 열어보면 '_base_' 변수에 base config를 상속 받고 base config의 일부를 수정하여 사용하는 구조로 되어있다.

그렇다면 base config는 어떻게 구성되어 있을까? base config에는 크게 dataset, models, schedules, default_runime이 있다. 각 폴더 내엔 각 형태에 맞는 base config들이 존재한다.(dataset 폴더 내에는 coco, cityscapes등 다양한 데이터셋에 대한 base가, models 폴더 내에는 fast r-cnn, cascade r-cnn 등 다양한 모델에 대한 base가 들어있다.)
하나의 config file에서 위의 base들을 여러 개 조합할 수 있다.

Dataset config 내의 hyperparameter

  • samples_per_gpu : 한 gpu에 올라갈 sample(image) 수. 한 Image당 여러 RoI를 가지므로 RoI들이 올라간다고 생각하면 된다.
  • workers_per_gpu
  • train, val test
  • train_pipeline, test_pipeline : data 전처리 pipeline을 기술함

Model config 내의 hyperparameter

  • type : FasterRCNN 등. type에 따라 사용가능한 hyperparameter가 달라질 수 있다. 아래는 FasterRCNN 기준
  • backbone
  • Neck
  • RPN_head
  • RoI head

그 외 runtime setting으로 Optimizer, training schedules(learning rate, runner)를 설정할 수 있다.

MMdetection의 파이프라인은 간단한데, config 파일을 불러와 내 데이터셋에 맞게 파라미터를 일부 수정 후 dataset 빌드, model 빌드, 학습을 진행하면 되는데 각각 한 줄의 코드로 가능하다.

결국 사용은 크게 어렵지 않으므로, 완벽히 사용하려면 라이브러리 내의 model의 구조에 대해 완벽히 이해하고 모든 파라미터를 조정할 줄 알아야 한다. 따라서 모델 이해가 필수. 이 부분이 MMdetection의 단점이 될 수 있다.


Detectron2

Facebook AI Research의 Pytroch 기반 라이브러리이다. detection외에도 segmentation 등의 기능도 제공한다.

크게 setup config, setup trainer, start training의 과정으로 구성된다.

Detectron2는 MMdetection과 다르게 Augmentation mapper를 직접 정의해야 한다. MMdetection은 dataset config에서 pipeline을 정의하면 자동으로 동작했지만, Detectron2는 이를 직접 정의해야 하므로 자유도가 높지만 구현 난이도가 있다.
전체적인 구조는 MMdetection과 비슷하게, config 파일을 수정해 사용한다.

0개의 댓글