본문 바로가기
ML, DL/논문

[MMDetection] 논문 정리 및 모델 구현

by Wordbe 2019. 7. 28.

Abstract

MMDetection은,

object detection과 instance segmentation을 다루는 유명하고 다양한 모델을 하나의 toolbox로 구현한 일종의 플랫폼이다.

많은 사람들이 사용하여, 기존 디텍션 모델을 다양한 분야에 응용하고, 새로운 모델을 만드는데 도움이 되었으면 한다고 한다.

소스 코드, pytorch로 작성되어 있다
https://github.com/open-mmlab/mmdetection

1. Introduction

주요 특징은 크게 네가지이다.

1) Modular design 모델이 모듈화 되어있어 사용자 제작이 간편하다.
2) Supported Framwork 독창적으로 여러 프레임워크를 지원한다. 2번 본문 참고
3) High efficiency 모든 box와 mask 연산은 GPU에서 동작한다. Detectron(facebook), maskrcnn-benchmark, SimpleDet 등 다른 플랫폼 보다 학습속도가 빠르다.
4) State of the art 2018년 COCO Detection Challenge 에서 우승한 MMDet team의 코드를 토대로 만들었다. 현재도 공사중

2. Supported Framworks

MMDetection 안에 구성된 모델들이다.

  • 2.1 Single-state Method

    • SSD
    • RetinaNet
    • GHM
    • FCOS
    • FSAF
  • 2.2 Two-state Methods

    • Fast R-CNN
    • Faster R-CNN
    • R-FCN
    • Mask R-CNN
    • Grid R-CNN
    • Mask Scoring R-CNN
    • Double-Head R-CNN
  • 2.3 Multi-state Methods

    • Cascade R-CNN
    • Hybrid Task Cascade : 가장 높은 성능을 보인 모델
  • 2.4 General Modules and Methods

    • Mixed Precision Training
    • Soft NMS
    • OHEM
    • DCN
    • DCNv2
    • Train from Scratch
    • ScratchDet
    • M2Det : 2018년, 더 효율적인 피처 피라미드를 구성하기 위한 새로운 피처 피라미드 네크워크
    • GCNet
    • Generalized Attention
    • SyncBN
    • Group Normalization
    • Weight Standardization
    • HRNet : 2019년, 고해상도 이미지를 학습하는 데 집중한 새로운 뼈대(backbone)이다.
    • Guided Anchoring
    • Libra R-CNN

3. Architecture

  • 3.1 Model Representation
    독자들을 위해 친절하게 모델이 어떻게 묘사되는지 간단히 설명해 놓았다.

  • Backbone : 입력 이미지를 특징 맵(featue map)으로 변형시켜주는 부분이 백본이다.

          마지막 FC층을 제외한 ResNet50 등이 이에 해당한다.
  • Neck : backbone과 head를 연결짓는 부분으로, 날것의 특징맵에 정제(refinement), 재구성(reconfiguration)을 한다.

        FPN(Feature Pyramid Network) 등이 이에 해당한다.
  • DenseHead (= AnchorHead / AnchorFreeHead) : 특징 맵의 dense locations 수행하는 부분이다.

  • RoIExtractor : 단일, 다중 특징 맵으로부터 RoI-wise 특징을 추출하는 부분이다.

  • RoIHead (= BBoxHead / MaskHead) : RoI 특징을 입력으로 받고, RoI-wise task-specific 예측을 하는 부분이다.

        bounding box 분류/회기나 mask 예측이 이에 해당한다.

  • 3.2 Training Pipeline
    저자는 figure 2 와 같이 Training pipline을 train epoch과 train iter로 쪼개어, 사용자가 원하는 대로 hook의 설정을 변경할 수 있도록 하였다.

4 Benchmarks

  • 4.1 실험 세팅
    Dataset : MS COCO 2017 사용했다. 도전적이고 널리 쓰이기 때문이다.
    구현 상세 :

      (1) 이미지는 최대 1333 x 800 로 resize 되었다.
      (2) GPU 당 2개 이미지를 할당하여 배치사이즈 16에서 학습시켰다.(8개의 V100 GPU 사용)
      (3) training schedule은 Detectron과 같다. 1x, 2x는 각각 12, 24 epoch을 의미하고 20e는 cacade에서 20 epoch을 의미한다.

    Evaluation metrics :

      COCO dataset의 표준 evalution metric을 이용했다. 0.5:0.95 의 IoU threshold를 적용했고,
      RPN(resion proposal network)는 AR(Average Recall)로, detection 결과는 mAP로 평가했다.
  • 4.2 Benchmarking Results

위 결과처럼 Hybrid Task Cascade 모델이 가장 성능이 좋았다.

그 외에 Mixed precision training이 가능하여서 GPU 메모리를 아끼면서 효율적으로 작업할 수 있다고 하였고,
Multi-node scalability 실험을 해본 결과 이론상 linear하게 증가하는 것과 비슷?하게 실제도 증가하였다고 한다.

5 Extensive Studies

5.1 Regression Loss

여러 가지 loss가 있고, loss weight(lw)을 증가시켜가며 performance를 비교했다.

5.2 Normalization Layer

normalization 종류로 FrozenBN, SyncBN, GN을 적용했는데,

(1) backbone의 BN을 바꿨을 때는 성능향상이 없었고,

(2) FPN 과 bbox/mask head에 더해도 별다른 이점이 없었으며,

(3) bbox head를 2fc에서 4conv-1fc로 바꾸고, nomarization을 추가하면 1.5%의 성능향상을 보였고,

(4) 더 많은 conv 층이 bbox head에 있으면 더 좋은 성능을 보였다.

5.3 Training Scales

training scale에 관한, 입력 이미지의 사이즈를 어떻게 받을 것인가에 대한 논의가 없었다.
이 논문은 이미지를 선택된 스케일로 resize 하여 실험해 보았다.
그 방법은 2가지가 있는데
(1) 'value' mode : 스케일 셋을 미리 정해놓고, 임의로 스케일을 선택하는 것이다.
(2) 'range' mode : 스케일 범위를 미리 정해놓고, 최솟값 최대값 사이의 스케일을 임의로 만드는 것이다.

Table 8의 결과를 보면, range 모드가 value 모드보다 비슷하거나 아주 조금 더 좋은 성능을 보였다.

5.4 Other Hyper-parameters

간단히 smmothl1_beta와, allowed_border를 소개했다.

그리고 아직 Conclusion 없이 부록을 보여주며 끝난다.

2018년에 COCO 챌린지에서 SOTA를 달성한 모델인 만큼 이용하면 좋을 것 같다.

ps. 구현은 다음시간에 소개하도록 하겠습니다.

댓글1