Exemplo n.º 1
0
    def _decomposer(self):
        """
        Build an image decomposer into a spatial binary mask of the myocardium and a non-spatial vector z of the
        remaining image information.
        :return a Keras model of the decomposer
        """
        input = Input(self.conf.input_shape)

        unet = UNet(self.conf.input_shape, residual=False)
        l = unet.unet_downsample(input)
        unet.unet_bottleneck(l)
        l = unet.bottleneck

        # build Z regressor
        modality = Conv2D(256, 3, strides=1, padding='same')(l)
        modality = BatchNormalization()(modality)
        modality = LeakyReLU()(modality)
        modality = Conv2D(64, 3, strides=1, padding='same')(modality)
        modality = BatchNormalization()(modality)
        modality = LeakyReLU()(modality)
        modality = Flatten()(modality)
        modality = Dense(32)(modality)
        modality = LeakyReLU()(modality)
        modality = Dense(16, activation='sigmoid')(modality)

        l = unet.unet_upsample(unet.bottleneck)
        anatomy = unet.out(l)

        m = Model(inputs=input, outputs=[anatomy, modality], name='Decomposer')
        log.info('Decomposer')
        m.summary(print_fn=log.info)
        return m
Exemplo n.º 2
0
    def build_anatomy_encoder(self):
        """
        Build an encoder to extract anatomical information from the image.
        """
        # Manually build UNet to add Rounding as a last layer
        spatial_encoder = UNet(self.conf.anatomy_encoder_params)
        spatial_encoder.input = Input(shape=self.conf.input_shape)
        l1 = spatial_encoder.unet_downsample(spatial_encoder.input,
                                             spatial_encoder.normalise)
        spatial_encoder.unet_bottleneck(l1, spatial_encoder.normalise)
        l2 = spatial_encoder.unet_upsample(spatial_encoder.bottleneck,
                                           spatial_encoder.normalise)
        anatomy = spatial_encoder.out(l2, out_activ='softmax')
        if self.conf.rounding == 'encoder':
            anatomy = Rounding()(anatomy)

        self.Enc_Anatomy = Model(inputs=spatial_encoder.input,
                                 outputs=anatomy,
                                 name='Enc_Anatomy')
        log.info('Enc_Anatomy')
        self.Enc_Anatomy.summary(print_fn=log.info)