생각해보니 내가 train.py 를 깊게 이해할 필요는 없다. TTA를 하는 이상 어짜피 source model에서 pretrain된 모델을 쓸텐데,, 굳이 train.py로 내가 뭘 학습할 필요가 있나? (checkpoints도 다 공유되어 있는데? ㅎㅎ) test.py만 보면 될듯하다.
QDTrack의 test.py는 진짜 test만 하는 파일이고,,, DARTH의 test.py는 TTA 까지하는 파일이다. 먼저 QDTrack의 test.py를 분석한 이후 github에 있는 checkpoint의 성능을 확인하고,,, DARTH의 TTA로 넘어가면 될 것 같다.
1 Train/test.py 코드 분석하기
DARTH 깃헙 페이지에 올라와있는 MOT 17 checkpoint 파일을 다운받고, 단순히 test 했을때 github 페이지에 올라온 성능과 동일하게 reproduce 되는지를 확인해봐야겠다..
tools/run/train.py 파일로 1) source model을 학습하거나,, 2) TTA를 수행할 수 있는 듯 함.
👉 Checkpoint로 source model을 넣어주고, dataset을 target domain으로 넣으면 TTA가 진행되는 듯함..
👉 1) Source model을 학습할때에는 config 파일을 mot/qdtrack 을 집어넣고,, 2) TTA를 진행할 때에는 adapters/darth 안에 있는 파일들을 사용함 (DARTH가 offline 방식이기 때문에 이런 형태가 가능)
👉👉 그 증거로,, 1) mot/qdtrack의 config 파일들은 model로 QDTrack을 사용하고, 2) adapters/darth의 config 파일들은 model로 DQRTHQDTrack을 사용한다.
👉 tools/run/test.py 파일은 1) source model을 test하거나, 2) TTA가 완료된 model을 test 하는데 사용됨.
😁 나는 online TTA를 할 계획이기 때문에 test.py가 필요하지 않을 수도 있음..
2 Config 코드 분석하기
TTA를 위해 실질적으로 필요한 config 파일은 configs/adapters/darth 안에 들어있다.
Config 파일에서 dataset에 대해서도 각각의 config 파일을 import 해야하는데, 같은 데이터셋에서 학습을 진행하더라도 Source training 때 import하는 파일과, TTA 때 import하는 파일이 다르다.
👉 DanceTrack을 예를들자면, source training 때에는 configs/_base_/datasets/dancetrack.py를 사용하고, TTA 때에는 configs/_base_/target_datasets/dancetrack.py를 사용한다.
Source model을 학습할때는 해당 dataset의 train split을 사용하지만, TTA를 할때에는 val split만 사용함.
👉 datasets 폴더에 있는 configs와 target_datasets 폴더에 있는 configs 파일들을 비교하면 data dict이 다르다.
이게 제일 중요한 config 파일인데 datasets 에 대한 config와 DARTH 훈련을 위한 config 두개로 구성되어있다.
DARTH 훈련을 위한 config 파일을 열어보면 1) teacher view에 대한 data augmentation pipeline, 2) student view에 대한 data augmentation pipeline, 3) contrastive view에 대한 data augmentation pipeline이 들어있다. 추가로 4) out pipeline과 (아직 용도불명!) 5) DARTHQDTrack (제일 중요!) 에 대한 내용, 6) Custom hooks (teacher 를 위한 EMA 과정으로 보임), 7) optimizer config이 들어있다.
😁 Data augmentation 내용은 덜 중요한 것 같고,,, DARTHQDTrack 에 대한 config를 분석해보자...!!!
2-1 Config 코드의 DARTHQDTrack 설정 분석하기
DARTHTrack 안에 여러가지 key:value 쌍이 들어있는데, init_cfg 을 포함한 대부분의 정보는 해당 모델 클래스의 생성자를 호출할때 인자로 전달되는 듯 하다. (상세 검증 필요..!!) 자세한건 DARTHTrack 모델 자체를 다루는 별도의 포스트에서 다루도록 하고,,, 일단 간단하게 어떤 속성이 있는지만 보고 넘어가자... 🤔
모델은 DARTHQDTrack이란 것을 사용하고,, config 파일정보에 따라 pretrained model 링크가 자체적으로 저장되어 있다.
👉 source domain 에 따라 config 파일의 종류가 바뀐다.
👉 이론상, config 파일에서 pretrained model의 링크를 알려주므로,,, train.py 을 실행할때 checkpoint 경로를 명령행 인자로 전달하지 않아도 괜찮다.
tracker는 QDTracker (QDTrack 인가?) 를 쓴다. teacher 에 대한 설정 값 일부가 들어있으며 loss는 RPN / RoI 각각에 대해 distillation 이 존재한다.
오늘은 여기까지 정리하고,, 다음에는 DARTHTrack 모델과 loss에 대해 살펴보도록 하자...!!
이상 끝!! 💪😁🤜
'Object Tracking 연구' 카테고리의 다른 글
DARTH 코드 분석하기 (3) Test 코드 분석 및 DARTH 성능 reproduce (0) | 2024.01.11 |
---|---|
DARTH 코드 분석하기 (2) DARTHQDTrack 모델, EpochBasedRunner 분석 (0) | 2024.01.10 |
[디버깅] DARTH : CostumOptimizerHook is not in the hook registry (0) | 2024.01.07 |
MMCV에서 MODEL, DATASET을 어떻게 build 하는가? (0) | 2024.01.07 |
MMCV에서 Registry를 어떻게 만드는가? (0) | 2023.12.29 |