From 0b450b1a60242f234eaab5c4364927ff702c3851 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 00:50:30 -0500 Subject: [PATCH 01/14] Update catted_generator.py remove useless import --- deepsecure/catted_generator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deepsecure/catted_generator.py b/deepsecure/catted_generator.py index f3103d4..902cd23 100644 --- a/deepsecure/catted_generator.py +++ b/deepsecure/catted_generator.py @@ -2,7 +2,6 @@ import torch from module.resnet_block import ResnetBlock from module.pre_model_extractor import model_extractor -import config as cfg class catted_generator(nn.Module): def __init__(self, From f8ff751ee09c945217735208d4d58b88992c0b93 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 00:51:20 -0500 Subject: [PATCH 02/14] Update config.py --- config.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config.py b/config.py index 44cbc49..bc93340 100644 --- a/config.py +++ b/config.py @@ -1,16 +1,16 @@ -use_cuda = True +use_cuda = True # if use GPU image_nc = 3 -epochs = 80 -batch_size = 64 -BOX_MIN = 0 -BOX_MAX = 1 +epochs = 80 # training epoch +batch_size = 64 # batch size +BOX_MIN = 0 # minimum pixel intensity value +BOX_MAX = 1 # maximum pixel intensity value pretrained_model_arch = 'resnet18' num_layers_ext = 5 ext_fixed = True G_tagged = True -tag_size = 6 +tag_size = 6 # tag size cat_G = True noise_img = True @@ -20,4 +20,4 @@ imagenet10_valdir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/val' models_path = './models/' -adv_img_path = './images/0526/adv/' \ No newline at end of file +adv_img_path = './images/0526/adv/' From 097fcc551e532a69397969237ad5ac658440a964 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 00:52:26 -0500 Subject: [PATCH 03/14] Update config.py --- config.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/config.py b/config.py index bc93340..581d73a 100644 --- a/config.py +++ b/config.py @@ -1,23 +1,28 @@ - -use_cuda = True # if use GPU -image_nc = 3 -epochs = 80 # training epoch -batch_size = 64 # batch size -BOX_MIN = 0 # minimum pixel intensity value -BOX_MAX = 1 # maximum pixel intensity value +# if use GPU +use_cuda = True +image_nc = 3 +# training epoch +epochs = 80 +# batch size +batch_size = 64 +# minimum pixel intensity value +BOX_MIN = 0 +# maximum pixel intensity value +BOX_MAX = 1 pretrained_model_arch = 'resnet18' -num_layers_ext = 5 -ext_fixed = True +num_layers_ext = 5 +ext_fixed = True -G_tagged = True -tag_size = 6 # tag size +G_tagged = True +# tag size +tag_size = 6 -cat_G = True -noise_img = True -noise_g_path = './models/netG_epoch_80.pth' +cat_G = True +noise_img = True +noise_g_path = './models/netG_epoch_80.pth' -imagenet10_traindir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/train' -imagenet10_valdir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/val' +imagenet10_traindir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/train' +imagenet10_valdir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/val' -models_path = './models/' -adv_img_path = './images/0526/adv/' +models_path = './models/' +adv_img_path = './images/0526/adv/' From 3392b4814a8d97db15aad2302b103d0b77a041e6 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 00:54:19 -0500 Subject: [PATCH 04/14] Update cat_adv_image.py --- deepsecure/cat_adv_image.py | 129 ++---------------------------------- 1 file changed, 6 insertions(+), 123 deletions(-) diff --git a/deepsecure/cat_adv_image.py b/deepsecure/cat_adv_image.py index 052ccb6..f02c7b3 100644 --- a/deepsecure/cat_adv_image.py +++ b/deepsecure/cat_adv_image.py @@ -1,118 +1,9 @@ -# import torch.nn as nn -# import torch -# import torch.nn.functional as F -# import torchvision -# import os -# import config as cfg - -# models_path = cfg.models_path -# adv_img_path = cfg.adv_img_path - -# # custom weights initialization called on netG and netD -# def weights_init(m): -# classname = m.__class__.__name__ -# if classname.find('Conv') != -1: -# nn.init.normal_(m.weight.data, 0.0, 0.02) -# elif classname.find('BatchNorm') != -1: -# nn.init.normal_(m.weight.data, 1.0, 0.02) -# nn.init.constant_(m.bias.data, 0) - - -# class Cat_Adv_Gen: -# def __init__(self, -# device, -# model_extractor, -# generator, -# reg_g): - -# self.device = device -# self.model_extractor = model_extractor -# self.generator = generator -# self.box_min = cfg.BOX_MIN -# self.box_max = cfg.BOX_MAX -# self.ite = 0 -# #self.CELoss = nn.CrossEntropyLoss() - -# self.model_extractor.to(device) -# #self.model_extractor.eval() - -# self.generator.to(device) - -# self.noise_generator = reg_g -# if self.noise_generator != False: -# self.noise_generator.to(device) - -# # initialize optimizers -# self.optimizer_G = torch.optim.Adam(self.generator.parameters(), -# lr=0.001) - -# if not os.path.exists(models_path): -# os.makedirs(models_path) -# if not os.path.exists(adv_img_path): -# os.makedirs(adv_img_path) - -# def train_batch(self, x): -# self.optimizer_G.zero_grad() -# idx = torch.randint(x.size(0),(x.size(0),)) -# if self.noise_generator != False: -# with torch.no_grad(): -# noise_imgs, temp_feature = self.noise_generator(x) -# adv_imgs, hide_feature = self.generator(x, noise_imgs[idx]) -# else: -# adv_imgs, hide_feature = self.generator(x, x[idx]) -# adv_img_feature = self.model_extractor(adv_imgs) - -# loss_img = F.l1_loss(adv_imgs, x+5*noise_imgs) -# loss_adv = F.l1_loss(hide_feature, adv_img_feature) -# loss_G = loss_img + 1*loss_adv -# loss_G.backward(retain_graph=True) - -# self.optimizer_G.step() - -# return loss_adv.item(), adv_imgs, idx, loss_img.item() - -# def train(self, train_dataloader, epochs): -# for epoch in range(1, epochs+1): - -# if epoch == 200: -# self.optimizer_G = torch.optim.Adam(self.netG.parameters(), -# lr=0.0001) -# if epoch == 400: -# self.optimizer_G = torch.optim.Adam(self.netG.parameters(), -# lr=0.00001) -# loss_adv_sum = 0 -# loss_img_sum = 0 -# self.ite = epoch -# for i, data in enumerate(train_dataloader, start=0): -# images, labels = data -# images, labels = images.to(self.device), labels.to(self.device) - -# loss_adv_batch, adv_img, idx, loss_img_batch = self.train_batch(images) -# loss_adv_sum += loss_adv_batch -# loss_img_sum += loss_img_batch - - -# # print statistics - -# torchvision.utils.save_image(torch.cat((adv_img[:7], images[:7], (images[idx])[:7])), -# adv_img_path + str(epoch) + ".png", -# normalize=True, scale_each=True, nrow=7) -# num_batch = len(train_dataloader) -# print("epoch %d:\n loss_adv: %.3f, loss_img: %.3f \n" % -# (epoch, loss_adv_sum/num_batch, loss_img_sum/num_batch)) -# # save generator -# if epoch%20==0: -# netG_file_name = models_path + 'catted_netG_epoch_' + str(epoch) + '.pth' -# torch.save(self.generator.state_dict(), netG_file_name) - -# print("check") - -import torch.nn as nn +import os import torch -import torch.nn.functional as F import torchvision -import os import config as cfg +import torch.nn as nn +import torch.nn.functional as F # Get paths from config for saving models and adversarial images models_path = cfg.models_path @@ -120,7 +11,6 @@ def weights_init(m): """Custom weight initialization for the generator and discriminator networks. - Args: m: Module whose weights need to be initialized """ @@ -135,7 +25,6 @@ def weights_init(m): class Cat_Adv_Gen: """Concatenated Adversarial Generator class that combines regular and noise generators.""" - def __init__(self, device, model_extractor, generator, reg_g): """Initialize the Cat_Adv_Gen with necessary components. @@ -162,8 +51,7 @@ def __init__(self, device, model_extractor, generator, reg_g): self.noise_generator.to(device) # Initialize Adam optimizer for generator - self.optimizer_G = torch.optim.Adam(self.generator.parameters(), - lr=0.001) + self.optimizer_G = torch.optim.Adam(self.generator.parameters(), lr=0.001) # Create directories for saving models and images if they don't exist if not os.path.exists(models_path): @@ -173,7 +61,6 @@ def __init__(self, device, model_extractor, generator, reg_g): def train_batch(self, x): """Train generator on a single batch of images. - Args: x: Batch of input images @@ -212,7 +99,6 @@ def train_batch(self, x): def train(self, train_dataloader, epochs): """Train the generator for specified number of epochs. - Args: train_dataloader: DataLoader containing training images epochs: Number of epochs to train for @@ -220,11 +106,9 @@ def train(self, train_dataloader, epochs): for epoch in range(1, epochs+1): # Reduce learning rate at specific epochs if epoch == 200: - self.optimizer_G = torch.optim.Adam(self.netG.parameters(), - lr=0.0001) + self.optimizer_G = torch.optim.Adam(self.netG.parameters(), lr=0.0001) if epoch == 400: - self.optimizer_G = torch.optim.Adam(self.netG.parameters(), - lr=0.00001) + self.optimizer_G = torch.optim.Adam(self.netG.parameters(), lr=0.00001) # Initialize loss sums for epoch loss_adv_sum = 0 @@ -255,5 +139,4 @@ def train(self, train_dataloader, epochs): if epoch % 20 == 0: netG_file_name = models_path + 'catted_netG_epoch_' + str(epoch) + '.pth' torch.save(self.generator.state_dict(), netG_file_name) - print("check") From 9db5f8801c6573730c8f56a27d7a5198e92a98fa Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:44:24 -0500 Subject: [PATCH 05/14] Update imagenet10_dataloader.py --- data/imagenet10_dataloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/imagenet10_dataloader.py b/data/imagenet10_dataloader.py index b0a085e..01b589a 100644 --- a/data/imagenet10_dataloader.py +++ b/data/imagenet10_dataloader.py @@ -1,7 +1,7 @@ import torch import torchvision.datasets as datasets import torchvision.transforms as transforms -import config +import config def get_data_loaders(): print('==> Preparing Imagenet 10 class data..') From 154debfac12577fcdbc274ea121dbe3436d21cf8 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:44:32 -0500 Subject: [PATCH 06/14] Update adv_image.py --- deepsecure/adv_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepsecure/adv_image.py b/deepsecure/adv_image.py index 31b8b1d..4235284 100644 --- a/deepsecure/adv_image.py +++ b/deepsecure/adv_image.py @@ -3,7 +3,7 @@ import torch.nn.functional as F import torchvision import os -import config as cfg +import config as cfg models_path = cfg.models_path adv_img_path = cfg.adv_img_path From 48ee252d5d276a35952037d10918e09924d1c25d Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:44:38 -0500 Subject: [PATCH 07/14] Update cat_adv_image.py --- deepsecure/cat_adv_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepsecure/cat_adv_image.py b/deepsecure/cat_adv_image.py index f02c7b3..1c181e2 100644 --- a/deepsecure/cat_adv_image.py +++ b/deepsecure/cat_adv_image.py @@ -3,7 +3,7 @@ import torchvision import config as cfg import torch.nn as nn -import torch.nn.functional as F +import torch.nn.functional as F # Get paths from config for saving models and adversarial images models_path = cfg.models_path From 4957c58bed858453f6967ea65528e41adae60e25 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:44:44 -0500 Subject: [PATCH 08/14] Update catted_generator.py --- deepsecure/catted_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepsecure/catted_generator.py b/deepsecure/catted_generator.py index 902cd23..801c957 100644 --- a/deepsecure/catted_generator.py +++ b/deepsecure/catted_generator.py @@ -1,7 +1,7 @@ import torch.nn as nn import torch from module.resnet_block import ResnetBlock -from module.pre_model_extractor import model_extractor +from module.pre_model_extractor import model_extractor class catted_generator(nn.Module): def __init__(self, From b12616e5b25de9b970ccfe6d03c4f50725fa4913 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:00 -0500 Subject: [PATCH 09/14] Update regular_generator.py --- deepsecure/regular_generator.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deepsecure/regular_generator.py b/deepsecure/regular_generator.py index e91380e..220b50f 100644 --- a/deepsecure/regular_generator.py +++ b/deepsecure/regular_generator.py @@ -1,9 +1,8 @@ - import torch.nn as nn import torchvision.models as pre_models from module.resnet_block import ResnetBlock from module.pre_model_extractor import model_extractor -import config as cfg +import config as cfg class regular_generator(nn.Module): def __init__(self, From 6a856e002d9e36c0d57a58e6ad124791769a16d6 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:06 -0500 Subject: [PATCH 10/14] Update pre_model_extractor.py --- module/pre_model_extractor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/pre_model_extractor.py b/module/pre_model_extractor.py index 4ded643..6b4ec3a 100644 --- a/module/pre_model_extractor.py +++ b/module/pre_model_extractor.py @@ -1,5 +1,5 @@ import torch.nn as nn -import torchvision.models as pre_models +import torchvision.models as pre_models # Return first n layers of a pretrained model class model_extractor(nn.Module): From f1308937d9b5b053aaea71a0bc9506092307f761 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:14 -0500 Subject: [PATCH 11/14] Update resnet_block.py --- module/resnet_block.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/resnet_block.py b/module/resnet_block.py index c4217bc..06cc041 100644 --- a/module/resnet_block.py +++ b/module/resnet_block.py @@ -1,4 +1,4 @@ -import torch.nn as nn +import torch.nn as nn # Define a resnet block # modified from https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/master/models/networks.py From 71cd615800ec3545ed2121eef91d106c6c944504 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:24 -0500 Subject: [PATCH 12/14] Update README.md From 78c5dc674e5d6da46439a3b01432990fce5dc58f Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:37 -0500 Subject: [PATCH 13/14] Update config.py --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index 581d73a..1d7d26d 100644 --- a/config.py +++ b/config.py @@ -25,4 +25,4 @@ imagenet10_valdir = 'C:/Users\Rui\Pictures/transfer_imgnet_10/val' models_path = './models/' -adv_img_path = './images/0526/adv/' +adv_img_path = './images/0526/adv/' From 227066a8afb52c9e70c6543f4dcdfa04954f61d6 Mon Sep 17 00:00:00 2001 From: IVYEVOL <52659747+IVYEVOL@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:45:46 -0500 Subject: [PATCH 14/14] Update main.py --- main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 5f28b35..954644d 100644 --- a/main.py +++ b/main.py @@ -5,8 +5,8 @@ from cat_adv_image import Cat_Adv_Gen from regular_generator import regular_generator from catted_generator import catted_generator -from pre_model_extractor import model_extractor -#------------------------------- +from pre_model_extractor import model_extractor + if __name__ == '__main__': # Check if CUDA is available and print the result print("CUDA Available: ", torch.cuda.is_available())