diff --git a/datasets/gtsrb.py b/datasets/gtsrb.py index 92fa9ba..b2bfed4 100644 --- a/datasets/gtsrb.py +++ b/datasets/gtsrb.py @@ -15,7 +15,7 @@ def get_gtsrb(dataset_root, batch_size, train): # image pre-processing pre_process = transforms.Compose([ - transforms.Resize((40, 40)), + transforms.Resize((48, 48)), transforms.ToTensor(), transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)) ]) diff --git a/datasets/synsigns.py b/datasets/synsigns.py index 5d314a7..fab1e4a 100644 --- a/datasets/synsigns.py +++ b/datasets/synsigns.py @@ -43,7 +43,7 @@ def get_synsigns(dataset_root, batch_size, train): """Get Synthetic Signs datasets loader.""" # image pre-processing pre_process = transforms.Compose([ - transforms.Resize((40, 40)), + transforms.Resize((48, 48)), transforms.ToTensor(), transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)) ]) diff --git a/experiments/synsigns_gtsrb.py b/experiments/synsigns_gtsrb.py index 7db5f99..b54f466 100644 --- a/experiments/synsigns_gtsrb.py +++ b/experiments/synsigns_gtsrb.py @@ -13,7 +13,7 @@ class Config(object): # params for path model_name = "synsigns-gtsrb" model_base = '/home/wogong/models/pytorch-dann' - note = 'fix_lr' + note = '48-fixrelu-l2-dropout' model_root = os.path.join(model_base, model_name, note + '_' + datetime.datetime.now().strftime('%m%d_%H%M%S')) os.makedirs(model_root) config = os.path.join(model_root, 'config.txt') @@ -51,6 +51,7 @@ class Config(object): # params for SGD optimizer lr = 0.01 momentum = 0.9 + weight_decay = 1e-6 def __init__(self): public_props = (name for name in dir(self) if not name.startswith('_')) diff --git a/experiments/synsigns_gtsrb_src_only.py b/experiments/synsigns_gtsrb_src_only.py index 9d611ce..ae0528f 100644 --- a/experiments/synsigns_gtsrb_src_only.py +++ b/experiments/synsigns_gtsrb_src_only.py @@ -13,7 +13,7 @@ class Config(object): # params for path model_name = "synsigns-gtsrb" model_base = '/home/wogong/models/pytorch-dann' - note = 'src-only' + note = 'src-only-48-fixrelu-l2-dropout' model_root = os.path.join(model_base, model_name, note + '_' + datetime.datetime.now().strftime('%m%d_%H%M%S')) os.makedirs(model_root) config = os.path.join(model_root, 'config.txt') @@ -23,6 +23,7 @@ class Config(object): # params for datasets and data loader batch_size = 128 + img_size = 40 # params for source dataset src_dataset = "synsigns" @@ -45,12 +46,13 @@ class Config(object): save_step = 100 eval_step = 5 - manual_seed = None + manual_seed = 42 alpha = 0 # params for optimizing models lr = 0.01 momentum = 0.9 + weight_decay = 1e-6 def __init__(self): """save config to model root""" diff --git a/models/model.py b/models/model.py index eb72167..5d2747e 100644 --- a/models/model.py +++ b/models/model.py @@ -213,24 +213,26 @@ class GTSRBmodel(nn.Module): self.restored = False self.feature = nn.Sequential( - nn.Conv2d(in_channels=3, out_channels=96, kernel_size=(5, 5)), # 36 + nn.Conv2d(in_channels=3, out_channels=96, kernel_size=(5, 5)), # 36 ; 44 nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 18 - nn.Conv2d(in_channels=96, out_channels=144, kernel_size=(3, 3)), # 16 + nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 18 ; 22 + nn.Conv2d(in_channels=96, out_channels=144, kernel_size=(3, 3)), # 16 ; 20 nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 8 - nn.Conv2d(in_channels=144, out_channels=256, kernel_size=(5, 5)), # 4 - nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 2 + nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 8 ; 10 + nn.Conv2d(in_channels=144, out_channels=256, kernel_size=(5, 5)), # 4 ; 6 + nn.Dropout2d(), + nn.ReLU(inplace=True), + nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)), # 2 ; 3 ) self.classifier = nn.Sequential( - nn.Linear(256 * 2 * 2, 512), + nn.Linear(256 * 3 * 3, 512), nn.ReLU(inplace=True), nn.Linear(512, 43), ) self.discriminator = nn.Sequential( - nn.Linear(256 * 2 * 2, 1024), + nn.Linear(256 * 3 * 3, 1024), nn.ReLU(inplace=True), nn.Linear(1024, 1024), nn.ReLU(inplace=True), @@ -238,9 +240,9 @@ class GTSRBmodel(nn.Module): ) def forward(self, input_data, alpha = 1.0): - input_data = input_data.expand(input_data.data.shape[0], 3, 40, 40) + input_data = input_data.expand(input_data.data.shape[0], 3, 48, 48) feature = self.feature(input_data) - feature = feature.view(-1, 256 * 2 * 2) + feature = feature.view(-1, 256 * 3 * 3) reverse_feature = ReverseLayerF.apply(feature, alpha) class_output = self.classifier(feature) domain_output = self.discriminator(reverse_feature)