본문으로 건너뛰기

데이터셋 업로드

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에서 데이터셋 생성

데이터셋 생성 버튼

프로젝트 상세 페이지에서 "데이터셋 생성" 버튼을 클릭합니다.

데이터셋 생성 버튼

데이터셋 정보 입력

  1. 데이터셋 이름: 알아보기 쉬운 이름 입력
  2. 설명 (선택): 데이터셋에 대한 간단한 설명
  3. 파일/폴더 선택: 데이터셋 폴더 또는 압축 파일 선택

업로드 시작

"생성" 버튼을 클릭하여 업로드를 시작합니다.

학습 코드에서 사용

업로드한 데이터셋은 학습 실행 시 /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만 포함합니다. valtrain2017로 설정하거나 YOLO가 자동으로 split 수행하도록 할 수 있습니다.

자세한 내용: YOLO 튜토리얼

폴더 구조 핵심

업로드한 폴더의 최상위 디렉토리 이름/data 아래에 그대로 마운트됩니다. 학습 코드에서 이 이름을 참조하세요.

Empty Dataset 생성

용도

런타임에 데이터셋을 다운로드하는 경우 (예: MNIST) Empty Dataset을 생성합니다.

자세한 내용은 데이터셋 개념을 참고하세요.

생성 방법

  1. "데이터셋 생성" 버튼 클릭
  2. 이름 입력 (예: "empty")
  3. 파일을 선택하지 않고 "생성" 버튼 클릭

문제 해결

경로 오류 (학습 시)

증상:

FileNotFoundError: [Errno 2] No such file or directory: '/data/my-dataset/train'

해결:

  1. 학습 코드에서 참조하는 데이터셋 경로가 업로드한 폴더 이름과 일치하는지 확인
  2. 업로드한 폴더 구조 확인: 최상위 디렉토리가 올바른지 검토
  3. Platform에서 선택한 데이터셋이 맞는지 확인
  4. YOLO 사용 시: coco128.yamltrain: images/train2017 경로가 실제 폴더 구조와 일치하는지 확인

다음 단계

데이터셋 업로드가 완료되었다면:

  1. MNIST 튜토리얼: Empty Dataset 사용 예시 (런타임 다운로드)
  2. YOLO 튜토리얼: 실제 데이터셋 업로드 및 YAML 설정
  3. 학습 이미지 업로드: CLI 방식 또는 Docker 방식