https://github.com/Megvii-BaseDetection/YOLOX
yolox 공식 구현 repo 설치 과정 및 개발환경 세팅.
사전에 cuda 및 pytorch 설치가 필요하다.
그 외 git repo의 Quick Start 를 따라 설치하면 된다.
@ mmdetection 의 yolox 구현은 깔끔하지 않고, 일부 파라미터가 다르다.
COCO 형식으로 변환된 custom 데이터셋으로 yolox 모델을 학습하는 과정을 서술한다.
YOLOX/exps/default/ 경로에서 학습할 모델 exp파일(.py)를 복사한다.
기본적으로 학습 데이터셋의 경로는 self.data_dir 경로 하위의 annotations 폴더에서 self.train_ann / self.val_ann 에 명시된 label json(coco style) 파일을 읽어와, 이미지가 들어있는 train/val 경로에 접근한다.
나는 이와같은 형식의 디렉토리 구성이 마음에 들지 않아서,
annotations 폴더 없이 self.data_dir 경로에 {train / val / test} json 파일을 배치하고, 동일한 네이밍의 폴더에 학습 이미지를 배치했다.
학습 테스크 {train / val / test}에 따라 적절한 학습 이미지 경로를 탐색할 수 있도록,
YOLOX/yolox/data/datasets/coco.py 를 수정해준다.
72 self.name = self.json_file[:-5] # remove .json
학습 시각화를 위해 wandb를 설치하고 로그인한다.
로그인시 api 키를 입력하라는 메시지가 출력되면, wandb 웹사이트: https://wandb.ai/settings 에 접속해 API key를 복사하여 입력해 준다.
$ pip install wandb
$ wandb login
custum 학습을 위해 base 모델(yolov3-darknet53)을 복사하여 만든 exp(.py) 파일을 수정해 준다.
MyExp를 상속 받으며, 상속받은 부모 클래스의 self.xxx 파라미터를 수정하여 학습 파라미터를 수정할 수 있다.
아래와 같이 input_size(test_size도 항상 동일하게 변경), num_classes 및 transform config 항목의 파라미터를 수정해줬다.
YOLOX의 기본 Augmentation 을 파라미터 조정으로 수정할 수 있고,
YOLOX/yolox/data/data_augment.py 소스코드를 직접 수정하여 원하는 기능을 추가할 수 있다.
학습하려는 모델의 pre-trained 모델을 다운받고, gpu 개수(-d), 배치사이즈(-b : gpu 개수 x 8 권장), checkpoint, wandb 옵션, fp16 적용 유무를 적용한 명령어를 입력한다.
$ python tools/train.py -f exps/my/yolov3_512x256.py -d 4 -b 32 -o -c checkpoint/yolox_darknet.pth --cache --logger wandb wandb-project yolox
wandb에 접속해 학습 진행상황을 확인할 수 있다.