Browse Source

fix lr, add relu to the last conv layer, add l2 norm, add dropout. da result to 60%, source only result to 52%.

master
wogong 5 years ago
parent
commit
7ffd03ff34
  1. 2
      datasets/gtsrb.py
  2. 2
      datasets/synsigns.py
  3. 3
      experiments/synsigns_gtsrb.py
  4. 6
      experiments/synsigns_gtsrb_src_only.py
  5. 22
      models/model.py

2
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))
])

2
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))
])

3
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('_'))

6
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"""

22
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)

Loading…
Cancel
Save