ImageNet 데이터셋은 Train, Validation, Test 세 가지 파트로 나뉘며, 아래와 같이 구성됩니다:
ImageNet 데이터셋 구성
1. Train (학습 데이터셋):
• 샘플 수: 1,281,167개
• 약 1,000개의 클래스(카테고리)로 나뉘어 있습니다.
• 클래스당 약 1,281개의 이미지가 있습니다.
2. Validation (검증 데이터셋):
• 샘플 수: 50,000개
• 각 클래스당 50개의 이미지가 포함되어 있습니다.
3. Test (테스트 데이터셋):
• 샘플 수: 100,000개
• 라벨이 제공되지 않으며, 모델 평가를 위한 용도로 사용됩니다.
ImageNet download huggingface
250908 update
huggingface API token은 미리 copy paste 하기.
import os
from datasets import load_dataset
from huggingface_hub.hf_api import HfFolder
# (이미 토큰 저장된 상태라면 반복 불필요)
HfFolder.save_token("your_token")
# 데이터 로드 (이미 계속 있는 객체라면 생략 가능)
dataset = load_dataset("ILSVRC/imagenet-1k")
# 저장 폴더 구조 지정
output_base = "./imagenet_saved"
splits = ["train", "validation", "test"]
for split in splits:
ds = dataset[split]
out_dir = os.path.join(output_base, split)
os.makedirs(out_dir, exist_ok=True)
print(f"Saving '{split}' split to {out_dir}")
# 이미지 저장 (각 이미지를 파일로)
for idx, example in enumerate(ds):
img = example["image"] # PIL.Image 객체, 이미지컬럼 자동 디코딩
label = example["label"]
label_dir = os.path.join(out_dir, str(label))
os.makedirs(label_dir, exist_ok=True)
# RGBA 이미지를 RGB로 변환
if img.mode in ("RGBA", "P"):
img = img.convert("RGB")
img_path = os.path.join(label_dir, f"{idx:08d}.jpg")
img.save(img_path)
print(f" -- Saved {len(ds)} images for split '{split}'")
# 또는, Dataset 형태 그대로 저장하려면:
for split in splits:
ds = dataset[split]
ds.save_to_disk(os.path.join(output_base, f"hf_{split}"))
print(f"Dataset '{split}' saved via save_to_disk()")
데이터셋 세부 구조 확인 방법
Hugging Face Datasets를 사용할 경우
아래 코드를 통해 데이터셋의 각 파트 개수를 확인할 수 있습니다:
from datasets import load_dataset
# ImageNet 데이터셋 로드
dataset = load_dataset("ILSVRC/imagenet-1k", cache_dir="/mnt/data", trust_remote_code=True)
# 각 데이터셋 개수 출력
print(f"Train set size: {len(dataset['train'])}")
print(f"Validation set size: {len(dataset['validation'])}")
print(f"Test set size: {len(dataset['test'])}")
데이터셋 크기 확인 결과
Train set size: 1281167
Validation set size: 50000
Test set size: 100000
• ImageNet 데이터셋은 매우 큰 크기를 가지고 있으므로, 전체 데이터를 다루기 어려운 경우 Tiny-ImageNet과 같은 작은 버전을 사용하기도 합니다.
• Tiny-ImageNet 구성:
• Train: 100,000개 (200 클래스, 클래스당 500개)
• Validation: 10,000개 (200 클래스, 클래스당 50개)
• Test: 10,000개
Tiny ImageNet을 다운로드하고 사용할 수 있도록 설정하는 방법은 아래와 같습니다:
1. Tiny ImageNet 데이터셋 다운로드
방법 1: wget 명령어 사용 (Linux)
터미널에서 아래 명령어를 실행합니다:
wget http://cs231n.stanford.edu/tiny-imagenet-200.zip
방법 2: 웹 브라우저로 다운로드 (Windows/Mac)
아래 링크를 복사하여 브라우저 주소창에 입력하면 다운로드됩니다:
http://cs231n.stanford.edu/tiny-imagenet-200.zip
2. 압축 해제
다운로드한 파일(tiny-imagenet-200.zip)의 압축을 풉니다:
unzip tiny-imagenet-200.zip
3. 데이터 구조 변경
TensorFlow의 ImageDataGenerator를 사용하려면 디렉토리 구조를 조정해야 합니다. 아래 Python 코드를 사용하세요:
import os
import shutil
import pandas as pd
def preprocess_tiny_imagenet():
BASE = './tiny-imagenet-200'
train_src = os.path.join(BASE, 'train')
val_src = os.path.join(BASE, 'val')
# Preprocess 디렉토리 생성
train_dest = os.path.join(BASE, 'train_preprocess')
val_dest = os.path.join(BASE, 'valid_preprocess')
os.makedirs(train_dest, exist_ok=True)
os.makedirs(val_dest, exist_ok=True)
# Train 데이터 복사
for class_dir in os.listdir(train_src):
class_path = os.path.join(train_src, class_dir, 'images')
target_path = os.path.join(train_dest, class_dir)
os.makedirs(target_path, exist_ok=True)
for image in os.listdir(class_path):
shutil.copy(os.path.join(class_path, image), target_path)
# Validation 데이터 복사
val_annotations = pd.read_csv(
os.path.join(val_src, 'val_annotations.txt'),
sep='\t', header=None,
names=['img', 'label', 'bbox1', 'bbox2', 'bbox3', 'bbox4']
)
for _, row in val_annotations.iterrows():
label_dir = os.path.join(val_dest, row['label'])
os.makedirs(label_dir, exist_ok=True)
shutil.copy(os.path.join(val_src, 'images', row['img']), label_dir)
if __name__ == "__main__":
preprocess_tiny_imagenet()
4. TensorFlow ImageDataGenerator로 데이터 로드
위의 코드를 실행한 뒤, 데이터셋을 불러오는 코드입니다:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 경로 설정
train_dir = './tiny-imagenet-200/train_preprocess'
valid_dir = './tiny-imagenet-200/valid_preprocess'
# 데이터 증강 및 전처리
train_datagen = ImageDataGenerator(rescale=1/255)
valid_datagen = ImageDataGenerator(rescale=1/255)
# 데이터 로드
BATCH_SIZE = 32
IMG_SIZE = (64, 64)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=IMG_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical',
shuffle=True
)
valid_generator = valid_datagen.flow_from_directory(
valid_dir,
target_size=IMG_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical',
shuffle=False
)
• 다운로드 및 구조 변경을 마친 후, 학습 모델에서 데이터를 사용할 준비가 됩니다.
• 위 코드는 Linux, Mac, Windows 모두에서 사용할 수 있습니다.
'AI > Dataset' 카테고리의 다른 글
| [Dataset] PASCAL VOC Segmentation dataset download 하는법 (0) | 2026.04.10 |
|---|---|
| [Dataset] ADE20K, NYU Depth V2 download (0) | 2026.02.12 |
| [Dataset] Inria Aerial Image Labeling Dataset 설명, download 다운로드 하는 법, .tif 파일 시각화 보는법 (0) | 2025.10.14 |
| [Dataset] Holopix50k (0) | 2025.05.01 |
| [Dataset] COCO 2017 dataset 쉽게 다운받는법, 터미널 명령어로 다운받기, 특징, 포맷, 종류 (0) | 2024.11.06 |