상세 컨텐츠

본문 제목

mmsegmentation - 2. Config (for Customizing models)

Machine Learning

by 땅콩또복 2023. 1. 26. 20:54

본문

Base (classification) model을 이용하는 대표 Downstream tasks 중 하나인 Semantic segmentation!

그리고 대표적인 segmentation toolbox인 mmsegmentation!

(이하 mmseg)

 

그럼 만약에,

  • Backbone change
  • Head change
  • Backbone or Head hyper-parameter modification

면 어떻게 해야할까?

 

정답은 mmsegmentation/configs 안에 담겨 있다!

오늘은 이 부분을 파헤쳐보자!

 

OpenMMLab에서 제공하고 있는 모든 computer vision libraries (mmdetection, mmsegmentation, mmclassification 등)는 모두 동일한 형태의 configuration을 지닌다.

 

그말인 즉슨, configuration 스타일을 익혀두면 모든 CV libraries를 활용할 수 있다라는 의미다.

아쉽게도 한글 Guideline은 존재하지 않으므로 직접 하면서 익혀보도록 하자!

 

기본적으로 동작은

bash dist_train.sh configs/model_config.py ...

형태로 들어가는데 여기서 model_config.py 안에는 크게,

  • Dataset: popular dataset에 대한 config (e.g. ADE20K, Cityscapes 등)
  • Model: 다~~~양한 모델들의 config (e.g. SegFormer, Next-ViT, DeeplabV3 등)
  • Schedule: optimizer, evaluation metric, learning policy 등
  • Default_runtime

에 관한 정보가 들어가게 된다.

 

감사하게도 mmsegmentation에서 자체적으로 제공하는 모델 (데이터도 마찬가지)은 

  • configs/_base_/models/
  • configs/_base_/datasets/
  • configs/_base_/schedules/
  • configs/_base_/default_runtime.py

에 포함되어 있으니, 내가 사용하고자 하는 모델/데이터셋/스케쥴이 있다면 손쉽게 inheritance design 형태로 덮어쓰면 된다.

 

mmseg에서 제공하는 config.py 파일의 naming은 다음과 같이 통일되어 있다.

{model}_{backbone}_[misc]_[gpu x batch_per_gpu]_{resolution}_{iterations}_{dataset}

 

  • model: 모델 이름
  • backbone: Backbone type (e.g. r50 (ResNet-50), x100 (ResNeXt-101))
  • misc: miscellaneous setting/plugins of model (모델 내부에 담긴 module type. 예를 들어, dconv, attention 등)
  • gpu x batch_per_gpu: GPU 갯수와 GPU 당 batch size
  • resolution: Image size
  • iterations: number of training iterations (e.g. 160k = 160,000번)
  • dataset: dataset 종류 (e.g. cityscapes, voc12aug, ade20k 등)

Config.py

config 안에 여러 변수가 존재하지만 우리가 주로 다뤄야할 config들만 정리해보자.

대표적인 PSPNet의 config를 확인하기 위해서는 https://mmsegmentation.readthedocs.io/en/latest/tutorials/config.html 를 참고하자 (엄청 자세히 나와있다)

 

norm_cfg

multi-GPU processing을 위한 Batch normalization config (여러 군데에서 사용함)

norm_cfg = dict(type='SyncBN', requires_grad=True)

Model

  1. type: segmentor 이름
  2. pretrained: pretrained checkpoint 위치
  3. backbone: backbone config
    1. type: backbone config (mmseg.models.backbones 에 list를 참고하자)
    2. pretrained: pretrained checkpoint 위치
    3. resume: 사용하고자 하는 classification model checkpoint
  4. neck: 일부 architecture에서는 neck을 사용 (e.g. FPN)
    1. type: neck config (mmseg.models.necks 에 list를 참고하자)
  5. decode_head
    1. type: decoder head config (mmseg.models.decode_heads 에 list를 참고하자)
  6. train_cfg: 그냥 place holder
  7. test_cfg: Test mode, options are 'whole' and 'sliding'. 'whole': whole image fully-convolutional test. 'sliding': sliding crop window on the image.

Dataset

  • dataset_type: dataset type
  • data_root: 데이터 경로 (root path)
  • img_norm_cfg: normalization 수치
  • crop_size: training에서 사용할 crop size
  • train_pipeline: training data loading 부터 augmentation까지
  • test_pipeline: 위와 동일
  • data: data loader 개념
    • samples_per_gpu: GPU 당 batch size 수
    • workers_per_gpu: GPU 당 worker 수
    • train: train dataset config
    • val: validation dataset config
    • test: test dataset config

ETC.

optimization 관련 등 (이 부분 상세히 다루지 않겠습니다)

 

참고할만한 Links

https://mmsegmentation.readthedocs.io/en/latest/tutorials/config.html 

https://github.com/open-mmlab/mmsegmentation/tree/master/configs/_base_

https://github.com/open-mmlab/mmsegmentation/tree/master/configs/segformer

관련글 더보기

댓글 영역