Ejemplo n.º 1
0
    def __init__(self,
                 in_channels,
                 out_channels=3,
                 output_heads=1,
                 conv_layer_order='crg',
                 init_channel_number=32,
                 **kwargs):
        super(TagsUNet3D, self).__init__()

        # number of groups for the GroupNorm
        num_groups = min(init_channel_number // 2, 32)

        # encoder path consist of 4 subsequent Encoder modules
        # the number of features maps is the same as in the paper
        self.encoders = nn.ModuleList([
            Encoder(in_channels,
                    init_channel_number,
                    apply_pooling=False,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups),
            Encoder(init_channel_number,
                    2 * init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups),
            Encoder(2 * init_channel_number,
                    4 * init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups),
            Encoder(4 * init_channel_number,
                    8 * init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups)
        ])

        self.decoders = nn.ModuleList([
            Decoder(4 * init_channel_number + 8 * init_channel_number,
                    4 * init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups),
            Decoder(2 * init_channel_number + 4 * init_channel_number,
                    2 * init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups),
            Decoder(init_channel_number + 2 * init_channel_number,
                    init_channel_number,
                    conv_layer_order=conv_layer_order,
                    num_groups=num_groups)
        ])

        self.final_heads = nn.ModuleList([
            FinalConv(init_channel_number, out_channels, num_groups=num_groups)
            for _ in range(output_heads)
        ])
Ejemplo n.º 2
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 final_sigmoid,
                 f_maps=64,
                 layer_order='cr',
                 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)
Ejemplo n.º 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)
Ejemplo n.º 4
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 final_sigmoid,
                 init_channel_number=32,
                 **kwargs):
        super(DistanceTransformUNet3D, self).__init__()

        # number of groups for the GroupNorm
        num_groups = min(init_channel_number // 2, 32)

        # encoder path consist of 4 subsequent Encoder modules
        # the number of features maps is the same as in the paper
        self.encoders = nn.ModuleList([
            Encoder(in_channels,
                    init_channel_number,
                    apply_pooling=False,
                    conv_layer_order='crg',
                    num_groups=num_groups),
            Encoder(init_channel_number,
                    2 * init_channel_number,
                    pool_type='avg',
                    conv_layer_order='crg',
                    num_groups=num_groups)
        ])

        self.decoders = nn.ModuleList([
            Decoder(3 * init_channel_number,
                    init_channel_number,
                    conv_layer_order='crg',
                    num_groups=num_groups)
        ])

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

        if final_sigmoid:
            self.final_activation = nn.Sigmoid()
        else:
            self.final_activation = nn.Softmax(dim=1)