# NeuroLens AI Project Documentation ## 1. Project Overview NeuroLens AI is a brain MRI analysis project focused on tumor detection, model comparison, explainability, and segmentation research. The repository combines a browser-based dashboard, a Streamlit interface, TensorFlow model training scripts, evaluation utilities, Grad-CAM explainability, and advanced segmentation experiments. The project is intended for research, learning, and prototype development. It is not a certified clinical diagnostic system and should not be used as the only basis for medical decisions. ## 2. Objectives - Detect whether an uploaded brain MRI indicates tumor presence. - Compare multiple classification model families: CNN, transfer learning, and Vision Transformer. - Provide interpretable outputs through model metrics and Grad-CAM visualizations. - Support segmentation experiments using U-Net style architectures. - Provide reproducible training, evaluation, k-fold validation, ablation, and robustness workflows. ## 3. Repository Structure ```text . |-- app.py # Streamlit dashboard entry point |-- dashboard.py # Local HTTP server for the HTML dashboard |-- web_dashboard/ # Frontend dashboard files |-- src/ # Core ML, training, evaluation, and segmentation code |-- config.yaml # Reference configuration for segmentation experiments |-- requirements.txt # Python package requirements |-- README.md # Quick-start project overview |-- LICENSE # MIT license `-- Documentation/ # Additional report assets ``` ## 4. Main Components ### 4.1 HTML Dashboard The HTML dashboard lives in `web_dashboard/` and is served by `dashboard.py`. It provides a polished interface for image upload, model selection, metrics display, and prediction results. Key files: - `web_dashboard/index.html` - `web_dashboard/style.css` - `web_dashboard/app.js` - `dashboard.py` The dashboard backend exposes local endpoints for model metadata and image prediction. It looks for model weights and metrics in these folders: - `real_eval_fixed/` - `real_eval_current/` - `artifacts/` Expected classification weight path: ```text artifacts//best_weights.weights.h5 ``` where `` is `cnn`, `transfer`, or `vit`. ### 4.2 Streamlit App `app.py` provides an alternate Streamlit dashboard for model comparison and upload-driven prediction. It uses the same broad model families and artifact structure as the HTML dashboard. ### 4.3 Classification Models Classification models are defined in `src/models.py` and trained through `src/train.py`. Supported model choices: - `cnn`: custom convolutional neural network - `transfer`: transfer learning model - `vit`: Vision Transformer model Training output is saved under `artifacts//`. ### 4.4 Explainability Explainability utilities live in `src/explain.py` and `src/utils.py`. The dashboard can generate Grad-CAM overlays for supported convolutional models when trained weights are available. ### 4.5 Segmentation Research The active segmentation pipeline lives in: - `src/segmentation_torch.py` - PyTorch Attention U-Net (GPU) - `src/train_segmentation_torch.py` - GPU training script - `generate_pseudo_masks.py` - synthesises masks from the classification dataset PyTorch is used here because TF 2.21 has no native-Windows GPU support; the rest of the project stays on TF/Keras for the classifiers. The reference TensorFlow framework is preserved for k-fold / ablation / robustness experimentation: - `src/segmentation_models.py` - U-Net / Attention U-Net / Res U-Net / Multi-modal U-Net (TF) - `src/train_segmentation.py` - TF training script - `src/kfold_validation.py`, `src/ablation_study.py`, `src/robustness_analysis.py` Supported segmentation model variants: - Attention U-Net (default - active PyTorch pipeline) - U-Net (TF reference) - Residual U-Net (TF reference) - Multi-modal U-Net (TF reference) ### 4.6 Status of "Advanced" Modules (3D MRI, Federated Learning, SSL) `src/advanced_models.py` defines `MRI3DTransformer`, `FederatedLearningServer/Client`, and `SelfSupervisedPretrainer`. These are reference implementations: - 3D ViT: now uses a real `Conv3D`-strided patch embedding (was a flat `Reshape` previously). Still requires volumetric data the repo does not ship. - Federated learning: FedAvg aggregation is correct; evaluation now uses a held-out set when registered via `set_eval_data()` (was leaking client train data into eval). - Self-supervised: rotation / jigsaw / **SimCLR NT-Xent contrastive** pre-training (the contrastive branch previously used an incoherent sigmoid + sparse_categorical_crossentropy combination - replaced with a real NT-Xent loss and two-view augmented batching). None of these are invoked by `train.py` or the dashboards; they are libraries waiting for the appropriate datasets and a driver script. ## 5. Environment Setup Create a virtual environment: ```bash python -m venv .venv ``` Activate it on Windows: ```bash .venv\Scripts\activate ``` Install dependencies: ```bash python -m pip install --upgrade pip python -m pip install -r requirements.txt ``` ## 6. Running the Dashboards ### 6.1 HTML Dashboard ```bash python dashboard.py --port 8501 ``` Open the dashboard at: ```text http://localhost:8501/ ``` ### 6.2 Streamlit Dashboard ```bash streamlit run app.py ``` ## 7. Training Workflows ### 7.1 Classification Training Example: ```bash python src/train.py --model cnn --dataset dataset --epochs 10 --batch_size 32 --output artifacts ``` Common options: - `--model`: choose `cnn`, `transfer`, or `vit` - `--dataset`: dataset directory - `--epochs`: number of training epochs - `--batch_size`: batch size - `--learning_rate`: optimizer learning rate - `--output`: artifact output directory ### 7.2 Segmentation Training (PyTorch, GPU) ```bash # 1. Generate pseudo-masks once (Otsu on tumor JPGs; empty masks for no_tumor): python generate_pseudo_masks.py --source dataset_real --output dataset_real --clean # 2. Train Attention U-Net on GPU: python src/train_segmentation_torch.py --data_dir dataset_real \ --epochs 25 --batch_size 8 --image_size 256 --base_filters 32 --patience 6 ``` Outputs land in `segmentation_artifacts/attention_unet/`. Useful flags: - `--device {cuda,cpu}`: target device (auto-detect; CUDA used when available) - `--learning_rate`: Adam learning rate (default 1e-3) - `--dropout`: dropout rate (default 0.2) - `--dice_weight`: dice weight in the combined Dice + BCE loss (default 0.6) - `--num_workers`: DataLoader workers; default 0 is safest on Windows ### 7.3 Reference TF Segmentation Training ```bash python src/train_segmentation.py --data_dir dataset_real --model_type attention_unet \ --epochs 25 --batch_size 8 ``` Useful TF flags: - `--model_type`: `unet`, `attention_unet`, `res_unet`, or `multi_modal_unet` - `--image_size`: input image size - `--base_filters`: base convolution filter count - `--dropout_rate`: dropout rate - `--use_attention`: enable attention in supported models - `--use_kfold`: run k-fold validation - `--use_ablation`: run ablation experiments - `--save_dir`: output directory for segmentation artifacts ## 8. Evaluation Classification evaluation utilities are available in `src/evaluate.py`. Segmentation workflows include Dice coefficient, IoU, accuracy, precision, recall, F1 score, specificity, and threshold-based analysis where supported. Metrics can be stored as JSON files and consumed by the dashboards for comparison views. ## 9. Dataset Expectations The project expects local image datasets such as `dataset/`, `dataset_real/`, or source data folders. Dataset folders may be large and are usually best managed outside normal source-control workflows unless the project intentionally includes sample data. For classification, datasets should be organized so TensorFlow data loaders can infer labels from folder structure. For segmentation, image-mask pairing should follow the assumptions in `src/train_segmentation.py` and related preprocessing utilities. ## 10. Artifact Management Recommended generated-output locations: - `artifacts/` for classification weights, histories, plots, and metrics - `real_eval_current/` and `real_eval_fixed/` for selected evaluation snapshots - `segmentation_models/` or a configured output folder for segmentation runs Large generated files should be reviewed before committing to GitHub. ## 11. Limitations - Model quality depends heavily on dataset quality, labeling, preprocessing, and validation strategy. - MRI datasets can vary across scanners, protocols, institutions, and patient populations. - Grad-CAM highlights model attention, not guaranteed clinical causality. - Prototype dashboards do not replace clinical workflows, radiologist review, or regulatory validation. ## 12. Future Improvements - Add automated tests for data loading, prediction endpoints, and model utility functions. - Add a smaller sample dataset or mock artifacts for reproducible demos. - Add CI checks for formatting and basic import validation. - Improve artifact versioning and experiment tracking. - Add clearer dataset preparation documentation for classification and segmentation tasks. ## 13. License NeuroLens AI is released under the MIT License. See `LICENSE` for details.