Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 65 additions & 16 deletions hyperswap/src/networks/masknet.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,88 @@ def __init__(self, config_parser : ConfigParser) -> None:
self.config_input_channels = config_parser.getint('training.model.masker', 'input_channels')
self.config_output_channels = config_parser.getint('training.model.masker', 'output_channels')
self.config_num_filters = config_parser.getint('training.model.masker', 'num_filters')
self.down_samples = self.create_down_samples(self.config_input_channels, self.config_num_filters)
self.up_samples = self.create_up_samples(self.config_num_filters)
self.config_output_size = config_parser.getint('training.model.generator', 'output_size')
self.scale_down_samples = self.create_scale_down_samples()
self.base_down_samples = self.create_base_down_samples()
self.base_up_samples = self.create_base_up_samples()
self.scale_up_samples = self.create_scale_up_samples()
self.bottleneck = BottleNeck(self.config_num_filters * 4)
self.conv = nn.Conv2d(self.config_num_filters, self.config_output_channels, kernel_size = 1)
self.sigmoid = nn.Sigmoid()

@staticmethod
def create_down_samples(input_channels : int, num_filters : int) -> nn.ModuleList:
return nn.ModuleList(
def create_scale_down_samples(self) -> nn.ModuleList:
scale_down_samples = nn.ModuleList(
[
DownSample(input_channels, num_filters),
DownSample(num_filters, num_filters * 2),
DownSample(num_filters * 2, num_filters * 4)
DownSample(self.config_input_channels, self.config_num_filters)
])

@staticmethod
def create_up_samples(num_filters : int) -> nn.ModuleList:
return nn.ModuleList(
if self.config_output_size == 512:
scale_down_samples.extend(
[
DownSample(self.config_num_filters, self.config_num_filters)
])

if self.config_output_size == 1024:
scale_down_samples.extend(
[
DownSample(self.config_num_filters, self.config_num_filters),
DownSample(self.config_num_filters, self.config_num_filters)
])

return scale_down_samples

def create_base_down_samples(self) -> nn.ModuleList:
base_down_samples = nn.ModuleList(
[
DownSample(self.config_num_filters, self.config_num_filters * 2),
DownSample(self.config_num_filters * 2, self.config_num_filters * 4)
])

return base_down_samples

def create_base_up_samples(self) -> nn.ModuleList:
base_up_samples = nn.ModuleList(
[
UpSample(num_filters * 4, num_filters * 2),
UpSample(num_filters * 2, num_filters),
UpSample(num_filters, num_filters)
UpSample(self.config_num_filters * 4, self.config_num_filters * 2),
UpSample(self.config_num_filters * 2, self.config_num_filters),
UpSample(self.config_num_filters, self.config_num_filters)
])

return base_up_samples

def create_scale_up_samples(self) -> nn.ModuleList:
scale_up_samples = nn.ModuleList()

if self.config_output_size == 512:
scale_up_samples.extend(
[
UpSample(self.config_num_filters, self.config_num_filters)
])

if self.config_output_size == 1024:
scale_up_samples.extend(
[
UpSample(self.config_num_filters, self.config_num_filters),
UpSample(self.config_num_filters, self.config_num_filters)
])

return scale_up_samples

def forward(self, input_tensor : Tensor, input_feature : Feature) -> Mask:
output_mask = torch.cat([ input_tensor, input_feature ], dim = 1)

for down_sample in self.down_samples:
for down_sample in self.scale_down_samples:
output_mask = down_sample(output_mask)

for down_sample in self.base_down_samples:
output_mask = down_sample(output_mask)

output_mask = self.bottleneck(output_mask)

for up_sample in self.up_samples:
for up_sample in self.base_up_samples:
output_mask = up_sample(output_mask)

for up_sample in self.scale_up_samples:
output_mask = up_sample(output_mask)

output_mask = self.conv(output_mask)
Expand Down
6 changes: 5 additions & 1 deletion hyperswap/tests/test_networks.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,15 @@ def test_aad_with_unet(output_size : int) -> None:
assert output_tensor.shape == (1, 3, output_size, output_size)


@pytest.mark.parametrize('output_size', [ 256, 512 ])
@pytest.mark.parametrize('output_size', [ 256, 512, 1024 ])
def test_mask_net(output_size : int) -> None:
config_parser = ConfigParser()
config_parser.read_dict(
{
'training.model.generator':
{
'output_size': str(output_size)
},
'training.model.masker':
{
'input_channels': '67',
Expand Down
Loading