폴더 별로 KfoldCV를 하기 위해 우선 age/gender를 조합하여 6개의 class를 만든 후 train_df에 저장하였습니다.
(MaskBaseDataset.init에서 실행)
sklearn StratifiedKfold 를 활용해서 class를 바탕으로 Kfold train_idx, valid_idx를 뽑습니다.
기존 MaskSplitByProfileDataset.setup에서는 _split_dataset에서 받아온 train_idx, valid_idx를 가지고 self.indices를 만들지만, Kfold의 경우 StratifiedKfold에서 idx를 생성하기 때문에 setup 함수를 수정하고, _split_dataset, split_dataset을 하나로 합쳤습니다.
MaskSplitByProfileDataset.split_dataset에서 얻은 train_set, val_set을 가지고 기존과 동일한 작업을 진행합니다.
Kfold 용 args를 추가했습니다. default 값은 true입니다.
dataset을 변경했기 때문에 반드시 train.py 뒤에 --dataset=MaskSplitByProfileDataset 을 추가해야 합니다.
제대로 Kfold가 이뤄지는지 확인하려면 학습 시작 부분에 print문 주석 해제하고 dataset.을 train_df 앞에 추가하시면 됩니다.
추가 및 변경한 점
참고한 url: https://github.com/boostcampaitech2/image-classification-level1-19/blob/e6ae5d5e176d64aa0ea19ee9d038d711e51ecc43/code/dataset.py