본문 바로가기
딥러닝관련/Detection

MMCV 의 Config

by 머리올리자 2021. 10. 26.
# G.py

_base_ = ['./base.py']
item = dict(a = {{ _base_.item1 }}, b = {{ _base_.item2.item3 }})

https://mmcv.readthedocs.io/en/latest/understand_mmcv/config.html

 

Config — mmcv 1.3.16 documentation

Config Config class is used for manipulating config and config files. It supports loading configs from multiple file formats including python, json and yaml. It provides dict-like apis to get and set values. Here is an example of the config file test.py. a

mmcv.readthedocs.io

MMdetection을 정리하다가 config 항목이 많아 정리해본다.

 

Config 클래스

 

Config 및 Config 파일을 조작하는데 사용

 

python, json 및 yaml을 포함한 여러 파일에서 configs를 loading하는 걸 지원

 

여러 값을 가져오기 위해 dict과 같은 API를 제공

 

(요즘은 이렇게 config를 관리하는 추세 같음... 아무래도 여러 프로젝트들을 관리하기에는 좋아서 그런듯)

 

예시

 

a = 1
b = dict(b1=[0, 1, 2], b2=None)
c = (1, 2)
d = 'string'

Config 파일을 로드하면

 

>>> cfg = Config.fromfile('test.py')
>>> print(cfg)
>>> dict(a=1,
...      b=dict(b1=[0, 1, 2], b2=None),
...      c=(1, 2),
...      d='string')

위와 같이 dictionary 형태로 key와 value 값들이 있다는 걸 알 수 있다.

 

현재 4개의 사전 정의된 변수를 지원

{{ fileDirname }}

 현재 열려 있는 파일의 디렉토리 이름, 예. /home/your-username/your-project/folder

{{ fileBasename }}

현재 열려 있는 파일의 기본 이름, 예. 파일.ext

{{ fileBasenameNoExtension }}

파일 확장자가 없는 현재 열려 있는 파일의 기본 이름, 예: 파일

{{ fileExtname }}

현재 열려 있는 파일의 확장자, 예: .ext

 

(아래처럼 쓸 수 있다는데 나중에 한 번 활용해봐야겠다)

https://mmcv.readthedocs.io/en/latest/understand_mmcv/config.html

 

상속성

 

모든 config에 대해 상속이 가능하다.

 

다른 config file의 fields를 재사용하려면 아래와 같은 방법으로 사용

 

_base_='./config_a.py'

_base_=['./config_a.py', './config_b.py']

 

 

예시 1.

겹치는 값이 없을 때

 

# A.py

a = 1
b = dict(b1=[0, 1, 2], b2=None)
# B.py

_base_ = './config_a.py'
c = (1, 2)
d = 'string'
>>> cfg = Config.fromfile('./config_b.py')
>>> print(cfg)
>>> dict(a=1,
...      b=dict(b1=[0, 1, 2], b2=None),
...      c=(1, 2),
...      d='string')

 

B파일을 가져오면 부모인 A까지 함께 가져온다.

(A와 B 결합)

 

 

예시 2.

겹치는 값이 있을 때

# A.py

a = 1
b = dict(b1=[0, 1, 2], b2=None)
# C.py

_base_ = './config_a.py'
b = dict(b2=1)
c = (1, 2)
>>> cfg = Config.fromfile('./config_c.py')
>>> print(cfg)
>>> dict(a=1,
...      b=dict(b1=[0, 1, 2], b2=1),
...      c=(1, 2))

C파일 가져오면 부모인 A의 값이 변경된다..

(A와 B 결합)

 

예시 3.

값을 삭제할 때

# A.py

a = 1
b = dict(b1=[0, 1, 2], b2=None)
# D.py

_base_ = './config_a.py'
b = dict(_delete_=True, b2=None, b3=0.1)
c = (1, 2)
>>> cfg = Config.fromfile('./config_d.py')
>>> print(cfg)
>>> dict(a=1,
...      b=dict(b2=None, b3=0.1),
...      c=(1, 2))

일부 필드를 무시하도록 _delete_=True를 설정

b의 모든 이전 키 b1, b2, b3은 새 키 b2, b3으로 대체

 

예시 4.

여러 base config를 가져올 때(base configs는 같은 key를 가지면 안된다)

 

# A.py

a = 1
b = dict(b1=[0, 1, 2], b2=None)
# E.py

c = (1, 2)
d = 'string'
# F.py

_base_ = ['./config_a.py', './config_e.py']
>>> cfg = Config.fromfile('./config_f.py')
>>> print(cfg)
>>> dict(a=1,
...      b=dict(b1=[0, 1, 2], b2=None),
...      c=(1, 2),
...      d='string')

Reference from base

 

아래와 같이 base에서 value값을 활용해 새로운 dict 생성가능

 

# base.py

item1 = 'a'
item2 = dict(item3 = 'b')
# base.py

item1 = 'a'
item2 = dict(item3 = 'b')
>>> cfg = Config.fromfile('./config_g.py')
>>> print(cfg.pretty_text)
item1 = 'a'
item2 = dict(item3='b')
item = dict(a='a', b='b')

 

Deprecation

더 이상 사용되지 않을 정보는 아래와 같이 표기 가능

 

# deprecated_cfg.py

_base_ = 'expected_cfg.py'

_deprecation_ = dict(
    expected = 'expected_cfg.py',  # optional to show expected config path in the warning information
    reference = 'url to related PR'  # optional to show reference link in the warning information
)

 

>>> cfg = Config.fromfile('./deprecated_cfg.py')

UserWarning: The config file deprecated.py will be deprecated in the future. Please use expected_cfg.py instead. More information can be found at https://github.com/open-mmlab/mmcv/pull/1275

'딥러닝관련 > Detection' 카테고리의 다른 글

MMdetection(1) 설치 및 Demo 실행 - (2) (config)  (0) 2021.10.27
MMCV 의 Registry  (0) 2021.10.26
MMdetection(1) 설치 및 Demo 실행 - (1)  (2) 2021.10.19
Detectron2 (1) 환경 세팅 및 데모  (0) 2021.09.29
Fast R-CNN 정리  (0) 2021.06.28