diff --git a/bob/pad/face/config/pytorch/autoencoder/autoencoder_model_v2.pth b/bob/pad/face/config/pytorch/autoencoder/autoencoder_model_v2.pth deleted file mode 100644 index 6158355e51188271e64a60f73ba6cd6a5053e8a9..0000000000000000000000000000000000000000 Binary files a/bob/pad/face/config/pytorch/autoencoder/autoencoder_model_v2.pth and /dev/null differ diff --git a/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/__init__.py b/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/bob/pad/face/config/pytorch/autoencoder/autoencoder_config_v2.py b/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_aggr_db.py similarity index 90% rename from bob/pad/face/config/pytorch/autoencoder/autoencoder_config_v2.py rename to bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_aggr_db.py index 28d2c69c8e538e4a53dc0e0b6bee6649517baca9..59ef96f29ce23c366a81d9c6df0444eb5c6a30a0 100644 --- a/bob/pad/face/config/pytorch/autoencoder/autoencoder_config_v2.py +++ b/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_aggr_db.py @@ -20,7 +20,7 @@ from torch import nn Note: do not change names of the below constants. """ NUM_EPOCHS = 100 # Maximum number of epochs -BATCH_SIZE = 4 # Size of the batch +BATCH_SIZE = 8 # Size of the batch LEARNING_RATE = 1e-3 # Learning rate @@ -62,7 +62,7 @@ class Network(nn.Module): def __init__(self): super(Network, self).__init__() self.encoder = nn.Sequential( - nn.Conv2d(3, 16, 3, stride=1, padding=1), + nn.Conv2d(3, 16, 3, stride=1, padding=1), nn.ReLU(True), nn.MaxPool2d(2, stride=2), nn.Conv2d(16, 8, 3, stride=1, padding=1), @@ -77,11 +77,11 @@ class Network(nn.Module): ) self.decoder = nn.Sequential( - nn.ConvTranspose2d(8, 8, 3, stride=1, padding=0), + nn.ConvTranspose2d(8, 8, 3, stride=1, padding=0), nn.ReLU(True), - nn.ConvTranspose2d(8, 16, 3, stride=2, padding=0), + nn.ConvTranspose2d(8, 16, 3, stride=2, padding=0), nn.ReLU(True), - nn.ConvTranspose2d(16, 8, 3, stride=2, padding=2), + nn.ConvTranspose2d(16, 8, 3, stride=2, padding=2), nn.ReLU(True), nn.ConvTranspose2d(8, 3, 2, stride=2, padding=3), nn.Tanh() diff --git a/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_celeba.py b/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_celeba.py new file mode 100644 index 0000000000000000000000000000000000000000..33186376eafb883d25a3fb34eed7b5d6f2c8adb9 --- /dev/null +++ b/bob/pad/face/config/pytorch/autoencoder/autoencoder_v2/autoencoder_config_celeba.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +@author: Olegs Nikisins +""" +#============================================================================== +# Import here: + +from torchvision import transforms + +from bob.pad.face.database import CELEBAPadDatabase + +from torch import nn + + +#============================================================================== +# Define parameters here: + +""" +Note: do not change names of the below constants. +""" +NUM_EPOCHS = 100 # Maximum number of epochs +BATCH_SIZE = 128 # Size of the batch +LEARNING_RATE = 1e-3 # Learning rate + + +""" +Transformations to be applied sequentially to the input PIL image. +Note: the variable name ``transform`` must be the same in all configuration files. +""" +transform = transforms.Compose([transforms.Resize((64, 64)), + transforms.ToTensor(), + transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) + ]) + + +""" +Set the parameters of the DataFolder dataset class. +Note: do not change the name ``kwargs``. +""" +bob_hldi_instance = CELEBAPadDatabase(original_directory = "", original_extension = "") + +kwargs = {} +kwargs["data_folder"] = "NO NEED TO SET HERE, WILL BE SET IN THE TRAINING SCRIPT" +kwargs["transform"] = transform +kwargs["extension"] = '.hdf5' +kwargs["bob_hldi_instance"] = bob_hldi_instance +kwargs["hldi_type"] = "pad" +kwargs["groups"] = ['train'] +kwargs["protocol"] = 'grandtest' +kwargs["purposes"] = ['real'] +kwargs["allow_missing_files"] = True + + +""" +Define the network to be trained as a class, named ``Network``. +Note: Do not change the name of the below class. +""" + +class Network(nn.Module): + + def __init__(self): + super(Network, self).__init__() + self.encoder = nn.Sequential( + nn.Conv2d(3, 16, 3, stride=1, padding=1), + nn.ReLU(True), + nn.MaxPool2d(2, stride=2), + nn.Conv2d(16, 8, 3, stride=1, padding=1), + nn.ReLU(True), + nn.MaxPool2d(2, stride=2), + nn.Conv2d(8, 8, 3, stride=1, padding=1), + nn.ReLU(True), + nn.MaxPool2d(2, stride=1), + nn.Conv2d(8, 8, 3, stride=1, padding=1), + nn.ReLU(True), + nn.MaxPool2d(2, stride=2) + + ) + self.decoder = nn.Sequential( + nn.ConvTranspose2d(8, 8, 3, stride=1, padding=0), + nn.ReLU(True), + nn.ConvTranspose2d(8, 16, 3, stride=2, padding=0), + nn.ReLU(True), + nn.ConvTranspose2d(16, 8, 3, stride=2, padding=2), + nn.ReLU(True), + nn.ConvTranspose2d(8, 3, 2, stride=2, padding=3), + nn.Tanh() + ) + + def forward(self, x): + x = self.encoder(x) + x = self.decoder(x) + return x + +""" +Define the loss to be used for training. +Note: do not change the name of the below variable. +""" +loss_type = nn.MSELoss() diff --git a/bob/pad/face/config/pytorch/autoencoder/noise_autoencoder_v1/__init__.py b/bob/pad/face/config/pytorch/autoencoder/noise_autoencoder_v1/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/bob/pad/face/config/pytorch/autoencoder/noise_autoencoder_v1/autoencoder_config_celeba.py b/bob/pad/face/config/pytorch/autoencoder/noise_autoencoder_v1/autoencoder_config_celeba.py new file mode 100644 index 0000000000000000000000000000000000000000..0b66d5a869714cb919b4994ab4ddd1270ab1de95 --- /dev/null +++ b/bob/pad/face/config/pytorch/autoencoder/noise_autoencoder_v1/autoencoder_config_celeba.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +@author: Olegs Nikisins +""" +#============================================================================== +# Import here: + +from torchvision import transforms + +from bob.pad.face.database import CELEBAPadDatabase + +from torch import nn + + +#============================================================================== +# Define parameters here: + +""" +Note: do not change names of the below constants. +""" +NUM_EPOCHS = 100 # Maximum number of epochs +BATCH_SIZE = 128 # Size of the batch +LEARNING_RATE = 1e-3 # Learning rate + + +""" +Transformations to be applied sequentially to the input PIL image. +Note: the variable name ``transform`` must be the same in all configuration files. +""" +transform = transforms.Compose([transforms.Resize((64, 64)), + transforms.ToTensor(), + transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) + ]) + + +""" +Set the parameters of the DataFolder dataset class. +Note: do not change the name ``kwargs``. +""" +bob_hldi_instance = CELEBAPadDatabase(original_directory = "", original_extension = "") + +kwargs = {} +kwargs["data_folder"] = "NO NEED TO SET HERE, WILL BE SET IN THE TRAINING SCRIPT" +kwargs["transform"] = transform +kwargs["extension"] = '.hdf5' +kwargs["bob_hldi_instance"] = bob_hldi_instance +kwargs["hldi_type"] = "pad" +kwargs["groups"] = ['train'] +kwargs["protocol"] = 'grandtest' +kwargs["purposes"] = ['real'] +kwargs["allow_missing_files"] = True + + +""" +Define the network to be trained as a class, named ``Network``. +Note: Do not change the name of the below class. +""" +class Network(nn.Module): + + def __init__(self): + super(Network, self).__init__() + self.encoder = nn.Sequential( + nn.Conv2d(3, 64, 3, stride=3, padding=1), # b, 16, 10, 10 + nn.ReLU(True), + nn.MaxPool2d(2, stride=2), # b, 16, 5, 5 + nn.Conv2d(64, 8, 3, stride=2, padding=1), # b, 8, 3, 3 + nn.ReLU(True), + nn.MaxPool2d(2, stride=1) # b, 8, 2, 2 + ) + self.decoder = nn.Sequential( + nn.ConvTranspose2d(8, 64, 3, stride=2), # b, 16, 5, 5 + nn.ReLU(True), + nn.ConvTranspose2d(64, 8, 5, stride=3, padding=1), # b, 8, 15, 15 + nn.ReLU(True), + nn.ConvTranspose2d(8, 3, 2, stride=2, padding=1), # b, 1, 28, 28 + nn.Tanh() + ) + + self.encoder_diff = nn.Sequential( + nn.Conv2d(3, 64, 3, stride=3, padding=1), # b, 16, 10, 10 + nn.ReLU(True), + nn.MaxPool2d(2, stride=2), # b, 16, 5, 5 + nn.Conv2d(64, 8, 3, stride=2, padding=1), # b, 8, 3, 3 + nn.ReLU(True), + nn.MaxPool2d(2, stride=1) # b, 8, 2, 2 + ) + self.decoder_diff = nn.Sequential( + nn.ConvTranspose2d(8, 64, 3, stride=2), # b, 16, 5, 5 + nn.ReLU(True), + nn.ConvTranspose2d(64, 8, 5, stride=3, padding=1), # b, 8, 15, 15 + nn.ReLU(True), + nn.ConvTranspose2d(8, 3, 2, stride=2, padding=1), # b, 1, 28, 28 + nn.Tanh() + ) + + def forward(self, x): + + x = x - self.decoder( self.encoder(x) ) # now x represents reconstruction error + + x_diff = x.clone() # clone above reconstruction error + + # encode decode the reconstruction error: + x = self.encoder_diff(x) + x = self.decoder_diff(x) + + return x, x_diff + +""" +Define the loss to be used for training. +Note: do not change the name of the below variable. +""" +loss_type = nn.MSELoss()