[네이버 부스트 캠프] 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. 학습 회고