Modern image captioning stack for the COCO 2014 dataset. The repo bundles ViT/CNN encoders, RNN/LSTM/Transformer decoders, evaluation utilities, attention visualizations, and ready-to-run job scripts.
- Create a virtual environment and install dependencies:
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt - Download the COCO 2014 images and captions so the tree looks like:
data/ annotations/captions_{train,val}2014.json images/{train,val}2014/
python scripts/train_subset.py \
--cocoapi-loc data \
--tokenizer-name bert-base-uncased \
--subset-size 64 \
--epochs 1 \
--max-steps 25 \
--save-path artifacts/coco_cnn_rnn.pt \
--log-dir runs/subsetKey flags:
--encoder-arch {cnn,vit}and--decoder-arch {rnn,lstm,transformer}switch backbones/decoders.--train-backbone/--freeze-backbonecontrol finetuning.--num-predictionsand--eval-temperaturecollect quick metrics each epoch.
All SLURM-friendly launchers live in jobs/. Copy one (e.g. jobs/job_aspire.sh for ViT+LSTM or jobs/job_aspire_transformer_gpt2.sh for ViT+GPT2) and adapt queues, checkpoints, and hyperparameters before submitting.
python scripts/infer_val.py \
--checkpoint artifacts/coco_cnn_rnn.pt \
--cocoapi-loc data \
--num-samples 8 \
--output-grid runs/val_preds/latest.pngThe script reuses the tokenizer stored inside the checkpoint (override with --tokenizer-name). Pass --visualize-attention to dump per-token overlays next to the collage.
python scripts/caption_image.py \
--checkpoint artifacts/coco_cnn_rnn.pt \
--image path/to/image.jpg \
--max-length 32 \
--attention-dir runs/captions/attentionGives a console caption and optional attention PNGs when --attention-dir is provided.
python scripts/infer_attention_visualization.py \
--checkpoint pretrain/coco_vit_transformer.pt \
--cocoapi-loc data \
--tokenizer-name gpt2 \
--num-samples 4 \
--output-dir runs/attention_vizOutputs side-by-side overlays per token plus text summaries. Use --layer-to-viz to inspect a specific decoder layer and --max-viz-tokens / --tokens-per-row to control collage size.
The model learns to attend to relevant image regions when generating each word:
Example: "a plane flying through the air with clouds in the background" - showing attention weights for each token
Sample predictions on COCO validation images:
Diverse captions generated for various scenes from the COCO dataset
Training writes summaries under runs/. Point TensorBoard at the parent directory or a specific experiment:
tensorboard --logdir runs
The runs/ directory matches the value passed via --log-dir in scripts/train_subset.py.
models/: encoders, decoders, and theCaptioningModelwrapper.dataset.py,dataloader.py: COCO glue + HuggingFace tokenization.scripts/: training, evaluation, inference, and visualization entry points.jobs/: cluster launchers relocated from the repo root.evaluation/: BLEU/CIDEr/METEOR metrics.artifacts/: checkpoints.