본문 바로가기

Object Tracking 연구

[디버깅] DARTH : MOTTrackingDataset is not in the dataset registry 에러

Object Tracking + TTA 연구를 위해서 DARTH 논문의 코드를 받아서 실험을 돌려보려한다. 

(https://github.com/mattiasegu/darth)

근데 이게 아직 제대로된 코드가 아니라서 수정할 내용이 많다... 하지만 달리 MOT + TTA 코드도 없기 때문에 내가 잘 고쳐가면서 써야할 것 같다..

 

1. train.py 에서 발생한 build_dataset 메소드 에러

그런데 제대로 돌려보기도 전에 "MOTTrackingDataset is not in the dataset registry" 에러가 발생했다.. 🤦‍♂️🤦‍♂️

 

흠.. MOTTrackingDataset에 대한 언급은 configs/_base_/dataset/mot_challenge 안에 있는걸 확인했는데,,, 뭐가 문제일까

 

* 원래 QDTrack 에서는 어떻게 dataset을 build 하는지 비교할 것..

앞으로 노란색 박스는 QDTrack, 파란색 박스는 DARTH

 

🤔 원래 build_from_cfg를 통해 dataset을 만들때 Registry안에 여러 dataset에 대한 정보가 items 이라는 속성으로 들어있어야한다. (QDTrack의 경우 Registry안에 있는 MOT17Dataset을 사용하여 dataset을 build한다.)

❗❗ mmcv 에서 Registry가 어떻게 생성되는지에 대해서는 다음 링크를 참조할 것!! 

옳게된 예 : QDTrack의 models/__init__.py
잘못된 예 : DARTH의 datasets/__init__.py

 

QDTrack은 models/__init__ 에서 MODELS 레지스트리를 다 불러옴. 그리고 __all__에 레지스트리를 추가하여 이후 models 모듈을 임포트한 임의의  파일에서 레지스트리에 접근할 수 있게함.

 

그런데 DARTH는 datasets/__init__.py를 보면 .builder.py에서 DATASETS을 import하지 않은 상태에서 __all__에 DATASETS 레지스트리 변수를 등록하고 있다. 👉 결과적으로 main.py 에서 build_from_cfg로 dataset을 만드려고 할때 DATASETS 레지스트리에 아무 정보도 없어서 (none만 있음) 에러가 발생하는 것이다.

위와 같이 .builder 에서 DATASETS 변수를 불러오고, __all__에 추가해줬더니 더이상 에러가 발생하지 않았다.

2. train.py 의 train_model에서 발생한 build_dataset 메소드 에러

이번에는 train.py 아래 있는 train_model 함수 안에서 build_dataset 에서 비슷한 에러가 발생했다.

train.py

이게 왜그런고 하니,,, MOTTrackingDataset은 DARTH 저자가 custom으로 만든 데이터셋이기 때문에 이걸 제대로 사용하려면 mmcv 패키지 안에서 build_dataset을 호출할게 아니라 어떻게든 작업 폴더 안에서 build_dataset을 호출해서 custom으로 제작한 MOTTrackingDataset에 접근해야한다.. 아래를 참고..!

 

저자가 실수를 했는지,, darth.apis 가 아니라 mmtrack.apis에서 train_model 함수를 import 했다. 이거 변경할 것!!

 

일단 오늘은 여기까지...

 

이상 끝! 💪😬🤜