YOLOX VOC custom dataset error

홍수민·2022년 11월 10일

object detction

목록 보기
3/3

YOLOX 학습할 때, Coco형식에서 자꾸 에러가 발생해서 VOC 형식으로 dataset을 바꿔서 사용하고 있었다.

분명 iteration이 109여야 하는데 238이라는 알 수 없는 숫자가 뜸


찾아보니 iteration이 커진 이유가 dataloader에 있었다.
내가 VOC dataset을 잘 몰라서 왜 이렇게 setting이 되어있는지 모르겠지만 고치면서 물음표 100개 띄웠음
# exps/example/yolox_voc/yolox_voc_s.py
def get_data_loader(self, batch_size, is_distributed, no_aug=False, cache_img=False):
        from yolox.data import (
            VOCDetection,
            # ... 생략
        )
        # ... 생략

        with wait_for_the_master(local_rank):
            dataset = VOCDetection(
                data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
                image_sets=[('2007', 'train')],
                # before: [('2007', 'trainval'), ('2012', 'trainval')]
                img_size=self.input_size,
                preproc=TrainTransform(
                    max_labels=50,
                    flip_prob=self.flip_prob,
                    hsv_prob=self.hsv_prob),
                cache=cache_img,
            )

image_sets 부분을 데이터셋 구조에 맞게 [('20xx', 'train')] 로 바꿔줘야 한다!
현재는 trainval이 들어가니, val 이미지까지 전부 학습시키고 있었다ㅠ



def get_eval_loader(self, batch_size, is_distributed, testdev=False, legacy=False):
        from yolox.data import VOCDetection, ValTransform

        valdataset = VOCDetection(
            data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
            image_sets=[('2007', 'val')], # before: [('2007', 'test')]
            img_size=self.test_size,
            preproc=ValTransform(legacy=legacy),
        )

마찬가지로, eval loader 부분도 val 이미지만 가져올 수 있게 바꿔줘야 한다
testset으로 validation하고 있었음ㅎㅎㅜ

profile
차곡차곡 기록하기

0개의 댓글