Skip to content

Latest commit

 

History

History
115 lines (76 loc) · 4.5 KB

README.md

File metadata and controls

115 lines (76 loc) · 4.5 KB

SKDCGN- Source-free Knowledge Distillation of Counterfactual Generative Networks using cGANs

Note: To run the experiments, saved models are required. As the size of the models are quite large, we have not provided them over here. The links for the models to download can be provided on demand.

Setup

Install anaconda (if you don't have it yet)

wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
bash Anaconda3-2020.11-Linux-x86_64.sh
source ~/.profile

Clone the repo and build the environment

git clone https://github.com/ambekarsameer96/DL2.git
conda env create -f env.yml
conda activate cgn

SKDCGN

Training the SKDCGN

Imagenet Experiments

For imagenet, it is necessary to generate the data to train the TinyGAN.

python cgn_extract_imagenet_samples/generate_data.py

These images then need to be moved into the SKDCGN_Imagenet directory.

Then, run the train.sh script in the SKDCGN_Imagenet directory.

MNIST Experiments

For MNIST, first use pretrained weights from the authors repo that has been forked from the 'CGN' paper.

python cgn_extract_mnist_samples/generate_data.py

The images for every IM, noise, labels will be saved in a directory Imgs_CF, which can be converted into a numpy array using converter.ipynb

Run following commands to run for every IM, it will use existing losses + KL_Divergence as loss function integrated in models.py

python SKDCGN_MNIST/main_bg_exp.py

python SKDCGN_MNIST/main_fg_exp.py

python SKDCGN_MNIST/main_mask_exp.py

Baseline

Training TinyGAN for 1000 classes

$ bash Baseline_code/TinyGAN_updated_1000_classes/train.sh

Training the Baseline

NOTE: Training the Baseline for ImageNet utilises TinyGAN and U2-Net weights. It runs for 1.2m iterations(approx 0.5/s). Prefer to skip this part if adequate resource not available.

python Baseline_code/Baseline/code/counterfactual_generative_networks-main/imagenet/train_cgn.py --model_name MODEL_NAME

Generate Counterfactual Images

2 Folders of counterfactual images are required (Val, Test). Val has 5,000 counterfactuals, Test has 2000 counterfactual images.

python Baseline_code/Baseline/code/counterfactual_generative_networks-main/imagenet/generate_data.py --n_data 5000 --weights_path imagenet/weights/cgn.pth --mode random --run_name val --truncation 0.5 --batch_sz 1

python Baseline_code/Baseline/code/counterfactual_generative_networks-main/imagenet/generate_data.py --n_data 2000 --weights_path imagenet/weights/cgn.pth --mode random --run_name test --truncation 0.5 --batch_sz 1

Shape IM experiments

Run following command with desired modifications in the training loop

python cgn_extract_mnist_samples/train_cgn_Shape_IM.py

Generate datasets and train classifier. Final classifier results will be in resulting SLURM file.

python cgn_extract_mnist_samples/generate_data.py --dataset 'double_colored_MNIST'

python cgn_extract_mnist_samples/generate_data.py --file_name 'train_noise' --dataset 'double_colored_MNIST' --weight_path 'mnists/experiments/cgn_double_colored_MNIST_2022_06_02_14_31_20_tmp_noise01/weights/ckp_46000.pth'

python cgn_extract_mnist_samples/train_classifier.py --dataset "double_colored_MNIST_counterfactual"

Repeat process with remaining modifications (don't forget to retrain network with the respective modifications!)

python cgn_extract_mnist_samples/generate_data.py --file_name 'train_transparent' --dataset 'double_colored_MNIST' --weight_path 'mnists/experiments/cgn_double_colored_MNIST_2022_06_01_10_24_42_tmp_transparent75/weights/ckp_46000.pth'

python cgn_extract_mnist_samples/generate_data.py --file_name 'train_rotation' --dataset 'double_colored_MNIST' --weight_path 'mnists/experiments/cgn_double_colored_MNIST_2022_06_03_09_56_27_tmp_rotation180deg/weights/ckp_46000.pth'

Acknowledgments

We like to acknowledge several repos of which we use parts of code, data, or models in our implementation: