# G.py
_base_ = ['./base.py']
item = dict(a = {{ _base_.item1 }}, b = {{ _base_.item2.item3 }})
https://mmcv.readthedocs.io/en/latest/understand_mmcv/config.html
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
(아래처럼 쓸 수 있다는데 나중에 한 번 활용해봐야겠다)
상속성
모든 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 |