계약은 메서드 두 개면 충분해
데이터를 '인덱스로 접근할 수 있는 샘플 목록'으로 표현할 수 있다면 사용자 정의 데이터셋에는 다음 두 메서드만 있으면 돼.
__len__(self): 전체 샘플 수를 반환해.__getitem__(self, idx): 인덱스 idx의 샘플을 반환해.
이게 전체 계약이고 나머지는 DataLoader가 맡아.
계속 다시 쓰게 될 유형
- ImageFolder 방식: 하위 폴더 이름을 클래스 레이블로 쓰는 디렉터리 트리야. 전형적인 구조라면 torchvision의
ImageFolder를 바로 사용하고, 데이터 구조가 조금 다를 때만 변형해. - CSV / pandas: 파일 경로와 레이블을 담은 매니페스트를 읽고 요청이 들어올 때 디스크에서 데이터를 가져와.
- HDF5 / Parquet / WebDataset: 큰 데이터셋을 디스크 기반 형식에서 읽을 때 사용해.
- 메모리 내 텐서: 모델을 시험해 볼 작은 데이터라면 텐서를 속성에 그대로 보관해도 돼.
지연 로드와 즉시 로드
큰 데이터셋은 반드시 지연 로드해야 해. __init__이 아니라 __getitem__ 안에서 디스크 파일을 읽어. 작은 데이터셋은 __init__에서 미리 처리해 메모리에 올릴 수 있어. 판단 기준은 데이터가 RAM에 넉넉하게 들어가는지 여부야. 컴퓨터에 따라 보통 10~100GB 사이에서 경계가 갈려.