Views
No views yet
environment.yaml.environment.yaml file.conda env create -f environment.yamlconda activate Interpretable-SONAR-Image-Classifierenvironment.yaml file.data_loader.pypython data_loader.py --path <path_to_data> --target_folder <path_to_target_folder> --dim <dimension> --batch_size <batch_size> --num_workers <num_workers> [--augment_data]--path: Path to the raw data.--target_folder: Directory for processed data.--dim: Image resize dimension (e.g., 224 for 224x224).--batch_size: Batch size for data loading.--num_workers: Number of workers for data loading.--augment_data (optional): Enables data augmentation.python data_loader.py --path "./dataset" --target_folder "./processed_data" --dim 224 --batch_size 32 --num_workers 4 --augment_data1├── Dataset (Raw)
2 ├── class_name_1
3 │ └── *.jpg
4 ├── class_name_2
5 │ └── *.jpg
6 ├── class_name_3
7 │ └── *.jpg
8 └── class_name_4
9 └── *.jpgtrain.pypython train.py --base_models <model_names> --shape <shape> --data_path <data_path> --log_dir <log_dir> --model_dir <model_dir> --epochs <epochs> --optimizer <optimizer> --learning_rate <learning_rate> --batch_size <batch_size>--base_models: Comma-separated list of base models (e.g., "VGG16,DenseNet121").--shape: Image shape, e.g., 224 224 3.--data_path: Path to processed data.--log_dir: Directory for logs.--model_dir: Directory to save models.--epochs: Number of epochs.--optimizer: Optimizer type (adam or sgd).--learning_rate: Learning rate.--batch_size: Training batch size.--patience: Early stopping patience.python train.py --base_models "VGG16,DenseNet121" --shape 224 224 3 --data_path "./processed_data" --log_dir "./logs" --model_dir "./models" --epochs 100 --optimizer "adam" --learning_rate 0.0001 --batch_size 32test.pypython test.py --data_path <data_path> --base_model_name <base_model_name> --model_path <model_path> --models_folder_path <models_folder_path> --log_dir <log_dir>--models_dir (optional): Path to the models directory.--model_path: Specific model path (.h5 file).--img_path: Image file path for testing.--test_dir: Test dataset directory.--train_dir: Directory for training data.--log_dir: Directory for logs.python test.py --model_path "./models/vgg16_model.h5" --test_dir "./test_data" --train_dir "./data/train" --log_dir "./logs"predict.pypython predict.py --model_path <model_path> --img_path <img_path> --train_dir <train_dir>--model_path: Model file path.--img_path: Image file path.--train_dir: Directory for label decoding.python predict.py --model_path "./models/vgg16_model.h5" --img_path "./images/test_image.jpg" --train_dir "./data/train"classify_image_and_explain.pypython classify_image_and_explain.py --image_path <image_path> --model_path <model_path> --train_directory <train_directory> --num_samples <num_samples> --num_features <num_features> --segmentation_alg <segmentation_alg> --kernel_size <kernel_size> --max_dist <max_dist> --ratio <ratio> --max_evals <max_evals> --batch_size <batch_size> --explainer_types <explainer_types> --output_folder <output_folder>--image_path: Path to the image file.--model_path: Model file path.--train_directory: Directory of training images for label decoding.--num_samples: Sample count for LIME.--num_features: Feature count for LIME.--segmentation_alg: Segmentation algorithm for LIME.--kernel_size: Kernel size for segmentation.--max_dist: Max distance for segmentation.--ratio: Ratio for segmentation.--max_evals: Max evaluations for SHAP.--batch_size: Batch size for SHAP.--explainer_types: Comma-separated list of explainers (lime, shap, gradcam).--output_folder: Directory to save explanations.python classify_image_and_explain.py --image_path "./images/test_image.jpg" --model_path "./models/model.h5" --train_directory "./data/train" --num_samples 300 --num_features 100 --segmentation_alg "quickshift" --kernel_size 4 --max_dist 200 --ratio 0.2 --max_evals 400 --batch_size 50 --explainer_types "lime,gradcam" --output_folder "./explanations"subprocess module. Here is an example of how to do this for each script:1import subprocess
2
3# Run data_loader.py
4subprocess.run([
5 "python", "data_loader.py",
6 "--path", "./data",
7 "--target_folder", "./processed_data",
8 "--dim", "224",
9 "--batch_size", "32",
10 "--num_workers", "4",
11 "--augment_data"
12])
13
14# Run train.py
15subprocess.run([
16 "python", "train.py",
17 "--base_models", "VGG16,ResNet50",
18 "--shape", "224, 224, 3",
19 "--data_path", "./data",
20 "--log_dir", "./logs",
21 "--model_dir", "./models",
22 "--epochs", "100",
23 "--optimizer", "adam",
24 "--learning_rate", "0.001",
25 "--batch_size", "32",
26 "--patience", "10"
27])
28
29# Run test.py
30subprocess.run([
31 "python", "test.py",
32 "--models_dir", "./models",
33 "--img
34
35_path", "./images/test_image.jpg",
36 "--train_dir", "./data/train",
37 "--log_dir", "./logs"
38])
39
40# Run classify_image_and_explain.py
41subprocess.run([
42 "python", "classify_image_and_explain.py",
43 "--image_path", "./images/test_image.jpg",
44 "--model_path", "./models/model.h5",
45 "--train_directory", "./data/train",
46 "--num_samples", "300",
47 "--num_features", "100",
48 "--segmentation_alg", "quickshift",
49 "--kernel_size", "4",
50 "--max_dist", "200",
51 "--ratio", "0.2",
52 "--max_evals", "400",
53 "--batch_size", "50",
54 "--explainer_types", "lime,gradcam",
55 "--output_folder", "./explanations"
56])@article{natarajan2024underwater,
title={Underwater SONAR Image Classification and Analysis using LIME-based Explainable Artificial Intelligence},
author={Natarajan, Purushothaman and Nambiar, Athira},
journal={arXiv preprint arXiv:2408.12837},
year={2024}
}