본문 바로가기
OpenMMLab(미공개)/MMEngine

[MMEngine] Tutorial - Dataset과 DataLoader

by cogito21_python 2024. 1. 14.
반응형

- Pytorch의 Dataset과 DataLoader 클래스의 개념에서 기반

DataLoader

- DataLoader는 MMEngine의 Runner에 3가지 형태의 인수로 구성됨

  - train_dataloader: 모델에 학습 데이터를 제공할기 위해 Runner.train()를 사용

  - val_dataloader: 일정한 간격으로 모델 평가를 위해 Runner.train() Runner.val()를 사용

  - test_dataloader: 최종 평가때 Runner.test()를 사용

- PyTorch의 DataLoader를 지원. Registry Mechanism of MMEngine 덕분에 dict형태로 인자를 받아들임.

- dict형태로 Runner 전달시 lazily built in

runner = Runner(
  train_dataloader = dict(
    batch_size=32,
    sampler=dict(
      type="DefaultSampler",
      shuffle=True),
      dataset=torchvision.datasets.CIFAR10(...),
      collate_fn=dict(type="default_collate")
      )
  )

 

- 사용 인자 확인시 torch.utils.data 확인

- building procedure의 상세 내용은 build_dataloader 참고(dataset, sampler, dataloader)

- sampler 사용시 shuffle은 False. 실제로 shuffle이 True일 경우 dataloader는 RandomSampler로 자동 전환

from mmengine.dataset import DefaultSampler

dataset = torchvision.dadtasets.CIFAR10()
sampler = DefaultSampler(dataset, shuffle=True)

runner = Runner(
  train_dataloader=DataLoader(
    batch_size=32,
    sampler=sampler,
    dataset=dataset,
    collate_fn=default_collate
    )
)

 

- 단일 프로세스로 처리 되저간 runner에게 랜덤하지 않은 인자를 전달시에만 동등성이 유지. Sampler는 분산 환경 설정 후 구축해야 정확

- Runner는 dict 입력에만 가능한 lazy 초기화 기법을 사용해서 올바른 순서와 random seed를 보장. 문제를 방지하기 위해 Sampler에 dict로 전달하기를 추천

- DefaultSampelr가 받는 인자: shuffle, seed, round_up이 True인 경우 Pytorch의 DataLoader의 drop_last=False처럼 동작

 

Dataset

 

반응형

'OpenMMLab(미공개) > MMEngine' 카테고리의 다른 글

[MMEngine] Tutorial - Runner  (0) 2024.01.14
[MMEngine] 빠른 Tutorial  (0) 2024.01.14
[MMEngine] 환경 설정  (0) 2024.01.14
[MMEngine] 개요  (0) 2024.01.14