File size: 1,717 Bytes
af61511
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
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