예제 #1
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 final_sigmoid,
                 f_maps=16,
                 conv_layer_order='cge',
                 num_groups=8,
                 skip_final_activation=False,
                 **kwargs):
        super(MultiResidualUNet3D, self).__init__()

        if isinstance(f_maps, int):
            f_maps = create_feature_maps(f_maps, number_of_fmaps=6)
        print(f_maps)

        self.first_conv = SingleConv(in_channels,
                                     f_maps[0],
                                     kernel_size=(1, 5, 5),
                                     order='cge',
                                     num_groups=8,
                                     padding=(0, 2, 2))

        encoders = []
        for i, out_feature_num in enumerate(f_maps):
            if i == 0:
                pass
            else:
                encoder = Encoder(f_maps[i - 1],
                                  out_feature_num,
                                  basic_module=ExtResNetBlock,
                                  conv_layer_order=conv_layer_order,
                                  num_groups=num_groups)
                encoders.append(encoder)

        self.encoders = nn.ModuleList(encoders)

        decoders = []
        reversed_f_maps = list(reversed(f_maps))

        for i in range(len(reversed_f_maps) - 1):
            in_feature_num = reversed_f_maps[i] + reversed_f_maps[i + 1]
            out_feature_num = reversed_f_maps[i + 1]
            decoder = Decoder(in_feature_num,
                              out_feature_num,
                              basic_module=ExtResNetBlock,
                              conv_layer_order=conv_layer_order,
                              num_groups=num_groups)
            decoders.append(decoder)

        self.decoders = nn.ModuleList(decoders)

        self.final_conv = nn.Conv3d(f_maps[0], out_channels, 1)

        if not skip_final_activation:
            if final_sigmoid:
                self.final_activation = nn.Sigmoid()
            else:
                self.final_activation = nn.Softmax(dim=1)
        else:
            self.final_activation = None
예제 #2
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 final_sigmoid,
                 f_maps=64,
                 layer_order='crg',
                 num_groups=8,
                 **kwargs):
        super(UNet3D, self).__init__()

        if isinstance(f_maps, int):
            # use 4 levels in the encoder path as suggested in the paper
            f_maps = create_feature_maps(f_maps, number_of_fmaps=4)

        # create encoder path consisting of Encoder modules. The length of the encoder is equal to `len(f_maps)`
        # uses DoubleConv as a basic_module for the Encoder
        encoders = []
        for i, out_feature_num in enumerate(f_maps):
            if i == 0:
                encoder = Encoder(in_channels,
                                  out_feature_num,
                                  apply_pooling=False,
                                  basic_module=DoubleConv,
                                  conv_layer_order=layer_order,
                                  num_groups=num_groups)
            else:
                encoder = Encoder(f_maps[i - 1],
                                  out_feature_num,
                                  basic_module=DoubleConv,
                                  conv_layer_order=layer_order,
                                  num_groups=num_groups)
            encoders.append(encoder)

        self.encoders = nn.ModuleList(encoders)

        # create decoder path consisting of the Decoder modules. The length of the decoder is equal to `len(f_maps) - 1`
        # uses DoubleConv as a basic_module for the Decoder
        decoders = []
        reversed_f_maps = list(reversed(f_maps))
        for i in range(len(reversed_f_maps) - 1):
            in_feature_num = reversed_f_maps[i] + reversed_f_maps[i + 1]
            out_feature_num = reversed_f_maps[i + 1]
            decoder = Decoder(in_feature_num,
                              out_feature_num,
                              basic_module=DoubleConv,
                              conv_layer_order=layer_order,
                              num_groups=num_groups)
            decoders.append(decoder)

        self.decoders = nn.ModuleList(decoders)

        # in the last layer a 1×1 convolution reduces the number of output
        # channels to the number of labels
        self.final_conv = nn.Conv3d(f_maps[0], out_channels, 1)

        if final_sigmoid:
            self.final_activation = nn.Sigmoid()
        else:
            self.final_activation = nn.Softmax(dim=1)
예제 #3
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 f_maps=16,
                 num_groups=8,
                 **kwargs):
        super(Noise2NoiseUNet3D, self).__init__()

        # Use LeakyReLU activation everywhere except the last layer
        conv_layer_order = 'clg'

        if isinstance(f_maps, int):
            # use 5 levels in the encoder path as suggested in the paper
            f_maps = create_feature_maps(f_maps, number_of_fmaps=5)

        # create encoder path consisting of Encoder modules. The length of the encoder is equal to `len(f_maps)`
        # uses DoubleConv as a basic_module for the Encoder
        encoders = []
        for i, out_feature_num in enumerate(f_maps):
            if i == 0:
                encoder = Encoder(in_channels,
                                  out_feature_num,
                                  apply_pooling=False,
                                  basic_module=DoubleConv,
                                  conv_layer_order=conv_layer_order,
                                  num_groups=num_groups)
            else:
                encoder = Encoder(f_maps[i - 1],
                                  out_feature_num,
                                  basic_module=DoubleConv,
                                  conv_layer_order=conv_layer_order,
                                  num_groups=num_groups)
            encoders.append(encoder)

        self.encoders = nn.ModuleList(encoders)

        # create decoder path consisting of the Decoder modules. The length of the decoder is equal to `len(f_maps) - 1`
        # uses DoubleConv as a basic_module for the Decoder
        decoders = []
        reversed_f_maps = list(reversed(f_maps))
        for i in range(len(reversed_f_maps) - 1):
            in_feature_num = reversed_f_maps[i] + reversed_f_maps[i + 1]
            out_feature_num = reversed_f_maps[i + 1]
            decoder = Decoder(in_feature_num,
                              out_feature_num,
                              basic_module=DoubleConv,
                              conv_layer_order=conv_layer_order,
                              num_groups=num_groups)
            decoders.append(decoder)

        self.decoders = nn.ModuleList(decoders)

        # 1x1x1 conv + simple ReLU in the final convolution
        self.final_conv = SingleConv(f_maps[0],
                                     out_channels,
                                     kernel_size=1,
                                     order='cr',
                                     padding=0)