diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..30ca7ccb7ba3448f8f0949b13bd37feccff0f637 --- /dev/null +++ b/README.md @@ -0,0 +1,179 @@ +# Adversarial Defense Methods + +This repository contains implementations of various adversarial defense methods, including **AIR**, **Vanilla Adversarial Training (AT)**, **LFL**, **EWC**, **Feat. Extraction** and **Joint Training**. +The code also allows training on multiple tasks (attacks) sequentially, with automatic defense method selection from the configuration file. + +## Setup & Installation + +### Prerequisites + +To run this code, you’ll need to install the following dependencies: + +1. **Python 3.x** +2. **PyTorch** (for training models) +3. **NumPy** (for numerical computations) +4. **torchvision** (for image transformations and datasets) +5. **Matplotlib** (for plotting and visualization) +6. **scikit-learn** (for t-SNE visualization) + +### Step-by-step setup + +1. **Clone the repository:** + + First, clone the repository to your local machine: + + ```bash + git clone https://gitlab.cs.fau.de/ex55aveq/defense-without-forgetting-reproduction.git + cd src + ``` + +2. **Create and activate a virtual environment:** + + It's recommended to use a virtual environment to isolate the dependencies. + + ```bash + python -m venv venv + source venv/bin/activate + ``` + +3. **Install dependencies:** + + Install the necessary dependencies using `pip`: + + ```bash + pip install -r requirements.txt + ``` + +4. **Configure the environment:** + + Set up the configuration file (`Config`) in the Python code to specify your training parameters, dataset, and attack/defense methods. + +--- + +## Usage Instructions + +### Running the code + +After setting up the environment, you can start training your model using the following command: + +```bash +python main.py +``` + +This will start training on the dataset and attacks specified in the `Config` class, which is located in `utils/config.py`. You can modify the config file to specify different training parameters, attack methods, defense methods, and dataset. + +### Configuration Options + +The configuration options can be found in `utils/config.py`. Some of the key parameters you can adjust include: + +- **Dataset**: Choose between `MNIST`, `CIFAR10`, and `CIFAR100`. +- **Attack Methods**: Specify the sequence of attacks you want to train on (e.g., `FGSM`, `PGD`, or `None`). +- **Defense Methods**: Choose a defense method like `AIR`, `LFL`, `JointTraining`,`VanillaAT`, `FeatExtraction`,`EWC`, etc. +- **Training Parameters**: You can adjust `epochs`, `batch_size`, `learning_rate`, and other parameters as needed. + +### Configuration Example + +Below is an example of the configuration you might define in `config.py`: + +```python +@dataclass +class Config: + # General + seed: int = 42 + device: str = "cuda" + + # Training + epochs: int = 30 + batch_size: int = 128 + learning_rate: float = 0.1 + momentum: float = 0.9 + weight_decay: float = 5e-4 + + # Attack params + epsilon: float = 8 / 255 + alpha: float = 2 / 255 + num_steps: int = 10 + random_init: bool = True + + # Defense selection + defense_method: str = "AIR" + + # AIR parameters + lambda_SD: float = 1.0 + lambda_IR: float = 1.0 + lambda_AR: float = 1.0 + lambda_Reg: float = 1.0 + alpha_range: tuple = (0.3, 0.7) + use_rdrop: bool = True + + # Isotropic replay augmentations + iso_noise_std: float = 0.01 + iso_clamp_min: float = 0.0 + iso_clamp_max: float = 1.0 + iso_p_flip: float = 0.5 + iso_flip_dim: int = 3 + iso_p_rotation: float = 0.5 + iso_max_rotation: int = 10 + iso_p_crop: float = 0.5 + iso_p_erase: float = 0.5 + + # Dataset + dataset: str = "MNIST" + data_root: str = "./data" + num_workers: int = 2 + + # LFL + lambda_lfl: float = 1.0 + feature_lambda: float = 1.0 + freeze_classifier: bool = True + + # JointTraining + joint_lambda: float = 0.5 + + # VanillaAT + adv_lambda: float = 1.0 + + # FeatExtraction + feat_lambda: float = 1.0 + noise_std: float = 0.01 + + # EWC + lambda_ewc: float = 100.0 + + # Multi-task or multi-attack scenario + attack_sequence: tuple = ("FGSM", "PGD") +``` + +You can modify `attack_sequence` and `defense_method` as per your needs. + +--- + +## Results + +After training, the results will be saved and displayed. You can see: + +- **Clean Accuracy**: Accuracy on the test dataset without any attack. +- **Robust Accuracy**: Accuracy under adversarial attacks (e.g., PGD, FGSM). +- **Losses**: Both clean and adversarial losses. + +--- + +## Dependencies + +- **PyTorch**: For deep learning and model training. +- **torchvision**: For image processing and dataset utilities. +- **NumPy**: For numerical computations. +- **matplotlib**: For plotting training and evaluation results. +- **scikit-learn**: For t-SNE visualization. + +--- + +## Author + +- **Mina Moshfegh** + +--- + +### Notes: + +- This README provides clear setup instructions, usage details, configuration, and dependency installation steps. \ No newline at end of file