Giter VIP home page Giter VIP logo

cognitivedistillation's Introduction

Distilling Cognitive Backdoor Patterns within an Image: A SOTA Method for Backdoor Sample Detection

Code for ICLR 2023 Paper "Distilling Cognitive Backdoor Patterns within an Image"


Use Cognitive Distilation on a pretrained model and images.

  • lr: the learning rate (step size) for extracting the mask.
  • p: the L_p norm constraint of the mask.
  • gamma (alpha used in the paper) and beta: hyperparameters for the objective function.
  • num_steps*: number of steps for extracting the mask.
from cognitive_distillation import CognitiveDistillation

images = # batch of images (torch.Tensor) [b,c,h,w]
model = # a pre-trained model (torch.nn.Module)

cd = CognitiveDistillation(lr=0.1, p=1, gamma=0.01, beta=10.0, num_steps=100)
masks = cd(model, images) # the extracted masks (torch.Tensor) [b,1,h,w]
cognitive_pattern = images * masks # extracted cognitive pattern (torch.Tensor) [b,c,h,w]

Visualizations of the masks and Cognitive Patterns

Alt text


Reproduce results from the paper

  • Configurations for each experiment are stored in configs/ folder.
  • Trigger patterns can be downloaded from NAD GitHub repo
  • ISSBA poisoned data can be downloaded from ISSBA GitHub repo
  • Dynamic attack generator can be downloaded from Dyanamic Attack GitHub repo
  • For DFST attack, data can be generated from DFST GitHub repo
  • Other triggers (trigger folder in this repo) can be downloaded from this Google Drive
  • Frequency detector model weights can be downloaded from this Google Drive. Note that this model is trained on the GTSRB dataset (reproduced using PyTorch), based on frequency-backdoor.
Train a model
  • $exp_path: the path where you want to store experiment results, checkpoints, logs
  • $exp_config: where the experiment config is located
  • $exp_name: name of the specific experiment configurations (*.yaml)
python train.py --exp_path $exp_path \
 --exp_config $exp_config \
 --exp_name $exp_name
Run detections

The following command will save the detection results (e.g., masks of Cognitive Distillation, a confidence score for other baselines) to $exp_path.

  • --method argument specifies detection methods ['CD', 'ABL', 'Feature', 'FCT', 'STRIP'].
  • $gamma is the hyperparameter value for Cognitive Distillation
  • 'Feature' is used for extract deep features (used by AC and SS).
  • ABL does not need to run detection. All training losses are stored in the $exp_path.
python extract.py --exp_path $exp_path \
 --exp_config $exp_config \
 --exp_name $exp_name \
 --method "CD" --gamma $gamma
Run detections

The following command will check AUPRC/AUROC for the detection results.

  • --method argument specifies detection methods ['CD', 'AC', 'ABL', 'FCT', 'Frequency', SS', 'STRIP'].
python detect_analysis.py --exp_path $exp_path \
                          --exp_config $exp_config \
                          --exp_name $exp_name \
                          --gamma $gamma

Citation

If you use this code in your work, please cite the accompanying paper:

@inproceedings{
huang2023distilling,
title={Distilling Cognitive Backdoor Patterns within an Image},
author={Hanxun Huang and Xingjun Ma and Sarah Monazam Erfani and James Bailey},
booktitle={ICLR},
year={2023},
}

Acknowledgements

This research was undertaken using the LIEF HPC-GPGPU Facility hosted at the University of Melbourne. This Facility was established with the assistance of LIEF Grant LE170100200. The authors would like to thank Yige Li for sharing the several triggers used in the experiments.

Part of the code is based on the following repo:

cognitivedistillation's People

Contributors

hanxunh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

hubin111 gnipping

cognitivedistillation's Issues

Got problems in training model

Thank you for your work and code!
When i try to train a model , i use the config you stored in ./configs. The config i set is like below:
python train.py --exp_path output --exp_config configs/celeba --exp_name celeba_rn18
But i meet some problems like:

File "train.py", line 49, in epoch_exp_stats
loss = F.cross_entropy(logits, labels, reduction='none')
File "/home/miniconda3/envs/cog/lib/python3.8/site-packages/torch/nn/functional.py", line 3026, in cross_entropy
return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index, label_smoothing)
TypeError: cross_entropy_loss(): argument 'input' (position 1) must be Tensor, not list

I didn't change the code, so i wonder if i set the config in a wrong way.
If you know why this happened , please offer me some help, Thanks a lot!

Requirements for the environment

Thanks for sharing your wonderful work. When I tried to run the code, it threw errors due to dependency conflicts of packages' versions: omegaconf, fairseq, hydra-core, and mlconfig. Could you please provide the requirements.txt for setting up the environment? Thanks.

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.