Jog-sama's picture
initial deployment
af61511
"""
Central configuration for ScribblBot.
All hyperparameters, paths, and constants live here.
"""
from pathlib import Path
# Paths
PROJECT_ROOT = Path(__file__).parent
DATA_DIR = PROJECT_ROOT / "data"
RAW_DIR = DATA_DIR / "raw"
PROCESSED_DIR = DATA_DIR / "processed"
OUTPUTS_DIR = DATA_DIR / "outputs"
MODELS_DIR = PROJECT_ROOT / "models"
for _d in [RAW_DIR, PROCESSED_DIR, OUTPUTS_DIR, MODELS_DIR]:
_d.mkdir(parents=True, exist_ok=True)
# Classes
# 15 visually distinct Quick Draw categories
CLASSES = [
"cat", "dog", "pizza", "bicycle", "house",
"sun", "tree", "car", "fish", "butterfly",
"guitar", "hamburger", "airplane", "banana", "star",
]
NUM_CLASSES = len(CLASSES)
CLASS_EMOJIS = {
"cat": "🐱", "dog": "🐶", "pizza": "🍕", "bicycle": "🚲",
"house": "🏠", "sun": "☀️", "tree": "🌳", "car": "🚗",
"fish": "🐟", "butterfly": "🦋", "guitar": "🎸", "hamburger": "🍔",
"airplane": "✈️", "banana": "🍌", "star": "⭐",
}
# Dataset
TRAIN_SAMPLES_PER_CLASS = 2000 # keeps training fast (~30k total)
TEST_SAMPLES_PER_CLASS = 400 # solid eval set (~6k total)
IMG_SIZE = 28 # Quick Draw native resolution
# Quick Draw public GCS bucket
QUICKDRAW_URL = (
"https://storage.googleapis.com/quickdraw_dataset/full/numpy_bitmap/{cls}.npy"
)
# Deep Model
DEEP_BATCH_SIZE = 128
DEEP_EPOCHS = 15
DEEP_LR = 1e-3
DEEP_WEIGHT_DECAY = 1e-4
# Classical Model
RF_N_ESTIMATORS = 200
RF_MAX_DEPTH = None
HOG_ORIENTATIONS = 9
HOG_PIXELS_PER_CELL = (4, 4)
HOG_CELLS_PER_BLOCK = (2, 2)
# Experiment: training set size sensitivity
EXPERIMENT_FRACTIONS = [0.1, 0.25, 0.5, 0.75, 1.0]
EXPERIMENT_EPOCHS = 10 # shorter runs for the sweep