Indoor vs outdoor image classification using TensorFlow/Keras and EfficientNet.
- Consolidated repeated inference logic into a reusable module:
image_classification/. - Refactored all scripts into robust CLIs with argument validation.
- Removed deprecated training APIs (
fit_generator) and added validation + early stopping. - Fixed evaluation correctness (
classification_reportnow receivesy_true, y_predin proper order). - Cleaned dependency definitions and added a practical
.gitignore.
train.py: model trainingpred.py: single-image inferencerun_evaluation.py: class-folder evaluation + CSV reportunit_test.py: quick benchmark check on one indoor and one outdoor imageimage_classification/inference.py: shared prediction utilities
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txttrain.py expects:
images/
indoor/
img1.jpg
...
outdoor/
img2.jpg
...
python train.py \
--train-dir ./images \
--output-dir ./training_1 \
--epochs 10 \
--batch-size 16Model output is saved to ./training_1/saved_model.keras.
python pred.py \
--input ./test_data/indoor/benchmark_in.jpg \
--model-path ./training_1/saved_model.keras \
--threshold 0.5python run_evaluation.py \
--class_1 ./test_data/indoor \
--class_2 ./test_data/outdoor \
--model-path ./training_1/saved_model.keras \
--out-path ./evaluation.csvpython unit_test.py \
--indoor ./test_data/indoor/benchmark_in.jpg \
--outdoor ./test_data/outdoor/benchmark_out.jpg \
--model-path ./training_1/saved_model.kerasThis command returns non-zero if predictions do not match expected classes.