Git Product home page Git Product logo

anoddpm's Introduction

AnoDDPM: Anomaly Detection with Denoising Diffusion Probabilistic Models using Simplex Noise

This is the github repository for an anomaly detection approach utilising DDPMs with simplex noise implemented in pytorch.

The code was written by Julian Wyatt and is based off the Guided Diffusion Repo and a fork of a python simplex noise library.

The project was accepted at the CVPR Workshop: NTIRE 2022: Project | Paper

Simplex noise examples

gif 1         gif 2

Gaussian noise example

File structure:

  • dataset.py - custom dataset loader
  • detection.py - code for generating measures & initial testing and experimentation.
  • diffusion_training.py - training procedure
  • evaluation.py - functions for measures and metrics
  • GaussianDiffusion.py - Gaussian architecture with custom detection, forked from https://github. com/openai/guided-diffusion
  • generate_images.py - generates images for Figs in paper
  • graphs.py - reduce graph quality, load and visualise graphs
  • helpers.py - helper functions for use in several places ie checkpoint loading
  • perlin.py - Generating Fig 2 and testing octaves
  • simplex.py - Simplex class - forked from https://github.com/lmas/opensimplex with added multi-scale code.
  • UNet.py - UNet architecture, forked from https://github.com/openai/guided-diffusion
  • test_args/args{i}.json - primary example seen below
  • model/diff-params-ARGS={i}/params-final.pt - checkpoint for i'th arg
  • Examples/ - demonstration of early testing
  • diffusion-videos/ARGS={i}/ - video outputs of varying args across training, testing and detection
  • diffusion-training-images/ARGS={i}/ - detection images
  • metrics/ - storage of varying metrics
  • final-outputs/ - outputs from generate_images.py

For access to checkpoints, please get in touch. For access to datasets, please refer to the paper's citations.

How To...

Train

To train a model, run python3 diffusion_training.py ARG_NUM where ARG_NUM is the number relating to the json arg file. These arguments are stored in ./test_args/ and are called args1.json for example.

Evaluate

To evaluate a model, run python3 detection.py ARG_NUM, and ensure the script runs the correct sub function.

Datasets

To perform the same tests, store the anomalous dataset in ./DATASETS/CancerousDataset/EdinburghDataset/Anomalous-T1/raw and the training dataset in ./DATASETS/Train/. The training dataset contained 100 folders where each contained the raw file and the numpy extracted file. To add a new dataset, edit the dataset.py file and ensure the new dataset is loaded via the script you're running.

Example args:

{ "img_size": [256,256], "Batch_Size": 1, "EPOCHS": 3000, "T": 1000, "base_channels": 128, "beta_schedule": "linear", "channel_mults": "", "loss-type": "l2", "loss_weight": "none", "train_start": true, "lr": 1e-4, "random_slice": true, "sample_distance": 800, "weight_decay": 0.0, "save_imgs":false, "save_vids":true, "dropout":0, "attention_resolutions":"16,8", "num_heads":2, "num_head_channels":-1, "noise_fn":"simplex", "dataset": "mri" }

Citation:

If you use this code for your research, please cite:
AnoDDPM: Anomaly Detection With Denoising Diffusion Probabilistic Models Using Simplex Noise
Julian Wyatt, Adam Leach , Sebastian M. Schmon , Chris G. Willcocks; Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops, 2022

@InProceedings{Wyatt_2022_CVPR,
    author    = {Wyatt, Julian and Leach, Adam and Schmon, Sebastian M. and Willcocks, Chris G.},
    title     = {AnoDDPM: Anomaly Detection With Denoising Diffusion Probabilistic Models Using Simplex Noise},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
    month     = {June},
    year      = {2022},
    pages     = {650-656}
}

anoddpm's People

Contributors

julian-wyatt avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.