def _build_model(self):
     self.input_module = ConvBlock(
         input_channels=self.input_channels,
         output_channels=self.feature_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
     if self.num_hidden_convolution_blocks > 0:
         self.processing_module = ConvMultiBlock(
             input_channels=self.feature_channels,
             feature_channels=self.feature_channels,
             output_channels=self.feature_channels,
             kernel_size=self.kernel_size,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             batch_norm=self.batch_norm,
             num_convolution_blocks=self.num_hidden_convolution_blocks
         )
     else:
         self.processing_module = None
     self.output_module = ConvBlock(
         input_channels=self.feature_channels,
         output_channels=self.output_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
 def _build_model(self):
     self.input_module = ConvBlock(
         input_channels=self.input_channels,
         output_channels=self.feature_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
     if self.num_residual_blocks > 0:
         self.processing_module = ResNetMultiBlock(
                 input_channels=self.feature_channels,
                 feature_channels=self.feature_channels,
                 kernel_size=self.kernel_size,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
                 num_resnet_blocks=self.num_residual_blocks,
                 num_hidden_layers=self.layers_per_residual_block,
             )
     else:
         self.processing_module = None
     self.output_module = ConvBlock(
         input_channels=self.feature_channels,
         output_channels=self.output_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
Example #3
0
 def _build_model(self):
     if self.num_convolution_blocks_hr > 0:
         self.convolutions_hr = ConvMultiBlock(
             input_channels=self.input_channels,
             feature_channels=self.feature_channels_hr,
             output_channels=self.feature_channels_hr,
             kernel_size=self.kernel_size_hr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             batch_norm=self.batch_norm,
             num_convolution_blocks=self.num_convolution_blocks_hr)
     else:
         self.convolutions_hr = None
     self.downsampling_23 = ConvBlock(
         input_channels=self.feature_channels_hr
         if self.num_convolution_blocks_hr > 0 else self.input_channels,
         output_channels=self.feature_channels_mr,
         kernel_size=self.kernel_size_hr,
         stride=(2, 3),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate)
     if self.num_convolution_blocks_mr > 0:
         self.convolutions_mr = ConvMultiBlock(
             input_channels=self.feature_channels_mr,
             feature_channels=self.feature_channels_mr,
             output_channels=self.feature_channels_mr,
             kernel_size=self.kernel_size_mr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             batch_norm=self.batch_norm,
             num_convolution_blocks=self.num_convolution_blocks)
     else:
         self.convolutions_mr = None
     self.downsampling_21 = ConvBlock(
         input_channels=self.feature_channels_mr,
         output_channels=self.feature_channels_lr
         if self.num_convolution_blocks_lr > 0 else self.output_channels,
         kernel_size=self.kernel_size_mr,
         stride=(2, 1),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate)
     if self.num_convolution_blocks_lr > 0:
         self.convolutions_lr = ConvMultiBlock(
             input_channels=self.feature_channels_lr,
             feature_channels=self.feature_channels_lr,
             output_channels=self.output_channels,
             kernel_size=self.kernel_size_lr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             batch_norm=self.batch_norm,
             num_convolution_blocks=self.num_convolution_blocks_lr)
     else:
         self.convolutions_lr = None
 def _processing_module(self, input_channels, **kwargs):
     if 'feature_channels' in kwargs.keys():
         feature_channels = kwargs['feature_channels']
     else:
         feature_channels = input_channels
     if self.layers_per_module == 0:
         module = nn.Identity()
     elif self.layers_per_module == 1:
         module = ConvBlock(
             input_channels=input_channels,
             output_channels=input_channels,
             kernel_size=self.kernel_size,
             padding_mode=self.padding_mode,
             use_batch_norm=self.batch_norm,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
         )
     else:
         layers = [
             ConvBlock(
                 input_channels=input_channels,
                 output_channels=feature_channels,
                 kernel_size=self.kernel_size,
                 padding_mode=self.padding_mode,
                 use_batch_norm=self.batch_norm,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
             )
         ]
         for i in range(self.layers_per_module - 2):
             layers += [
                 ConvBlock(
                     input_channels=feature_channels,
                     output_channels=feature_channels,
                     kernel_size=self.kernel_size,
                     padding_mode=self.padding_mode,
                     use_batch_norm=self.batch_norm,
                     leaky_slope=self.leaky_slope,
                     dropout_rate=self.dropout_rate,
                 )
             ]
         layers += [
             ConvBlock(
                 input_channels=feature_channels,
                 output_channels=input_channels,
                 kernel_size=self.kernel_size,
                 padding_mode=self.padding_mode,
                 use_batch_norm=self.batch_norm,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
             )
         ]
         module = nn.Sequential(*layers)
     return module
    def _build_init_module(self, input_channels, output_channels):
        """
        Build an input module to process the data. For now, we assume that input has been processed
        beforehand and we just deal with this processed input. No raw data processing is supported by default.
        However, enabling init convolution enables the network to cope with raw data, as well.
        Then, see that the input_channels match the number of input features.
        """
        block = []
        if self.init_upsampling:
            # upsample image to final target resolution
            block += [
                nn.Upsample(scale_factor=(4, 3), mode=self.interpolation_mode)
            ]

        if self.init_convolution:
            # process the input with a convolution block
            block += ConvBlock(input_channels=input_channels,
                               output_channels=output_channels,
                               kernel_size=self.kernel_size,
                               padding_mode=self.padding_mode,
                               leaky_slope=self.leaky_slope,
                               dropout_rate=self.dropout_rate,
                               use_batch_norm=self.batch_norm)

        self.upsample_input = nn.Sequential(*block)
 def _upsampling_feature_module(self, input_channels, output_channels,
                                scale_factor, **kwargs):
     module = ConvBlock(input_channels=input_channels,
                        output_channels=output_channels,
                        kernel_size=self.kernel_size,
                        padding_mode=self.padding_mode,
                        leaky_slope=self.leaky_slope,
                        dropout_rate=self.dropout_rate,
                        use_batch_norm=self.batch_norm)
     return module
Example #7
0
 def _build_model(self):
     self._build_hr_module()
     self.downsampling_23 = ConvBlock(
         input_channels=self.feature_channels_hr,
         output_channels=self.feature_channels_mr,
         kernel_size=self.kernel_size_hr,
         stride=(2, 3),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate)
     self._build_mr_module()
     self.downsampling_21 = ConvBlock(
         input_channels=self.feature_channels_mr,
         output_channels=self.feature_channels_lr,
         kernel_size=self.kernel_size_mr,
         stride=(2, 1),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate)
     self._build_lr_module()
Example #8
0
 def _build_model(self):
     self.upsampling_module = nn.Sequential(
         ResamplingBlock2D(input_channels=self.input_channels,
                           scale_factor=self.scale_factor,
                           interpolation_mode=self.interpolation_mode),
         ConvBlock(
             input_channels=self.input_channels,
             output_channels=self.feature_channels,
             kernel_size=self.kernel_size,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             use_batch_norm=self.batch_norm,
         ),
     )
     if self.num_convolution_blocks > 0:
         self.processing_module = ConvMultiBlock(
             input_channels=self.feature_channels,
             feature_channels=self.feature_channels,
             output_channels=self.feature_channels,
             kernel_size=self.kernel_size,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             batch_norm=self.batch_norm,
             num_convolution_blocks=self.num_convolution_blocks)
     else:
         self.processing_module = None
     self.output_module = ConvBlock(
         input_channels=self.feature_channels,
         output_channels=self.output_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope if self.output_activation else 1.0,
         dropout_rate=self.dropout_rate if self.output_activation else 0.0,
         use_batch_norm=self.batch_norm
         if self.output_activation else False,
     )
Example #9
0
 def _build_lr_module(self):
     if self.num_inception_blocks_lr > 0:
         layers = []
         for _ in range(self.num_inception_blocks_lr):
             layers += [
                 InceptionBlock(
                     input_channels=self.feature_channels_lr,
                     feature_channels=self.feature_channels_lr,
                     output_channels=self.feature_channels_lr,
                     padding_mode=self.padding_mode,
                     leaky_slope=self.leaky_slope,
                     dropout_rate=self.dropout_rate,
                     use_batch_norm=self.batch_norm,
                 )
             ]
         layers += [
             ConvBlock(
                 input_channels=self.feature_channels_lr,
                 output_channels=self.output_channels,
                 kernel_size=self.kernel_size_lr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
             )
         ]
         self.module_lr = nn.Sequential(*layers)
     else:
         self.module_lr = ConvBlock(
             input_channels=self.feature_channels_lr,
             output_channels=self.output_channels,
             kernel_size=self.kernel_size_lr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             use_batch_norm=self.batch_norm,
         )
Example #10
0
 def _build_model(self):
     self.input_module = ConvBlock(
         input_channels=self.input_channels,
         output_channels=self.feature_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
     if self.num_residual_blocks > 0:
         layers = []
         for _ in range(self.num_inception_blocks):
             layers += [
                 InceptionBlock(
                     input_channels=self.feature_channels,
                     feature_channels=self.feature_channels,
                     output_channels=self.feature_channels,
                     padding_mode=self.padding_mode,
                     leaky_slope=self.leaky_slope,
                     dropout_rate=self.dropout_rate,
                     use_batch_norm=self.batch_norm,
                 )
             ]
         self.processing_module = nn.Sequential(*layers)
     else:
         self.processing_module = None
     self.output_module = ConvBlock(
         input_channels=self.feature_channels,
         output_channels=self.output_channels,
         kernel_size=self.kernel_size,
         padding_mode=self.padding_mode,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate,
         use_batch_norm=self.batch_norm,
     )
Example #11
0
 def _build_model(self):
     if self.num_residual_blocks_hr > 0:
         self.module_hr = nn.Sequential(
             ConvBlock(
                 input_channels=self.input_channels,
                 output_channels=self.feature_channels_hr,
                 kernel_size=self.kernel_size_hr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
             ),
             ResNetMultiBlock(
                 input_channels=self.feature_channels_hr,
                 feature_channels=self.feature_channels_hr,
                 kernel_size=self.kernel_size_hr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
                 num_resnet_blocks=self.num_residual_blocks_hr,
                 num_hidden_layers=self.layers_per_residual_block,
             )
         )
     else:
         self.module_hr = ConvBlock(
             input_channels=self.input_channels,
             output_channels=self.feature_channels_hr,
             kernel_size=self.kernel_size_hr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             use_batch_norm=self.batch_norm,
         )
     self.downsampling_23 = ConvBlock(
         input_channels=self.feature_channels_hr,
         output_channels=self.feature_channels_mr,
         kernel_size=self.kernel_size_hr,
         stride=(2, 3),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate
     )
     if self.num_residual_blocks_mr > 0:
         self.module_mr = ResNetMultiBlock(
                 input_channels=self.feature_channels_mr,
                 feature_channels=self.feature_channels_mr,
                 kernel_size=self.kernel_size_mr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
                 num_resnet_blocks=self.num_residual_blocks_mr,
                 num_hidden_layers=self.layers_per_residual_block,
             )
     else:
         self.module_mr = None
     self.downsampling_21 = ConvBlock(
         input_channels=self.feature_channels_mr,
         output_channels=self.feature_channels_lr,
         kernel_size=self.kernel_size_mr,
         stride=(2, 1),
         padding_mode=self.padding_mode,
         use_batch_norm=self.batch_norm,
         leaky_slope=self.leaky_slope,
         dropout_rate=self.dropout_rate
     )
     if self.num_residual_blocks_lr > 0:
         self.module_lr = nn.Sequential(
             ResNetMultiBlock(
                 input_channels=self.feature_channels_lr,
                 feature_channels=self.feature_channels_lr,
                 kernel_size=self.kernel_size_lr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
                 num_resnet_blocks=self.num_residual_blocks_lr,
                 num_hidden_layers = self.layers_per_residual_block,
             ),
             ConvBlock(
                 input_channels=self.feature_channels_lr,
                 output_channels=self.output_channels,
                 kernel_size=self.kernel_size_lr,
                 padding_mode=self.padding_mode,
                 leaky_slope=self.leaky_slope,
                 dropout_rate=self.dropout_rate,
                 use_batch_norm=self.batch_norm,
             )
         )
     else:
         self.module_lr = ConvBlock(
             input_channels=self.feature_channels_lr,
             output_channels=self.output_channels,
             kernel_size=self.kernel_size_lr,
             padding_mode=self.padding_mode,
             leaky_slope=self.leaky_slope,
             dropout_rate=self.dropout_rate,
             use_batch_norm=self.batch_norm,
         )
Example #12
0
    def __init__(self, **kwargs):
        super(self.__class__, self).__init__(**kwargs)
        if self.feature_channels is None:
            self.feature_channels = 64
        self._require_not_none('input_channels', 'output_channels')

        self.model = nn.Sequential(
            ResNetMultiBlock(input_channels=self.input_channels,
                             feature_channels=self.input_channels,
                             output_channels=self.input_channels,
                             kernel_size=3,
                             padding_mode=self.padding_mode,
                             leaky_slope=self.leaky_slope,
                             dropout_rate=self.dropout_rate,
                             use_batch_norm=self.batch_norm,
                             num_resnet_blocks=self.num_residual_blocks,
                             num_hidden_layers=self.layers_per_residual_block -
                             1,
                             output_activation=True),
            ResamplingBlock2D(input_channels=self.input_channels,
                              output_channels=self.input_channels,
                              size=None,
                              scale_factor=(2, 1),
                              interpolation_mode='nearest'),
            ConvBlock(input_channels=self.input_channels,
                      output_channels=self.input_channels,
                      kernel_size=3,
                      padding_mode='replication',
                      use_batch_norm=True,
                      leaky_slope=self.leaky_slope,
                      dropout_rate=self.dropout_rate),
            ResamplingBlock2D(input_channels=self.input_channels,
                              output_channels=self.input_channels,
                              size=None,
                              scale_factor=(1, 3),
                              interpolation_mode='nearest'),
            ConvBlock(
                input_channels=self.input_channels,
                output_channels=self.input_channels,
                # kernel_size=[3, 5],
                kernel_size=[3, 5],
                padding_mode='replication',
                use_batch_norm=True,
                leaky_slope=self.leaky_slope,
                dropout_rate=self.dropout_rate),
            ResamplingBlock2D(input_channels=self.input_channels,
                              output_channels=self.input_channels,
                              size=None,
                              scale_factor=(2, 1),
                              interpolation_mode='nearest'),
            #####################################################################
            # Added by michael --> this should be exactly like the paper 1x Conv, ReLU after supersampling
            ConvBlock(input_channels=self.input_channels,
                      output_channels=self.input_channels,
                      kernel_size=3,
                      padding_mode='replication',
                      use_batch_norm=True,
                      leaky_slope=self.leaky_slope,
                      dropout_rate=self.dropout_rate),
            # + 1x Conv, ReLU afterwards
            ConvBlock(input_channels=self.input_channels,
                      output_channels=self.input_channels,
                      kernel_size=3,
                      padding_mode='replication',
                      use_batch_norm=True,
                      leaky_slope=self.leaky_slope,
                      dropout_rate=self.dropout_rate),
            #####################################################################
            ConvBlock(input_channels=self.input_channels,
                      output_channels=self.output_channels,
                      kernel_size=3,
                      padding_mode='replication',
                      use_batch_norm=False,
                      leaky_slope=1.0,
                      dropout_rate=0.0),
        )