CaptionIQ / src /config.py
pavanpraneeth's picture
Upload folder using huggingface_hub
290f366 verified
Raw
History Blame Contribute Delete
5.08 kB
"""
CaptionIQ β€” Central Configuration
All hyperparameters, paths, and constants in one place.
"""
import os
# ──────────────────────────────────────────────
# Paths
# ──────────────────────────────────────────────
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_DIR = os.path.join(BASE_DIR, "data")
MODELS_DIR = os.path.join(BASE_DIR, "models")
OUTPUTS_DIR = os.path.join(BASE_DIR, "outputs")
# Raw dataset paths (Flickr8K)
FLICKR_IMAGES_DIR = os.path.join(DATA_DIR, "Flickr8k_Dataset")
FLICKR_TEXT_DIR = os.path.join(DATA_DIR, "Flickr8k_text")
# Processed data paths
CAPTIONS_FILE = os.path.join(DATA_DIR, "captions_clean.txt")
TOKENIZER_FILE = os.path.join(DATA_DIR, "tokenizer.pkl")
TRAIN_IMAGES_FILE = os.path.join(DATA_DIR, "train_images.txt")
VAL_IMAGES_FILE = os.path.join(DATA_DIR, "val_images.txt")
TEST_IMAGES_FILE = os.path.join(DATA_DIR, "test_images.txt")
# Feature files
VGG16_FEATURES_FILE = os.path.join(DATA_DIR, "vgg16_features.pkl")
VGG19_FEATURES_FILE = os.path.join(DATA_DIR, "vgg19_features.pkl")
# Model checkpoint paths
VGG16_MODEL_FILE = os.path.join(MODELS_DIR, "model_vgg16.h5")
VGG19_MODEL_FILE = os.path.join(MODELS_DIR, "model_vgg19.h5")
# Output paths
VGG16_LOSS_PLOT = os.path.join(OUTPUTS_DIR, "loss_vgg16.png")
VGG19_LOSS_PLOT = os.path.join(OUTPUTS_DIR, "loss_vgg19.png")
BLEU_RESULTS_FILE = os.path.join(OUTPUTS_DIR, "bleu_results.json")
# ──────────────────────────────────────────────
# Image parameters
# ──────────────────────────────────────────────
IMAGE_SIZE = 224 # VGG input requirement
# ──────────────────────────────────────────────
# Model hyperparameters
# ──────────────────────────────────────────────
EMBED_DIM = 256 # Word embedding dimension
LSTM_UNITS = 512 # LSTM hidden units
DROPOUT_RATE = 0.3 # Dropout rate (reduced from 0.5)
FEATURE_DIM = 512 # VGG spatial feature channels
FEATURE_LOCATIONS = 49 # 7x7 spatial positions from block5_pool
ATTENTION_DIM = 256 # Bahdanau attention hidden dim
# ──────────────────────────────────────────────
# Vocabulary
# ──────────────────────────────────────────────
MIN_WORD_FREQ = 5 # Drop words appearing fewer than this many times
# ──────────────────────────────────────────────
# Training hyperparameters
# ──────────────────────────────────────────────
EPOCHS = 30 # 30 is enough; early stopping handles the rest
BATCH_SIZE = 64 # 2x bigger batch = 2x fewer steps = 2x faster
LEARNING_RATE = 0.001
# Callbacks
EARLY_STOP_PATIENCE = 6 # EarlyStopping patience (epochs)
LR_PATIENCE = 3 # ReduceLROnPlateau patience (epochs)
LR_FACTOR = 0.5 # LR reduction factor
# ──────────────────────────────────────────────
# Inference
# ──────────────────────────────────────────────
BEAM_WIDTH = 5
MAX_LENGTH = 34 # Maximum caption length in tokens
# ──────────────────────────────────────────────
# Special tokens
# ──────────────────────────────────────────────
START_TOKEN = "startseq"
END_TOKEN = "endseq"
# ──────────────────────────────────────────────
# Dataset splits
# ──────────────────────────────────────────────
TRAIN_SIZE = 6000
VAL_SIZE = 1000
TEST_SIZE = 1000
# ──────────────────────────────────────────────
# Create directories if they don't exist
# ──────────────────────────────────────────────
for d in [DATA_DIR, MODELS_DIR, OUTPUTS_DIR]:
os.makedirs(d, exist_ok=True)