File size: 2,390 Bytes
af59988
 
 
 
 
 
 
e5cff8a
af59988
 
 
 
 
 
 
 
 
e5cff8a
af59988
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""
Configuration constants for the Pneumonia Detection project.
All hyperparameters and paths are defined here for easy modification.
"""

from pathlib import Path


# Project Paths
PROJECT_ROOT = Path(__file__).parent.parent
DATA_DIR = PROJECT_ROOT / "data" / "raw"
PROCESSED_DIR = PROJECT_ROOT / "data" / "processed"
MODEL_DIR = PROJECT_ROOT / "models"
OUTPUT_DIR = PROJECT_ROOT / "outputs"
FIGURES_DIR = OUTPUT_DIR / "figures"
LOGS_DIR = OUTPUT_DIR / "logs"


# Data Configuration
IMAGE_SIZE = 224  # EfficientNet-B0 input size
BATCH_SIZE = 32
NUM_WORKERS = 4  # DataLoader workers

# ImageNet normalization (required for pretrained models)
IMAGENET_MEAN = [0.485, 0.456, 0.406]
IMAGENET_STD = [0.229, 0.224, 0.225]

# Class labels
CLASS_NAMES = ["NORMAL", "PNEUMONIA"]
NUM_CLASSES = 1  # Binary classification with sigmoid

# Model Configuration
MODEL_NAME = "efficientnet_b0"
DROPOUT_RATE = 0.3
PRETRAINED = True

# Training Configuration - Stage 1 (Frozen Backbone)
STAGE1_EPOCHS = 5
STAGE1_LR = 1e-4
STAGE1_FREEZE_BACKBONE = True

# Training Configuration - Stage 2 (Fine-tuning)
STAGE2_EPOCHS = 15
STAGE2_LR = 1e-5
STAGE2_FREEZE_BACKBONE = False

# Optimizer Configuration
WEIGHT_DECAY = 1e-4
BETAS = (0.9, 0.999)

# Scheduler Configuration
SCHEDULER_PATIENCE = 3
SCHEDULER_FACTOR = 0.5
SCHEDULER_MIN_LR = 1e-7

# Early Stopping Configuration
EARLY_STOP_PATIENCE = 7
EARLY_STOP_MIN_DELTA = 0.001

# Model Checkpointing
CHECKPOINT_PATH = MODEL_DIR / "best_model.pt"
SAVE_BEST_ONLY = True
MONITOR_METRIC = "val_loss"

# Weights & Biases Configuration
WANDB_PROJECT = "pneumonia-detection"
WANDB_ENTITY = None  # Set to your W&B username if needed

# Inference Configuration
CONFIDENCE_THRESHOLD = 0.5  # For binary classification
GRADCAM_TARGET_LAYER = "features"  # EfficientNet feature extractor

# Random Seed (for reproducibility)
SEED = 42


def create_directories():
    """Create all necessary directories if they don't exist."""
    for directory in [DATA_DIR, PROCESSED_DIR, MODEL_DIR, FIGURES_DIR, LOGS_DIR]:
        directory.mkdir(parents=True, exist_ok=True)


if __name__ == "__main__":
    # Print configuration for verification
    print(f"Project Root: {PROJECT_ROOT}")
    print(f"Data Directory: {DATA_DIR}")
    print(f"Model Directory: {MODEL_DIR}")
    print(f"Image Size: {IMAGE_SIZE}")
    print(f"Batch Size: {BATCH_SIZE}")
    print(f"Model: {MODEL_NAME}")