From 893adce2c290859d953b53f7ec5a2fe311d0ce4c Mon Sep 17 00:00:00 2001 From: solenebernard <solene@ligloo.net> Date: Tue, 7 Sep 2021 11:41:07 +0200 Subject: [PATCH] changes --- .DS_Store | Bin 8196 -> 8196 bytes .gitignore | 1 + job.slurm | 55 ++++++++++++++++++++++++++++++++++++++++++++++-- main.py | 33 +++++++++++++++-------------- script_train.py | 24 +++++++++++++++------ write_jobs.py | 5 ++++- 6 files changed, 92 insertions(+), 26 deletions(-) create mode 100644 .gitignore diff --git a/.DS_Store b/.DS_Store index 8d79c1b716ace8fe115eb5dec90b4d48eb401962..960e01211982928fb2cb162cd1d323afa03ceafb 100644 GIT binary patch delta 129 zcmZp1XmOa}&nU7nU^hRb$YvgaGfbQ;3>gfW3^@!rlOGBSd%}6S`7SO=Ir&Kp3=ABq rE`5y(#fKdk7#NV`Q}D`9o+u=|`G!y%<L3J^s>~A`cs8?3{AC9Ks`4Wu delta 34 qcmZp1XmOa}&nU1lU^hRbz-AtSGfbNUgxeT5$MLLW-pnrXmmL7a?h7se diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ab8cdb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +hill/ diff --git a/job.slurm b/job.slurm index f663054..4cf39d0 100644 --- a/job.slurm +++ b/job.slurm @@ -1,11 +1,12 @@ #!/bin/bash module load pytorch-gpu/py3/1.7.1 - + python main.py --label='70' \ --begin_step=1 \ --permutation_files='./models/permutation_files.npy' \ - --serveur='no' \ + --server='yes' \ + --name_account='srp' \ --number_steps=1 \ --folder_model='./models/' \ --data_dir_prot='./experience_512_75_0_4_SGE_efnetB0s1_xunet_srnet/' \ @@ -51,6 +52,56 @@ python main.py --label='70' \ +python main.py --label='70' \ + --begin_step=2 \ + --permutation_files='./models/permutation_files.npy' \ + --server='yes' \ + --name_account='srp' \ + --number_steps=1 \ + --folder_model='./models/' \ + --data_dir_prot='./experience_512_75_0_4_SGE_efnetB0s1_xunet_srnet/' \ + --data_dir_cover='/gpfswork/rech/srp/commun/JPEG_75_512/c_coeffs/' \ + --data_dir_stego_0='/gpfswork/rech/srp/commun/JPEG_75_512/J_UNI_0_4_npy/' \ + --cost_dir='/gpfswork/rech/srp/commun/JPEG_75_512/costs/' \ + --strategy='minmax' \ + --image_size=512 \ + --QF=75 \ + --train_size=4000 \ + --valid_size=1000 \ + --test_size=5000 \ + --emb_rate=0.4 \ + --model='xunet,srnet,efnet' \ + --version_eff='b0' \ + --stride=1 \ + --batch_size_classif_ef=16 \ + --batch_size_eval_ef=20 \ + --epoch_num_ef=30 \ + --CL_ef='yes' \ + --start_emb_rate_ef=1.2 \ + --pair_training_ef='no' \ + --batch_size_classif_xu=30 \ + --batch_size_eval_xu=30 \ + --epoch_num_xu=30 \ + --CL_xu='yes' \ + --start_emb_rate_xu=1.2 \ + --pair_training_xu='yes' \ + --batch_size_classif_sr=16 \ + --batch_size_eval_sr=30 \ + --epoch_num_sr=40 \ + --CL_sr='yes' \ + --start_emb_rate_sr=1.4 \ + --pair_training_sr='yes' \ + --n_iter_max_backpack=200 \ + --tau_0=5. \ + --precision=0.01 \ + --N_samples=2 \ + --attack='SGE' \ + --attack_last='no' \ + --lr=0.01 \ + --batch_adv=20 + + + diff --git a/main.py b/main.py index 9088f2d..e182f9b 100644 --- a/main.py +++ b/main.py @@ -68,7 +68,7 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir image_size, QF, folder_model, permutation_files, version_eff, stride, n_loops, model, train_size, valid_size, test_size, attack, attack_last, emb_rate, batch_adv, n_iter_max_backpack, N_samples, tau_0, precision, lr, - num_of_threads, training_dictionnary, spatial, strategy, serveur): + num_of_threads, training_dictionnary, spatial, strategy, server, name_account): n_images = train_size+valid_size+test_size models = model.split(',') @@ -94,9 +94,9 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir command = 'script_attack.py ' + \ custom_command('attack', iteration_step, model) - if(serveur): + if(server): command += ' --idx_start=$SLURM_ARRAY_TASK_ID' - run_job('attack', label, command, iteration_step, + run_job('attack', label, command, iteration_step, name_account, gpu=True, num_batch=num_batch) wait(label) else: @@ -119,13 +119,13 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir + ' --iteration_f=' + \ str(i)+' --iteration_adv='+str(iteration_step) - if(serveur): + if(server): run_job('eval_'+str(my_model), label, - command, iteration_step, gpu=True) + command, iteration_step, name_account, gpu=True) else: os.system('python '+ command) - if(serveur): + if(server): wait(label) # GENERATION OF THE TRAIN DATA BASE @@ -140,13 +140,13 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir command = 'script_train.py' + \ custom_command('train', iteration_step, my_model) - if(serveur): - run_job('train_'+my_model, label, command, iteration_step, + if(server): + run_job('train_'+my_model, label, command, iteration_step, name_account, num_of_threads=num_of_threads, gpu=True) else: os.system('python '+ command) - if(serveur): + if(server): wait(label) # EVALUATE NEW CLASSIFIERS ON ALL STEGO DATA BASES AND ON COVER @@ -164,13 +164,13 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir + ' --iteration_f='+str(iteration_step) + \ ' --iteration_adv='+str(i) - if(serveur): + if(server): run_job('eval_'+str(model), label, - command, iteration_step, gpu=True) + command, iteration_step, name_account, gpu=True) else: os.system('python '+ command) - if(serveur): + if(server): wait(label) for my_model in models: @@ -180,7 +180,7 @@ def run_iteration(iteration_step, label, data_dir_prot, data_dir_cover, data_dir return(True) -def run_protocol(begin_step, serveur, number_steps, label, data_dir_prot, data_dir_cover, data_dir_stego_0, cost_dir, +def run_protocol(begin_step, server, name_account, number_steps, label, data_dir_prot, data_dir_cover, data_dir_stego_0, cost_dir, image_size, QF, folder_model, permutation_files, version_eff, stride, n_loops, model, train_size, valid_size, test_size, attack, attack_last, emb_rate, batch_adv, n_iter_max_backpack, N_samples, tau_0, precision, lr, strategy, @@ -208,7 +208,7 @@ def run_protocol(begin_step, serveur, number_steps, label, data_dir_prot, data_d image_size, QF, folder_model, permutation_files, version_eff, stride, n_loops, model, train_size, valid_size, test_size, attack, attack_last, emb_rate, batch_adv, n_iter_max_backpack, N_samples, tau_0, precision, lr, - num_of_threads, training_dictionnary, spatial, strategy, serveur) + num_of_threads, training_dictionnary, spatial, strategy, server, name_account) iteration_step += 1 @@ -217,7 +217,8 @@ if __name__ == '__main__': argparser = argparse.ArgumentParser(sys.argv[0]) argparser.add_argument('--begin_step', type=int) - argparser.add_argument('--serveur', type=str, default='no') + argparser.add_argument('--server', type=str, default='no') + argparser.add_argument('--name_account', type=str, default='srp', help='If run on a server, name of the account from which launch the computations') argparser.add_argument('--number_steps', type=int, default=10) argparser.add_argument('--folder_model', type=str, help='The path to the folder where the architecture of models are saved') @@ -301,6 +302,6 @@ if __name__ == '__main__': params = argparser.parse_args() - params.serveur = params.serveur=='yes' + params.server = params.server=='yes' run_protocol(**vars(params)) diff --git a/script_train.py b/script_train.py index 8a37be4..aa1cf0d 100644 --- a/script_train.py +++ b/script_train.py @@ -67,7 +67,7 @@ def run_training(iteration_step, model, net, trainGlobalConfig, data_dir_prot, s collate_fn=lambda x: my_collate(x, pair_training=pair_training) ) - save_path = data_dir_prot + 'train_'+model+'_'+str(iteration_step) + '/' + save_path = data_dir_prot + 'train_' + model + '_' + str(iteration_step) + '/' #save_path = data_dir_prot + 'train_'+model+'_stego_'+str(iteration_step) +'/' #save_path = data_dir_prot + 'train_'+model+'_'+str(iteration_step) +'_'+str(emb_rate)+'/' if not os.path.exists(save_path): @@ -77,11 +77,6 @@ def run_training(iteration_step, model, net, trainGlobalConfig, data_dir_prot, s save_path=save_path, model_str=model, train_on_cost_map=train_on_cost_map) print(f'{fitter.base_dir}') - - # if(model == 'efnet'): - # # Load the pretrained model - # fitter.load(folder_model+version_eff+"-imagenet") - if(load_checkpoint is not None): save_path_load = save_path #save_path_load = data_dir_prot + 'train_'+model+'_'+str(iteration_step) +'/' @@ -142,6 +137,7 @@ def train(iteration_step, model, folder_model, data_dir_prot, permutation_files, train_valid_test_transforms = [ get_train_transforms(), get_valid_transforms(), None] + # TRAIN FIRST WITH COST MAPS datasets = [DatasetRetriever(image_names, folder_model, QF, emb_rate, image_size, data_dir_cover, data_dir_stego_0, cost_dir, data_dir_prot, H1_filter, L1_filter, L2_filter, indexs_db, train_on_cost_map=True, @@ -171,12 +167,26 @@ def train(iteration_step, model, folder_model, data_dir_prot, permutation_files, start_emb_rate = emb_rate - # Train first with cost map train, val, test = run_training(iteration_step, model, net, trainGlobalConfig, data_dir_prot, start_emb_rate, emb_rate, pair_training, version_eff, load_model, train_dataset, validation_dataset, test_dataset, folder_model, train_on_cost_map=True) print(train, val, test) + # TRAIN THEN WITH STEGO IMAGES + if(model == 'efnet'): + net = get_net_ef(version_eff, stride).to(device) + trainGlobalConfig = TrainGlobalConfig_ef( + num_of_threads, batch_size_classif, epoch_num) + elif(model == 'xunet'): + net = get_net_xu(folder_model, n_loops, image_size).to(device) + trainGlobalConfig = TrainGlobalConfig_xu( + num_of_threads, batch_size_classif, epoch_num) + elif(model == 'srnet'): + net = get_net_sr(image_size).to(device) + net.init() + trainGlobalConfig = TrainGlobalConfig_sr( + num_of_threads, batch_size_classif, epoch_num) + datasets = [DatasetRetriever(image_names, folder_model, QF, emb_rate, image_size, data_dir_cover, data_dir_stego_0, cost_dir, data_dir_prot, H1_filter, L1_filter, L2_filter, indexs_db, train_on_cost_map=False, diff --git a/write_jobs.py b/write_jobs.py index 4e32f13..e94c8a3 100644 --- a/write_jobs.py +++ b/write_jobs.py @@ -120,7 +120,7 @@ def write_command(mode, iteration_step, model, data_dir_prot, data_dir_cover, da return(com) -def run_job(mode, label, command, iteration, num_of_threads=None, +def run_job(mode, label, command, iteration, name_account, num_of_threads=None, num_batch=None, gpu=True): name = label + '_' + str(iteration) + '_' + mode @@ -136,14 +136,17 @@ def run_job(mode, label, command, iteration, num_of_threads=None, fh.writelines("#SBATCH --ntasks=1\n") fh.writelines("#SBATCH --hint=nomultithread\n") fh.writelines("#SBATCH --time=15:00:00 \n") + fh.writelines("#SBATCH --account=%s@gpu\n" % name_account) else: fh.writelines("#SBATCH --time=2:00:00 \n") + fh.writelines("#SBATCH --account=%s@cpu\n" % name_account) if(mode == 'attack'): fh.writelines("#SBATCH -C v100-32g\n") fh.writelines("#SBATCH --array="+str(0)+'-'+str(num_batch)+" \n") fh.writelines("module purge\n") + fh.writelines("module load pytorch-gpu/py3/1.7.1\n") # WRITE LOAD MODULES fh.writelines("python -u " + command) -- GitLab