All Projects → alinlab → Csi

alinlab / Csi

CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances (NeurIPS 2020)

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Csi

Anomaly detection
This is a times series anomaly detection algorithm, implemented in Python, for catching multiple anomalies. It uses a moving average with an extreme student deviate (ESD) test to detect anomalous points.
Stars: ✭ 50 (-59.35%)
Mutual labels:  anomaly-detection
Ml
A high-level machine learning and deep learning library for the PHP language.
Stars: ✭ 1,270 (+932.52%)
Mutual labels:  anomaly-detection
Deepai
Detection of Accounting Anomalies using Deep Autoencoder Neural Networks - A lab we prepared for NVIDIA's GPU Technology Conference 2018 that will walk you through the detection of accounting anomalies using deep autoencoder neural networks. The majority of the lab content is based on Jupyter Notebook, Python and PyTorch.
Stars: ✭ 104 (-15.45%)
Mutual labels:  anomaly-detection
Repo 2017
Python codes in Machine Learning, NLP, Deep Learning and Reinforcement Learning with Keras and Theano
Stars: ✭ 1,123 (+813.01%)
Mutual labels:  anomaly-detection
Surpriver
Find big moving stocks before they move using machine learning and anomaly detection
Stars: ✭ 1,152 (+836.59%)
Mutual labels:  anomaly-detection
Pysad
Streaming Anomaly Detection Framework in Python (Outlier Detection for Streaming Data)
Stars: ✭ 87 (-29.27%)
Mutual labels:  anomaly-detection
Machine Failure Detection
PCA and DBSCAN based anomaly and outlier detection method for time series data.
Stars: ✭ 32 (-73.98%)
Mutual labels:  anomaly-detection
Pytorch cpp
Deep Learning sample programs using PyTorch in C++
Stars: ✭ 114 (-7.32%)
Mutual labels:  anomaly-detection
Sentinl
Kibana Alert & Report App for Elasticsearch
Stars: ✭ 1,233 (+902.44%)
Mutual labels:  anomaly-detection
Keras Oneclassanomalydetection
[5 FPS - 150 FPS] Learning Deep Features for One-Class Classification (AnomalyDetection). Corresponds RaspberryPi3. Convert to Tensorflow, ONNX, Caffe, PyTorch. Implementation by Python + OpenVINO/Tensorflow Lite.
Stars: ✭ 102 (-17.07%)
Mutual labels:  anomaly-detection
Anomaly Detection
A machine learning plugin in Open Distro for Elasticsearch for real time anomaly detection on streaming data.
Stars: ✭ 65 (-47.15%)
Mutual labels:  anomaly-detection
Timecop
Time series based anomaly detector
Stars: ✭ 65 (-47.15%)
Mutual labels:  anomaly-detection
Visual Feature Attribution Using Wasserstein Gans Pytorch
Implementation of Visual Feature Attribution using Wasserstein GANs (VAGANs, https://arxiv.org/abs/1711.08998) in PyTorch
Stars: ✭ 88 (-28.46%)
Mutual labels:  anomaly-detection
Fcdd
Repository for the Explainable Deep One-Class Classification paper
Stars: ✭ 56 (-54.47%)
Mutual labels:  anomaly-detection
Skip Ganomaly
Source code for Skip-GANomaly paper
Stars: ✭ 107 (-13.01%)
Mutual labels:  anomaly-detection
Ugfraud
An Unsupervised Graph-based Toolbox for Fraud Detection
Stars: ✭ 38 (-69.11%)
Mutual labels:  anomaly-detection
Bayesloop
Probabilistic programming framework that facilitates objective model selection for time-varying parameter models.
Stars: ✭ 87 (-29.27%)
Mutual labels:  anomaly-detection
Foremast
Foremast adds application resiliency to Kubernetes by leveraging machine learnt patterns of application health to keep applications healthy and stable
Stars: ✭ 115 (-6.5%)
Mutual labels:  anomaly-detection
Gpnd
Generative Probabilistic Novelty Detection with Adversarial Autoencoders
Stars: ✭ 112 (-8.94%)
Mutual labels:  anomaly-detection
Awesome Anomaly Detection
A curated list of awesome anomaly detection resources
Stars: ✭ 1,378 (+1020.33%)
Mutual labels:  anomaly-detection

CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances

Official PyTorch implementation of "CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances" (NeurIPS 2020) by Jihoon Tack*, Sangwoo Mo*, Jongheon Jeong, and Jinwoo Shin.

1. Requirements

Environments

Currently, requires following packages

Datasets

For CIFAR, please download the following datasets to ~/data.

For ImageNet-30, please download the following datasets to ~/data.

For Food-101, remove hotdog class to avoid overlap.

2. Training

Currently, all code examples are assuming distributed launch with 4 multi GPUs. To run the code with single GPU, remove -m torch.distributed.launch --nproc_per_node=4.

Unlabeled one-class & multi-class

To train unlabeled one-class & multi-class models in the paper, run this command:

CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 train.py --dataset <DATASET> --model <NETWORK> --mode simclr_CSI --shift_trans_type rotation --batch_size 32 --one_class_idx <One-Class-Index>

Option --one_class_idx denotes the in-distribution of one-class training. For multi-class training, set --one_class_idx as None. To run SimCLR simply change --mode to simclr. Total batch size should be 512 = 4 (GPU) * 32 (--batch_size option) * 4 (cardinality of shifted transformation set).

Labeled multi-class

To train labeled multi-class model (confidence calibrated classifier) in the paper, run this command:

# Representation train
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 train.py --dataset <DATASET> --model <NETWORK> --mode sup_simclr_CSI --shift_trans_type rotation --batch_size 32 --epoch 700
# Linear layer train
python train.py --mode sup_CSI_linear --dataset <DATASET> --model <NETWORK> --batch_size 32 --epoch 100 --shift_trans_type rotation --load_path <MODEL_PATH>

To run SupCLR simply change --mode to sup_simclr, sup_linear for representation training and linear layer training respectively. Total batch size should be same as above. Currently only supports rotation for shifted transformation.

3. Evaluation

We provide the checkpoint of the CSI pre-trained model. Download the checkpoint from the following link:

Unlabeled one-class & multi-class

To evaluate my model on unlabeled one-class & multi-class out-of-distribution (OOD) detection setting, run this command:

python eval.py --mode ood_pre --dataset <DATASET> --model <NETWORK> --ood_score CSI --shift_trans_type rotation --print_score --ood_samples 10 --resize_factor 0.54 --resize_fix --one_class_idx <One-Class-Index> --load_path <MODEL_PATH>

Option --one_class_idx denotes the in-distribution of one-class evaluation. For multi-class evaluation, set --one_class_idx as None. The resize_factor & resize fix option fix the cropping size of RandomResizedCrop(). For SimCLR evaluation, change --ood_score to simclr.

Labeled multi-class

To evaluate my model on labeled multi-class accuracy, ECE, OOD detection setting, run this command:

# OOD AUROC
python eval.py --mode ood --ood_score baseline_marginalized --print_score --dataset <DATASET> --model <NETWORK> --shift_trans_type rotation --load_path <MODEL_PATH>
# Accuray & ECE
python eval.py --mode test_marginalized_acc --dataset <DATASET> --model <NETWORK> --shift_trans_type rotation --load_path <MODEL_PATH>

This option is for marginalized inference. For single inference (also used for SupCLR) change --ood_score baseline in first command, and --mode test_acc in second command.

4. Results

Our model achieves the following performance on:

One-Class Out-of-Distribution Detection

Method Dataset AUROC (Mean)
SimCLR CIFAR-10-OC 87.9%
Rot+Trans CIFAR-10-OC 90.0%
CSI (ours) CIFAR-10-OC 94.3%

We only show CIFAR-10 one-class result in this repo. For other setting, please see our paper.

Unlabeled Multi-Class Out-of-Distribution Detection

Method Dataset OOD Dataset AUROC (Mean)
Rot+Trans CIFAR-10 CIFAR-100 82.5%
CSI (ours) CIFAR-10 CIFAR-100 89.3%

We only show CIFAR-10 to CIFAR-100 OOD detection result in this repo. For other OOD dataset results, see our paper.

Labeled Multi-Class Result

Method Dataset OOD Dataset Acc ECE AUROC (Mean)
SupCLR CIFAR-10 CIFAR-100 93.9% 5.54% 88.3%
CSI (ours) CIFAR-10 CIFAR-100 94.8% 4.24% 90.6%
CSI-ensem (ours) CIFAR-10 CIFAR-100 96.0% 3.64% 92.3%

We only show CIFAR-10 with CIFAR-100 as OOD in this repo. For other dataset results, please see our paper.

5. New OOD dataset

We find that current benchmark datasets for OOD detection, are visually far from in-distribution datasets (e.g. CIFAR).

To address this issue, we provide new datasets for OOD detection evaluation: LSUN_fix, ImageNet_fix. See the above figure for the visualization of current benchmark and our dataset.

To generate OOD datasets, run the following codes inside the ./datasets folder:

# ImageNet FIX generation code
python imagenet_fix_preprocess.py 
# LSUN FIX generation code
python lsun_fix_preprocess.py

Citation

@inproceedings{tack2020csi,
  title={CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances},
  author={Jihoon Tack and Sangwoo Mo and Jongheon Jeong and Jinwoo Shin},
  booktitle={Advances in Neural Information Processing Systems},
  year={2020}
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].