데이터셋 업로드
KeyNet Platform에 데이터셋을 업로드하는 방법을 안내합니다.
사전 요구사항
- KeyNet Platform 계정 및 프로젝트 접근 권한이 있어야 합니다
- 데이터셋이 준비되어 있어야 합니다
1. 데이터셋 준비
디렉토리 구조 구성
데이터셋을 학습 코드의 요구사항에 맞게 구조화합니다.
이미지 분류 (ImageFolder 형식):
my-dataset/
├── train/
│ ├── class1/
│ │ └── *.jpg
│ └── class2/
│ └── *.jpg
└── val/
├── class1/
│ └── *.jpg
└── class2/
└── *.jpg
객체 탐지 (YOLO 형식):
coco128/
├── images/
│ └── train2017/
│ └── *.jpg
└── labels/
└── train2017/
└── *.txt
데이터셋 구조
Platform은 데이터셋 디렉토리를 /data 경로에 마운트합니다. 학습 코드가 기대하는 구조대로 준비하세요.
- 이미지 분류: 클래스별 폴더 구조 (ImageFolder)
- 객체 탐지: images/labels 분리, 라벨 파일 별도 (YOLO)
Platform 업로드 방식
파일과 폴더를 선택하여 바로 업로드할 수 있습니다:
- 압축 과정 불필요
- 폴더 구조가 그대로 유지됨
- 업로드 후 즉시 사용 가능
2. Platform에서 데이터셋 생성
데이터셋 생성 버튼
프로젝트 상세 페이지에서 "데이터셋 생성" 버튼을 클릭합니다.

데이터셋 정보 입력
- 데이터셋 이름: 알아보기 쉬운 이름 입력
- 설명 (선택): 데이터셋에 대한 간단한 설명
- 파일/폴더 선택: 데이터셋 폴더 또는 압축 파일 선택
업로드 시작
"생성" 버튼을 클릭하여 업로드를 시작합니다.
학습 코드에서 사용
업로드한 데이터셋은 학습 실행 시 /data 경로에 자동으로 마운트됩니다.
이미지 분류: DatasetPath 사용
from keynet_train import DatasetPath
from torchvision import datasets, transforms
# Platform 업로드: my-dataset/ 폴더
# 구조: my-dataset/train/class1/, my-dataset/train/class2/, ...
# Platform 마운트: /data/my-dataset/
train_path = DatasetPath("my-dataset", "train") # /data/my-dataset/train
val_path = DatasetPath("my-dataset", "val") # /data/my-dataset/val
# Transform 정의
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
# ImageFolder는 train/ 폴더 내의 class1/, class2/ 등을 자동 인식
train_dataset = datasets.ImageFolder(train_path, transform=transform)
val_dataset = datasets.ImageFolder(val_path, transform=transform)
경로 매칭 (이미지 분류):
| 항목 | 값 |
|---|---|
| 업로드한 폴더 | my-dataset/ |
| 폴더 내부 구조 | my-dataset/train/class1/, my-dataset/val/class1/ |
| Platform 마운트 | /data/my-dataset/ |
| 최종 접근 경로 | /data/my-dataset/train, /data/my-dataset/val |
객체 탐지: YAML 파일 사용
YOLO와 같이 특정 구조가 필요한 경우 YAML 파일로 경로를 설정합니다.
from ultralytics import YOLO
# Platform 업로드: coco128/ 폴더
# 구조: coco128/images/train2017/, coco128/labels/train2017/, ...
# Platform 마운트: /data/coco128/
# coco128.yaml 파일에 경로 명시 (Docker 이미지에 포함)
model = YOLO("yolo11n.pt")
model.train(data="/app/coco128.yaml", ...)
# coco128.yaml
path: /data/coco128
train: images/train2017
# val은 train과 동일하게 설정 (coco128은 train2017만 포함)
val: images/train2017
경로 매칭 (객체 탐지):
| 항목 | 값 |
|---|---|
| 업로드한 폴더 | coco128/ |
| 폴더 내부 구조 | coco128/images/train2017/, coco128/labels/train2017/ |
| Platform 마운트 | /data/coco128/ |
| YAML 참조 경로 | /data/coco128/images/train2017, /data/coco128/labels/train2017 |
정보
coco128 데이터셋은 train2017만 포함합니다. val도 train2017로 설정하거나 YOLO가 자동으로 split 수행하도록 할 수 있습니다.
자세한 내용: YOLO 튜토리얼
폴더 구조 핵심
업로드한 폴더의 최상위 디렉토리 이름이 /data 아래에 그대로 마운트됩니다. 학습 코드에서 이 이름을 참조하세요.
Empty Dataset 생성
용도
런타임에 데이터셋을 다운로드하는 경우 (예: MNIST) Empty Dataset을 생성합니다.
자세한 내용은 데이터셋 개념을 참고하세요.
생성 방법
- "데이터셋 생성" 버튼 클릭
- 이름 입력 (예: "empty")
- 파일을 선택하지 않고 "생성" 버튼 클릭
문제 해결
경로 오류 (학습 시)
증상:
FileNotFoundError: [Errno 2] No such file or directory: '/data/my-dataset/train'
해결:
- 학습 코드에서 참조하는 데이터셋 경로가 업로드한 폴더 이름과 일치하는지 확인
- 업로드한 폴더 구조 확인: 최상위 디렉토리가 올바른지 검토
- Platform에서 선택한 데이터셋이 맞는지 확인
- YOLO 사용 시:
coco128.yaml의train: images/train2017경로가 실제 폴더 구조와 일치하는지 확인
다음 단계
데이터셋 업로드가 완료되었다면:
- MNIST 튜토리얼: Empty Dataset 사용 예시 (런타임 다운로드)
- YOLO 튜토리얼: 실제 데이터셋 업로드 및 YAML 설정
- 학습 이미지 업로드: CLI 방식 또는 Docker 방식