Skip to content

Commit

Permalink
add new trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
doxawang committed Jan 3, 2022
1 parent 6f9fd97 commit 8f26979
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 34 deletions.
19 changes: 14 additions & 5 deletions bash_files/pretrain/cifar/sweep_poison_rate.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
for file in /data/yfwang/solo-learn/poison_datasets/cifar10/simclr/*
do
sh simclr.sh cifar10 " --poison_data ${file} --use_poison --checkpoint_dir /data/yfwang/solo-learn/pretrain/cifar10 "
done
sh simclr.sh cifar10 " --poison_data /data/yfwang/solo-learn/poison_datasets/cifar10/simclr/cifar10_zoo-simclr_rate_1.00_target_None_trigger_checkerboard_center_alpha_1.00_class_6_acc_0.8244.pt --eval_poison --checkpoint_dir /data/yfwang/solo-learn/pretrain/cifar10 "
i=$1
for dataset in cifar10 cifar100
do
for rate in 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00
do
for file in /data/yfwang/solo-learn/poison_datasets/cifar10/zoo-simclr/gaussian_noise/cifar10_zoo-simclr_rate_$rate_*.pt
do
echo dataset rate file
# CUDA_VISIBLE_DEVICES=${i} sh simclr.sh $dataset " --poison_data ${file} --use_poison --checkpoint_dir /data/yfwang/solo-learn/pretrain/$dataset "
done
done
i=`expr ${i} + 1`
done
done
2 changes: 1 addition & 1 deletion main_poison.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def main():
'acc': acc,
}

args.save_dir = os.path.join(args.save_dir, args.dataset, args.pretrain_method)
args.save_dir = os.path.join(args.save_dir, args.dataset, args.pretrain_method, args.trigger_type)

os.makedirs(args.save_dir, exist_ok=True)
file_name = os.path.join(args.save_dir, args.poison_data_name + '.pt')
Expand Down
4 changes: 2 additions & 2 deletions solo/args/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ def dataset_args(parser: ArgumentParser):
parser.add_argument("--use_poison", action="store_true")
parser.add_argument("--eval_poison", action="store_true")
parser.add_argument("--poison_rate", type=float, default=1.0)
parser.add_argument("--trigger_type", type=str, default="checkerboard_center")
parser.add_argument("--trigger_alpha", type=float, default=1.0)
parser.add_argument("--trigger_type", type=str, default="gaussian_noise")
parser.add_argument("--trigger_alpha", type=float, default=0.2)
parser.add_argument("--target_class", type=int, default=None)
parser.add_argument("--save_dir", default=Path("datasets"), type=Path)
parser.add_argument("--poison_data", default=None, type=Path)
Expand Down
20 changes: 17 additions & 3 deletions solo/methods/linear.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from pl_bolts.optimizers.lr_scheduler import LinearWarmupCosineAnnealingLR
from solo.methods.base import BaseMethod
from solo.utils.lars import LARSWrapper
from solo.utils.metrics import accuracy_at_k, weighted_mean, false_positive, weighted_sum
from solo.utils.metrics import accuracy_at_k, weighted_mean, false_positive, weighted_sum, attack_success_rate
from torch.optim.lr_scheduler import (
CosineAnnealingLR,
ExponentialLR,
Expand Down Expand Up @@ -251,8 +251,13 @@ def shared_step(

fp_target, fp_all = false_positive(logits, target, self.target_class)

num_attack_total, num_attack_success = attack_success_rate(logits, target, self.target_class)


return {"outs": outs, "batch_size": batch_size, "loss": loss, "acc1": acc1, "acc5": acc5,
"fp_target": fp_target, "fp_all": fp_all}
"fp_target": fp_target, "fp_all": fp_all,
'num_attack_total': num_attack_total, 'num_attack_success': num_attack_success
}

def training_step(self, batch: torch.Tensor, batch_idx: int) -> torch.Tensor:
"""Performs the training step for the linear eval.
Expand Down Expand Up @@ -299,7 +304,9 @@ def validation_step(self, batch: torch.Tensor, batch_idx: int, dataloader_idx: i
"val_acc1": outs["acc1"],
"val_acc5": outs["acc5"],
"fp_target": outs["fp_target"],
"fp_all": outs["fp_all"]
"fp_all": outs["fp_all"],
'num_attack_total': outs['num_attack_total'],
'num_attack_success': outs['num_attack_success']
}
return results

Expand Down Expand Up @@ -329,11 +336,18 @@ def validation_epoch_end(self, outs: List[Dict[str, Any]]):
val_fp_all = weighted_sum(outs, "fp_all", "batch_size")
val_nfp = val_fp_target * 1.0 / val_fp_all


num_attack_total = sum([out["num_attack_total"] for out in outs])
num_attack_success = sum([out["num_attack_success"] for out in outs])
attack_success_rate = num_attack_success / num_attack_total


log = {prefix+"val_loss": val_loss,
prefix+"val_acc1": val_acc1,
prefix+"val_acc5": val_acc5,
prefix+"fp_target": val_fp_target,
prefix+"nfp": val_nfp,
prefix+"val_asr": attack_success_rate
}

self.log_dict(log, sync_dist=True)
10 changes: 3 additions & 7 deletions solo/utils/classification_dataloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,13 +399,9 @@ def prepare_data(
from poisoning_utils import transform_dataset

if use_poison:
train_dataset = transform_dataset(
dataset,
train_dataset,
poison_data['pattern'],
poison_data['mask'],
poison_data['args'].trigger_alpha
)
train_dataset.data = poison_data['poison_data']
train_dataset.targets = poison_data['targets']
print('backdoor training data imported')

train_loader, val_loader = prepare_dataloaders(
train_dataset,
Expand Down
39 changes: 23 additions & 16 deletions sweep_poison.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
# # sweep poisoning model
# for model in swav # supcon mocov2plus simsiam byol
# do
# for file in zoo/trained_models/cifar10/${model}/*.ckpt
# do
# python main_poison.py --dataset cifar10 --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-${model}
# done
# done
# sweep trigger type
model=simclr
file=zoo/trained_models/cifar10/simclr/simclr-cifar10-b30xch14-ep=999.ckpt
python main_poison.py --dataset cifar10 --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-simclr --trigger_type checkerboard_4corner --trigger_alpha 1
python main_poison.py --dataset cifar10 --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-simclr --trigger_type checkerboard_1corner --trigger_alpha 1
python main_poison.py --dataset cifar10 --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-simclr --trigger_type checkerboard_full --trigger_alpha 0.2
python main_poison.py --dataset cifar10 --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-simclr --trigger_type gaussian_noise --trigger_alpha 0.2
# sweep poisoning rate
for dataset in cifar10 cifar100
do
for file in zoo/trained_models/$dataset/simclr/*.ckpt
do
for rate in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
do
python main_poison.py --dataset $dataset --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate $rate --pretrain_method zoo-simclr --trigger_type gaussian_noise --trigger_alpha 0.2
done
done
done

## run pretraining
# cd bash_files/pretrain/cifar
# for model in swav supcon mocov2plus simsiam byol barlow dino do
# for file in zoo/trained_models/$dataset/${model}/*.ckpt do
# python main_poison.py --dataset $dataset --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-${model} --trigger_type gaussian_noise --trigger_alpha 0.2
# done
# done

# for trigger_type in checkerboard_1corner checkerboard_4corner checkerboard_center checkerboard_full gaussian_noise do
# for file in zoo/trained_models/$dataset/simclr/*.ckpt do
# python main_poison.py --dataset $dataset --backbone resnet18 --data_dir bash_files/pretrain/cifar/datasets --optimizer sgd --save_dir /data/yfwang/solo-learn/poison_datasets --pretrained_feature_extractor ${file} --poison_rate 0.5 --pretrain_method zoo-simclr --trigger_type $trigger_type --trigger_alpha 0.2
# done
# done
# for trigger_type

0 comments on commit 8f26979

Please sign in to comment.