--- license: mit language: - en library_name: tensorflow tags: - tensorflow - keras - anomaly-detection - explainable-ai - vae-gan - computer-vision - industrial-ai - mvtec-ad - arxiv:2407.19951 --- # Explainable Anomaly Detection with VAE-GAN — TensorFlow Checkpoints Official TensorFlow/Keras VAE-GAN model checkpoints associated with the research paper: **Can I Trust My Anomaly Detection System? A Case Study Based on Explainable AI** **Muhammad Rashid, Elvio Amparore, Enrico Ferrari, and Damiano Verda** _2nd World Conference on eXplainable Artificial Intelligence (XAI 2024), Explainable Artificial Intelligence, Springer, pp. 243–254._ [Research Paper (Springer)](https://doi.org/10.1007/978-3-031-63803-9_13) | [arXiv](https://arxiv.org/abs/2407.19951) | [GitHub Implementation](https://github.com/rashidrao-pk/anomaly_detection_trust_case_study/tree/xai-2024-paper) ## Overview This model collection provides pretrained TensorFlow VAE-GAN checkpoints for reconstruction-based visual anomaly detection and explainability experiments. The research investigates whether anomaly detection systems make decisions for the correct visual reasons by combining: - **VAE-GAN:** Reconstruction-based anomaly detection - **LIME:** Local interpretable explanations - **SHAP:** Feature attribution and explanation analysis - **Jaccard similarity:** Quantitative comparison between explanations and ground-truth defect regions The associated experiments investigate the MVTec AD Screw and Hazelnut categories. ## Model Architecture The model architecture is defined in [`models.py`](https://github.com/rashidrao-pk/anomaly_detection_trust_case_study/blob/xai-2024-paper/models.py). | Component | Description | | ----------------- | ------------------------------------------------------------------------------------- | | Framework | TensorFlow / Keras | | Architecture | Variational Autoencoder–GAN | | Input | 128 × 128 × 3 RGB | | Latent dimension | 64 | | Encoder | Convolutional network producing latent mean, log variance, and sampled representation | | Decoder | Transposed-convolution reconstruction network | | Discriminator | Convolutional real/fake classifier | | Output | Reconstructed RGB image | | Checkpoint format | TensorFlow weight checkpoints | ## Available Checkpoints | MVTec AD Category | Training Checkpoint | Components | | ----------------- | ------------------------ | --------------------------------------------- | | Hazelnut | `hazelnut_VAE_GAN_30000` | Encoder, Decoder, Discriminator, VAE, VAE-GAN | | Screw | `screw_VAE_GAN_30000` | Encoder, Decoder, Discriminator, VAE, VAE-GAN | Each model component has a matching TensorFlow `.index` and `.data-00000-of-00001` file. The `30000` suffix is retained from the original checkpoint naming convention. ## Installation Clone the official research implementation and install its dependencies: ```bash git clone --branch xai-2024-paper \ https://github.com/rashidrao-pk/anomaly_detection_trust_case_study.git cd anomaly_detection_trust_case_study pip install -r requirements.txt pip install huggingface_hub ``` The original environment specifies TensorFlow 2.15.0 and Keras 2.15.0. This version combination is recommended for reproducing the saved checkpoints. ## Downloading the Model Weights You can download the model files directly from Hugging Face using `snapshot_download`: ```python from huggingface_hub import snapshot_download model_dir = snapshot_download( repo_id="rashidrao/AD_MVTec_XAI_TensorFlow", allow_patterns=[ "weights/hazelnut_VAE_GAN_30000/*" ] ) print("Downloaded to:", model_dir) ``` Replace `hazelnut` with `screw` to download the alternative category. ## Loading the TensorFlow Weights The original research implementation exposes model-building functions through `Model_VAE_GAN_functions` in `models.py`. For reconstruction-based inference, load the pretrained encoder and decoder: ```python from pathlib import Path import tensorflow as tf from huggingface_hub import snapshot_download from models import Model_VAE_GAN_functions CATEGORY = "hazelnut" LATENT_DIM = 64 IMAGE_SIZE = [128, 128] repo_dir = snapshot_download( repo_id="rashidrao/AD_MVTec_XAI_TensorFlow", allow_patterns=[ f"weights/{CATEGORY}_VAE_GAN_30000/*" ] ) checkpoint_dir = ( Path(repo_dir) / "weights" / f"{CATEGORY}_VAE_GAN_30000" ) encoder = Model_VAE_GAN_functions.get_encoder( latent_dim=LATENT_DIM, image_size=IMAGE_SIZE ) decoder = Model_VAE_GAN_functions.get_decoder( latent_dim=LATENT_DIM ) encoder.load_weights( str(checkpoint_dir / f"{CATEGORY}_VAE_GAN_30000_encoder") ) decoder.load_weights( str(checkpoint_dir / f"{CATEGORY}_VAE_GAN_30000_decoder") ) print("Encoder and decoder weights loaded.") ``` **Note:** Checkpoint prefixes must match the uploaded filenames exactly. The associated `.index` and `.data-*` files must remain together. ## Example: Reconstruct an Image After loading the encoder and decoder, the following example demonstrates reconstruction. ```python import numpy as np import tensorflow as tf from PIL import Image image = Image.open("test_image.png").convert("RGB") image = image.resize((128, 128)) x = np.asarray(image, dtype=np.float32) / 255.0 x = np.expand_dims(x, axis=0) # Encoder returns mean, log variance and sampled latent vector z_mean, z_log_var, z = encoder(x, training=False) # Use mean for a deterministic reconstruction reconstruction = decoder(z_mean, training=False) # Pixel-wise absolute reconstruction error anomaly_map = tf.reduce_mean( tf.abs(x - reconstruction), axis=-1 ) anomaly_score = tf.reduce_mean(anomaly_map) print("Anomaly score:", float(anomaly_score.numpy())) reconstructed_image = ( reconstruction.numpy()[0] * 255 ).clip(0, 255).astype(np.uint8) Image.fromarray(reconstructed_image).save( "reconstruction.png" ) ``` This example demonstrates reconstruction and a simple reconstruction-error score. For exact replication of the paper's reported anomaly detection and explainability results, refer to the original notebooks and scoring/evaluation procedures. ## Explainable AI Evaluation The accompanying research implementation provides experiments using LIME and SHAP to analyze anomaly detections and investigate whether explanation regions correspond to actual defects. Original experiment notebooks: - [Screw Experiment](https://github.com/rashidrao-pk/anomaly_detection_trust_case_study/blob/xai-2024-paper/AD_VAE_GAN_SCREW.ipynb) - [Hazelnut Experiment](https://github.com/rashidrao-pk/anomaly_detection_trust_case_study/blob/xai-2024-paper/AD_VAE_GAN_HAZELNUT.ipynb) The explanations can be compared against ground-truth anomaly masks through the quantitative evaluation described in the paper. ## Intended Use These checkpoints are intended for: - Explainable visual anomaly detection research - Industrial anomaly localization - Reconstruction-based anomaly detection - LIME and SHAP experiments - Trustworthiness evaluation of anomaly detection systems - Reproducibility and comparative research ## Limitations - The original experiments focus on Screw and Hazelnut from MVTec AD. - Images are processed at 128 × 128 resolution. - Anomaly scores depend on preprocessing and scoring strategies. - Explainability methods may require substantial computation. - The checkpoints are research artifacts and are not validated for safety-critical deployment. - Compatibility with newer TensorFlow/Keras releases is not guaranteed. ## Citation If you use these TensorFlow checkpoints, the architecture, or the associated explainability methodology, please cite: ```bibtex @InProceedings{10.1007/978-3-031-63803-9_13, author = {Rashid, Muhammad and Amparore, Elvio and Ferrari, Enrico and Verda, Damiano}, editor = {Longo, Luca and Lapuschkin, Sebastian and Seifert, Christin}, title = {Can I Trust My Anomaly Detection System? A Case Study Based on Explainable AI}, booktitle = {Explainable Artificial Intelligence}, year = {2024}, publisher = {Springer Nature Switzerland}, address = {Cham}, pages = {243--254}, doi = {10.1007/978-3-031-63803-9_13} } ``` ## Resources - **Model weights:** https://huggingface.co/rashidrao/AD_MVTec_XAI_TensorFlow - **GitHub implementation:** https://github.com/rashidrao-pk/anomaly_detection_trust_case_study/tree/xai-2024-paper - **Springer publication:** https://doi.org/10.1007/978-3-031-63803-9_13 - **Hugging Face paper:** https://huggingface.co/papers/2407.19951 ## Authors **Muhammad Rashid, Elvio Amparore, Enrico Ferrari, Damiano Verda** University of Turin and RuleX Innovation Labs, Italy. ## License MIT License, consistent with the accompanying research code repository.