Awesome
OOD-Adv
On the Adversarial Robustness of Out-of-distribution Generalization Models
This code is used to reproduce the experiments the main paper of:
On the Adversarial Robustness of Out-of-distribution Generalization Models Xin Zou, Weiwei Liu 37th Conference on Neural Information Processing Systems (NeurIPS), 2023 [Website] [Paper]
Our code is based on DomainBed, for more details about the benchmark DomainBed, please refer to DomainBed.
Reproduce Experimental Results
1 Download the datasets
python -m domainbed.scripts.download --data_dir=./domainbed/data
2 Lunch the sweeps
Lunch the sweep for the algorithms that does not use adversarial training:
python -m domainbed.scripts.sweep launch --data_dir=./domainbed/data \
--output_dir=./sweep/output/path \
--command_launcher multi_gpu \
--algorithms ERM MLDG CDANN VREx RSC \
--datasets RotatedMNIST ColoredMNIST VLCS PACS OfficeHome \
--n_hparams 20 --n_trials 1 --single_test_envs
Lunch the sweep for MAT and LDAT:
python -m domainbed.scripts.sweep launch --data_dir=./domainbed/data \
--output_dir=./sweep/output/path \
--command_launcher multi_gpu \
--algorithms MAT LDAT \
--datasets ColoredMNIST VLCS PACS OfficeHome \
--n_hparams 20 --n_trials 1 --single_test_envs \
--steps 8000
Lunch the sweep for AERM and RDANN:
python -m domainbed.scripts.sweep launch --data_dir=./domainbed/data \
--output_dir=./sweep/output/path \
--command_launcher multi_gpu \
--algorithms AERM RDANN \
--datasets RotatedMNIST ColoredMNIST VLCS PACS OfficeHome \
--n_hparams 20 --n_trials 1 --single_test_envs \
--steps 8000
3 find the best parameters
python -m domainbed.scripts.find_best_hparam --input_dir=./sweep/output/path \
--dataset=RotatedMNIST
python -m domainbed.scripts.find_best_hparam --input_dir=./sweep/output/path \
--dataset=ColoredMNIST
python -m domainbed.scripts.find_best_hparam --input_dir=./sweep/output/path \
--dataset=VLCS
python -m domainbed.scripts.find_best_hparam --input_dir=./sweep/output/path \
--dataset=PACS
python -m domainbed.scripts.find_best_hparam --input_dir=./sweep/output/path \
--dataset=OfficeHome
4 Retrain the models with the best parameters
python -m domainbed.scripts.resweep launch --command_launcher multi_gpu \
--datasets RotatedMNIST ColoredMNIST VLCS PACS OfficeHome \
--algorithms ERM MLDG CDANN VREx RSC MAT LDAT AERM RDANN \
--sweep_base_dir ./sweep/output \
--selection_methods IIDAccuracySelectionMethod
5 Attack the trained models
python -m domainbed.scripts.sweep_attack launch --command_launcher multi_gpu \
--datasets RotatedMNIST ColoredMNIST VLCS PACS OfficeHome \
--sweep_base_dir ./sweep/output \
--selection_methods IIDAccuracySelectionMethod \
--train_methods ST \
--attacks FGSM PGD \
--algorithms ERM MLDG CDANN VREx RSC MAT LDAT AERM RDANN
python -m domainbed.scripts.sweep_attack launch --command_launcher multi_gpu \
--datasets RotatedMNIST VLCS PACS OfficeHome \
--sweep_base_dir ./sweep/output \
--selection_methods IIDAccuracySelectionMethod \
--train_methods ST \
--attacks AutoAttack \
--algorithms ERM MLDG CDANN VREx RSC MAT LDAT AERM RDANN
6 Collect the results
Run the following command to collect the results for FGSM and PGD
python -m domainbed.scripts.collect_attack_results --input_dir ./sweep/output \
--datasets RotatedMNIST ColoredMNIST VLCS PACS OfficeHome \
--selection_methods IIDAccuracySelectionMethod \
--train_method ST \
--attacks FGSM PGD \
--algorithms ERM MLDG CDANN VREx RSC MAT LDAT AERM RDANN \
--attack_all_in_one --latex
Then, you can find the .tex result file in the "./OOD-Adv/sweep/output/attacks_results/" folder.
Run the following command to collect the results for AutoAttack
python -m domainbed.scripts.collect_attack_results --input_dir ./sweep/output \
--datasets RotatedMNIST VLCS PACS OfficeHome \
--selection_methods IIDAccuracySelectionMethod \
--train_method ST \
--attacks AutoAttack \
--algorithms ERM MLDG CDANN VREx RSC MAT LDAT AERM RDANN \
--attack_all_in_one --latex
Then, you can find the .tex result file in the "./OOD-Adv/sweep/output/attacks_results/" folder.
Note that the result file will be overwritten if you run the two commands sequentially.