Indoor vs outdoor image classification for the course "Selected Topics in Deep Learning".
My solution pipeline:
- Build a candidate image pool from WIT.
- Label a small gold set manually (i did about 1500 images).
- Split gold data into train/val/test.
- Pseudo-label the remaining pool with CLIP.
- Train and compare two ResNet50 variants (frozen logistic head vs full fine-tune).
- Train final frozen model on pool + gold train/val and evaluate on held-out gold test.
Run commands from the project root.
python -m pip install -r requirements.txtpython scripts/create_candidate_pool.py --output_dir pool --target_total 20000python scripts/label_app.py --input_dir pool --output_csv labels_gold.csv --limit 500python scripts/split_gold.py --input_csv labels_gold.csv --out_dir pool/splits --test_size 200 --val_size 160 --copy_imagespython scripts/pseudo_label_pool.py --pool_dir pool --splits_dir pool/splits --train_dir train_set --val_dir val_setpython scripts/train_resnet.py --train_dir train_set --val_dir val_set --epochs 10 --batch_size 32 --lr 3e-4 --weight_decay 1e-4 --num_workers 0 --seed 42 --freeze_backbone --use_gold --gold_splits_dir pool/splits --output_dir checkpoints/baseline_logisticpython scripts/train_resnet.py --train_dir train_set --val_dir val_set --epochs 10 --batch_size 32 --lr 3e-4 --weight_decay 1e-4 --num_workers 0 --seed 42 --use_gold --gold_splits_dir pool/splits --output_dir checkpoints/full_fine_tunepython scripts/train_final_resnet.py --pool_dir pool --gold_splits_dir pool/splits --epochs 12 --batch_size 32 --lr 3e-4 --weight_decay 1e-4 --num_workers 0 --seed 42 --output_dir checkpoints/final_logisticOpen and run all cells in:
Notebook generates final predictions file:



