Custom Dataset (Middle format, 포멧중립)

Published by onesixx on

MMDetectio 논문 https://arxiv.org/pdf/1906.07155.pdf
https://github.com/open-mmlab/mmdetection
  1. Custom Dataset구조를 활용하여 새로운Dataset을 정의
  2. Config를 수정
  3. 새로운 detector를 학습한다.

Custom Dataset으로 변경하여 메모리에 Load

Input Dataset구조를 Custom Dataset 구조로 변경

https://github.com/open-mmlab/mmdetection/blob/master/demo/MMDet_Tutorial.ipynb 의 발췌
  • 모든 Image에 대해 Annotation정보를 단 1개의 list 객체로 (메모리에) 가짐
    => list내에 원소는 1개의 Image에 대해 dictionary형태로 구성
    (즉, Image갯수만큼의 dictionary를 만듦)
  • ann내에 bbox는 2D array , label은 1D array
  • filename: 이미지 파일명 (디렉토리없이)
  • width: 이미지 너비
  • height: 이미지 높이
  • ann: bbox와 label(gT)에 대한 정보를 가지는 Dictionary
    • bboxes: n개의 Object들 , 4개의 좌표값(좌상단, 우하단)을 갖는 numpy array. shape는 (n, 4)
    • labels: n개의 Object들에 대한 numpy array. shape는 (n, )
    • bboxes_ignore: 학습에 사용되지 않고 무시하는 k개의 bboxes. shape는 (k, 4)
    • labels_ignore: 학습에 사용되지 않고 무시하는 k개의 labels. shape는 (k,)

Custom Dataset코드 ===> PipeLine ===> Model

  • 아래 코드를 통해 CustomDataset 객체가 mmDetection 프레임웤에 등록되고, register_module()
  • Config의 설정값(소스데이터 구조에 관한 data_root, img_prefix, ann_file)으로 객체가 생성되면, build_dataset()
  • mmDetection 프레임웍이 알아서 호출함.

src Dataset에서 Middle format을 활용하여 trn/val/tst용으로 각각 Dataset을 만든다.

위 CustomDataset을 상속받아서…
filename, width, heights, ann을 key로 갖는 dictionary를 이미지 갯수대로 가지는 list를 <메모리상에> 생성

Config 변경 : Dataset 등록


Config 내용주석 : https://mmdetection.readthedocs.io/en/latest/tutorials/config.html#an-example-of-mask-r-cnn

mmdetection은 (code기반이 아닌) config기반이다.
config 와 dataset의 상호작용을 이해

https://github.com/open-mmlab/mmdetection/blob/master/mmdet/datasets/custom.py

Dataset

Dataset (Image + Annotation) => Data Pipeline

Custom Dataset 등록 및 메모리에 middle format dataset 만듦

  • 아래 코드를 통해 CustomDataset 객체가 mmDetection 프레임웤에 등록되고, register_module()
  • Config의 설정값(소스데이터 구조에 관한 data_root, img_prefix, ann_file)으로 객체가 생성되면, build_dataset()
  • mmDetection 프레임웍이 알아서 호출함.

변환클래스를 통해 다양한 Dataset(Custom, Coco, Kitti, VOC, WIDERFace, XML데이터셋)을 지원

https://github.com/open-mmlab/mmdetection/tree/master/mmdet/datasets

Data pipeline

https://mmdetection.readthedocs.io/en/latest/tutorials/data_pipeline.html

주어진 데이터셋의 구조를 파악 –> parsing –> mmdetection의 중립 annotation 포맷 변환

Model

roi head의 bboxhead 내에 Num_classes정도만 바꾼다.

Schedule

Tuning 포인트 ( 학습중 동적 learning rate)

runtime

Callback설정

Train용 데이터를 생성하고 학습수행.

  • [build_dataset()]로 train config 설정에 따른 Train용 Dataset 생성.
  • build_detector()로 train과 test config반영하여 Model 생성.
  • train_detector()로 Model 학습.

inference

학습된 model을 이용(Checkpoint 파일 로딩)하여 inference 수행

  • 단일/여러 이미지 inference

test데이터로 Inference수행

  • build_dateset()
  • build_dataloader()
  • init_detector()로 저장된 Model파일과 updated된 config를 사용하여 모델생성
  • MMDataParallel()
  • single_gpu_test() 결과가 시각화된 이미지로 반환됨.
  • dataset.evalutate()

설치

Categories: vision

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x