[네이버 부스트 캠프] AI-Tech - Lv2 week4(3)

학습기록 - 41

오늘 할 일

  • Object Detection Library
    • MMDetection
    • Detectron2

1. 강의 복습 내용

  • MMDetection Pytorch 기반의 Object Detection 오픈소스 라이브러리

    • MMDetection의 기본적인 구조
      Untitled

    • Pipeline

      위의 구조를 다음과 같은 모듈로 나타낼 수 있다.  
      모듈 단위로 커스터 마이징이 가능  
      config 파일에 의해 통제  
      

      모듈 설명

      Backbone - 입력 이미지를 특징 맵으로 변형  
      Neck - backbone 과 head를 연결, feature map을 재구성  
      DenseHead 특징 맵의 dense location 을 수행하는 부분임  
      RoIHead RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측하는 부분임  
      

      Untitled

      정의되어 있는 config 파일을 가져와서 dataset의 구조를 바꿔보고 build한다.

    • Config file 구조

      • configs를 통해 데이터셋부터 모델, scheduler, optimizer 등 정의 가능
      • 다양한 object detection 모델들의 config 파일 정의
      • 그 중, configs/base/ 폴더에 가장 기본이 되는 config 파일이 존재
        • dataset, model, schedule, default_runtime 4 가지 기본 구성요소 존재
      • 각각의 base/폴더에는 여러 버전의 config들이 담겨있다.
        • Dataset COCO, VOC, Cityscape 등
        • Model faster_rcnn , retinanet , rpn 등 MMdetection 링크
      • config file 이용은 다음과 같다. 이용할 모델의 config를 선언

        • 선언

          cfg = Config.fromfile('./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py')
          
          root='../dataset/'
          
        • faster_rcnn_r50_fpn_1x_coco.py 아래와 같이 모든 config는 _base_ 폴더에 가장 기본이 되는 config 파일이 존재한다.

          _base_ = [
            '../_base_/models/faster_rcnn_r50_fpn.py',
            '../_base_/datasets/coco_detection.py',
            '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'\
            ]
          
        • /datasets/coco_detection.py train, val, test 파이프 라인이 따로 존재한다.
          Untitled

        • /models/faster_rcnn_r50_fpn.py 2stage model로 이루어진다.
          • type, backbone, neck, rpn_head, roi_head, bbox_head, train_cfg, test_cfg3

            Untitled

          • 사용가능한 모델에 대해서는 mmdetection/mmdet/models/backbones/__init__.py에서 정의한다. + 모델 custom 또한 가능

        • ../_base_/schedules/schedule_1x.py, ../_base_/default_runtime.py optim, scheduler에 대해서 정의한다.
          • optimizer, training schedules
  • Detectron2

    Facebook AI Research 의 Pytorch 기반 라이브러리
    Object Detection 외에도 Segmentation, Pose prediction 등 알고리즘도 제공
    mmdetection과 구조가 유사하다. 차이점은 Dataset을 등록하고 Augmentation 하는 부분이 빠져있고,

    Detectron2 링크

    • Pipeline
      • Setup Config
      • Setup Trainer
      • Setup Training
    • Config File
      • MMDetection과 유사하게 config 파일을 수정하고 파이프 라인을 build하고 학습한다.
      • config를 상속받은 후, 필요한 부분만 상속받아서 사용한다.

      • 불러오기

        cfg = get_cfg()
        cfg.merge_from_file(model_zoo.get_config_file('COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'))
        
      • Config Default - detectron2/config/defaults.py
        • Defaults Config에 대한 정의가 되어있다.
    • Dataset
      • Config (defaults.py)
        • defaults.py - # Dataset
          데이터셋, 데이터로더와 관련된 config 존재

        • Dataset 등록
          class, 파일명 등록 가능, Dataset 명시

          try:
          register_coco_instances('coco_trash_train', {}, '../dataset/train.json', '../dataset/')
          except AssertionError:
              pass
          
          try:
              register_coco_instances('coco_trash_test', {}, '../dataset/test.json', '../dataset/')
          except AssertionError:
              pass
          
          MetadataCatalog.get('coco_trash_train').thing_classes = ["General trash", "Paper", "Paper pack", "Metal", 
                                                             "Glass", "Plastic", "Styrofoam", "Plastic bag", "Battery",   "Clothing"]
          
        • Data Augmentation
          MyMapper를 통해서 Data Augmentation을 진행, Train시 호출

          import detectron2.data.transforms as T
          
          def MyMapper(dataset_dict):
              dataset_dict = copy.deepcopy(dataset_dict)
              image = utils.read_image(dataset_dict['file_name'], format='BGR')
          
              ...
          
          class MyTrainer(DefaultTrainer):
          
              def build_train_loader(cls, cfg, sampler=None):
              return build_detection_train_loader(
              cfg, mapper = MyMapper, sampler = sampler
              )
          
              ...
          
    • Model
      • Config (defaults.py)
        • BACKBONE, FPN, ANCHOR_GENERATOR, RPN, ROI_HEADS, ROI_BOX_HEAD
        • Custom Backbone 모델 등록 가능

          Untitled

          Untitled

    • Solver
      • Config (defaults.py)
        • LR_SCHEDULER, WEIGHT_DECAY, CLIP_GRADIENTS

과제

3. 피어세션 정리

4. 학습 회고