최근 Tracking 연구를 하게 되어 MMCV를 공부하고 있는데,, 여간 복잡한 것이 아니다..
하나하나씩 개념을 정리하며 이해할 필요가 있을 것 같은데,, 오늘은 Registry를 다뤄보려한다.
MMCV에서 registry는 라이브러리 내의 다양한 유형의 구성 요소를 관리하고 조직하는 중앙 시스템이다. 코드 조직, 유연성 및 유지 관리에 여러 가지 이점을 제공하는 강력한 메커니즘이라 한다.
Registry 안에는 Dataset, Backbone, Neck, Head, Hook 등 별별 클래스 (모듈) 들이 들어갈 수 있는데, vision 모델 구축을 위해 필요한 (1) 모든 개념들을 각각의 Registry (DATASETS, MODELS, NECKS 등..) 에 집어넣고,, (2) 필요할때마다 build_from_cfg 함수를 호출하여 객체를 생성하는 개념인 듯 하다.
QDTrack에서 model을 생성하는 과정을 예시로 참고하여 Registry를 더 이해해보자.
👍 __init__.py란 폴더(디렉터리)가 패키지로 인식되도록 하는 역할도 하고, 이름 그대로 패키지를 초기화하는 역할을 한다. 즉, import로 패키지를 가져오면 init.py 파일이 실행된다.
👍 __all__는 우리가import \*를 했을 때 임포트 대상에서 어떤 것들을 가져와야 하는지를 정해 주는 변수이다.
(임포트 대상에서 내용 전체를 가져오라고 했을 때 '전체'가 무엇인지 정의해줌)
👍 함수만 import할 수 있는게 아니라 변수 (Registry)도 import할 수 있다. (전역으로 불러오지는 않음)
👉 아래 .mot.py, .tracker.py를 거치면서 MODELS, TRACKERS 레지스트리 안에 model/tracker가 채워진다.
Registry 변수들 (MODELS, TRACKERS)는 전부 .builder.py 안에서 선언된 변수들이지만,, custom class는 mutable 하기 때문에 .builder.py 파일 밖에서도 Registry 변수의 내용물을 변경할 수 있다.
👉 다음으로 .mot.py 파일 안에서 어떻게 Registry에 'QDTrack'을 추가했는지 살펴보자.
위 mot/qdtrack.py를 보면 QDTrack 클래스를 정의할때 @MODELS.register_module() 이라는 데코레이터 함수를 호출하는 것을 볼 수 있다. 이 과정에서 Registry 변수 MODELS에 QDTrack에 대한 정보가 추가된다.
👍 데코레이터 함수는 정의중인 함수 또는 클래스를 인자로 받는 일종의 wrapper 함수이다.
'Object Tracking 연구' 카테고리의 다른 글
DARTH 코드 분석하기 (2) DARTHQDTrack 모델, EpochBasedRunner 분석 (0) | 2024.01.10 |
---|---|
DARTH 코드 분석하기 (1) Train/test.py, config 분석 (0) | 2024.01.07 |
[디버깅] DARTH : CostumOptimizerHook is not in the hook registry (0) | 2024.01.07 |
MMCV에서 MODEL, DATASET을 어떻게 build 하는가? (0) | 2024.01.07 |
[디버깅] DARTH : MOTTrackingDataset is not in the dataset registry 에러 (0) | 2023.12.29 |