Source code for antspynet.architectures.create_deep_denoise_super_resolution_model


from tensorflow.keras.models import Model
from tensorflow.keras.layers import (Input, Average, Add,
                          Conv2D, Conv2DTranspose,
                          MaxPooling2D, UpSampling2D,
                          Conv3D, Conv3DTranspose,
                          MaxPooling3D, UpSampling3D)

import numpy as np

[docs]def create_deep_denoise_super_resolution_model_2d(input_image_size, layers=2, lowest_resolution=64, convolution_kernel_size=(3, 3), pool_size=(2, 2), strides=(2, 2) ): """ 2-D implementation of the denoising autoencoder image super resolution deep learning architecture. Arguments --------- input_image_size : tuple of length 3 Used for specifying the input tensor shape. The shape (or dimension) of that tensor is the image dimensions followed by the number of channels (e.g., red, green, and blue). layers : integer Number of architecture layers. lowest_resolution : integer Number of filters at the beginning and end of the architecture. convolution_kernel_size : 2-d tuple specifies the kernel size during the encoding path. pool_size : 2-d tuple Defines the region for each pooling layer. strides : 2-d tuple Defines the stride length in each direction. Returns ------- Keras model A 2-D Keras model defining the network. Example ------- >>> model = create_deep_denoise_super_resolution_model_2d((128, 128, 1)) >>> model.summary() """ inputs = Input(shape = input_image_size) # encoding layers pool = None conv = None encoding_convolution_layers = [] for i in range(layers): number_of_filters = lowest_resolution * 2 ** i if i == 0: conv = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(inputs) else: conv = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(pool) layer = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(conv) encoding_convolution_layers.append(layer) pool = MaxPooling2D(pool_size=pool_size, strides=strides, padding='same')(encoding_convolution_layers[i]) number_of_filters = lowest_resolution * 2 ** layers outputs = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(pool) # upsampling layers for i in range(layers): number_of_filters = lowest_resolution * 2 ** (layers - i - 1) outputs = UpSampling2D()(outputs) conv = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(outputs) conv = Conv2D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(conv) outputs = Add()([encoding_convolution_layers[layers - i -1], conv]) outputs = UpSampling2D()(outputs) number_of_channels = input_image_size[-1] final_convolution_kernel_size = tuple(np.array(convolution_kernel_size) + 2) outputs = Conv2D(filters=number_of_channels, kernel_size=final_convolution_kernel_size, activation='linear', padding='same')(outputs) sr_model = Model(inputs=inputs, outputs=outputs) return(sr_model)
[docs]def create_deep_denoise_super_resolution_model_3d(input_image_size, layers=2, lowest_resolution=64, convolution_kernel_size=(3, 3, 3), pool_size=(2, 2, 2), strides=(2, 2, 2) ): """ 3-D implementation of the denoising autoencoder image super resolution deep learning architecture. Arguments --------- input_image_size : tuple of length 4 Used for specifying the input tensor shape. The shape (or dimension) of that tensor is the image dimensions followed by the number of channels (e.g., red, green, and blue). layers : integer Number of architecture layers. lowest_resolution : integer Number of filters at the beginning and end of the architecture. convolution_kernel_size : 3-d tuple specifies the kernel size during the encoding path. pool_size : 3-d tuple Defines the region for each pooling layer. strides : 3-d tuple Defines the stride length in each direction. Returns ------- Keras model A 3-D Keras model defining the network. Example ------- >>> model = create_deep_denoise_super_resolution_model_3d((128, 128, 128, 1)) >>> model.summary() """ inputs = Input(shape = input_image_size) # encoding layers pool = None conv = None encoding_convolution_layers = [] for i in range(layers): number_of_filters = lowest_resolution * 2 ** i if i == 0: conv = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(inputs) else: conv = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(pool) layer = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(conv) encoding_convolution_layers.append(layer) pool = MaxPooling3D(pool_size=pool_size, strides=strides, padding='same')(encoding_convolution_layers[i]) number_of_filters = lowest_resolution * 2 ** layers outputs = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(pool) # upsampling layers for i in range(layers): number_of_filters = lowest_resolution * 2 ** (layers - i - 1) outputs = UpSampling3D()(outputs) conv = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(outputs) conv = Conv3D(filters=number_of_filters, kernel_size=convolution_kernel_size, activation='relu', padding='same')(conv) outputs = Add()([encoding_convolution_layers[layers - i -1], conv]) outputs = UpSampling3D()(outputs) number_of_channels = input_image_size[-1] final_convolution_kernel_size = tuple(np.array(convolution_kernel_size) + 2) outputs = Conv3D(filters=number_of_channels, kernel_size=final_convolution_kernel_size, activation='linear', padding='same')(outputs) sr_model = Model(inputs=inputs, outputs=outputs) return(sr_model)