def _get_upscale_layer(method, filters, activation=None): """ Obtain an instance of the requested upscale method. Parameters ---------- method: str The user selected upscale method to use filters: int The number of filters to use in the upscale layer activation: str, optional The activation function to use in the upscale layer. ``None`` to use no activation. Default: ``None`` Returns ------- :class:`keras.layers.Layer` The selected configured upscale layer """ if method == "upsample2d": return UpSampling2D() if method == "subpixel": return UpscaleBlock(filters, activation=activation) if method == "upscale_fast": return Upscale2xBlock(filters, activation=activation, fast=True) if method == "upscale_hybrid": return Upscale2xBlock(filters, activation=activation, fast=False) return UpscaleResizeImagesBlock(filters, activation=activation)
def decoder_b_fast(self): """ DeLight Fast Decoder B(new face) Network """ input_ = Input(shape=(4, 4, 1024)) decoder_b_complexity = 512 mask_complexity = 128 var_xy = input_ var_xy = UpscaleBlock(512, scale_factor=self.upscale_ratio)(var_xy) var_x = var_xy var_x = Upscale2xBlock(decoder_b_complexity, fast=True)(var_x) var_x = Upscale2xBlock(decoder_b_complexity // 2, fast=True)(var_x) var_x = Upscale2xBlock(decoder_b_complexity // 4, fast=True)(var_x) var_x = Upscale2xBlock(decoder_b_complexity // 8, fast=True)(var_x) var_x = Conv2DOutput(3, 5, name="face_out")(var_x) outputs = [var_x] if self.config.get("learn_mask", False): var_y = var_xy # mask decoder var_y = Upscale2xBlock(mask_complexity, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 2, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 4, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 8, fast=False)(var_y) var_y = Conv2DOutput(1, 5, name="mask_out")(var_y) outputs.append(var_y) return KerasModel([input_], outputs=outputs, name="decoder_b_fast")
def decoder_a(self): """ DeLight Decoder A(old face) Network """ input_ = Input(shape=(4, 4, 1024)) decoder_a_complexity = 256 mask_complexity = 128 var_xy = input_ var_xy = UpSampling2D(self.upscale_ratio, interpolation='bilinear')(var_xy) var_x = var_xy var_x = Upscale2xBlock(decoder_a_complexity, fast=False)(var_x) var_x = Upscale2xBlock(decoder_a_complexity // 2, fast=False)(var_x) var_x = Upscale2xBlock(decoder_a_complexity // 4, fast=False)(var_x) var_x = Upscale2xBlock(decoder_a_complexity // 8, fast=False)(var_x) var_x = Conv2DOutput(3, 5, name="face_out")(var_x) outputs = [var_x] if self.config.get("learn_mask", False): var_y = var_xy # mask decoder var_y = Upscale2xBlock(mask_complexity, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 2, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 4, fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 8, fast=False)(var_y) var_y = Conv2DOutput(1, 5, name="mask_out")(var_y) outputs.append(var_y) return KerasModel([input_], outputs=outputs, name="decoder_a")
def decoder_b(self): """ DeLight Decoder B(new face) Network """ input_ = Input(shape=(4, 4, 1024)) dec_b_complexity = 512 mask_complexity = 128 var_xy = input_ var_xy = Upscale2xBlock(512, scale_factor=self.upscale_ratio, activation=None, fast=False)(var_xy) var_x = var_xy var_x = LeakyReLU(alpha=0.2)(var_x) var_x = ResidualBlock(512, use_bias=True)(var_x) var_x = ResidualBlock(512, use_bias=False)(var_x) var_x = ResidualBlock(512, use_bias=False)(var_x) var_x = Upscale2xBlock(dec_b_complexity, activation=None, fast=False)(var_x) var_x = LeakyReLU(alpha=0.2)(var_x) var_x = ResidualBlock(dec_b_complexity, use_bias=True)(var_x) var_x = ResidualBlock(dec_b_complexity, use_bias=False)(var_x) var_x = BatchNormalization()(var_x) var_x = Upscale2xBlock(dec_b_complexity // 2, activation=None, fast=False)(var_x) var_x = LeakyReLU(alpha=0.2)(var_x) var_x = ResidualBlock(dec_b_complexity // 2, use_bias=True)(var_x) var_x = Upscale2xBlock(dec_b_complexity // 4, activation=None, fast=False)(var_x) var_x = LeakyReLU(alpha=0.2)(var_x) var_x = ResidualBlock(dec_b_complexity // 4, use_bias=False)(var_x) var_x = BatchNormalization()(var_x) var_x = Upscale2xBlock(dec_b_complexity // 8, activation="leakyrelu", fast=False)(var_x) var_x = Conv2DOutput(3, 5, name="face_out")(var_x) outputs = [var_x] if self.config.get("learn_mask", False): var_y = var_xy # mask decoder var_y = LeakyReLU(alpha=0.1)(var_y) var_y = Upscale2xBlock(mask_complexity, activation="leakyrelu", fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 2, activation="leakyrelu", fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 4, activation="leakyrelu", fast=False)(var_y) var_y = Upscale2xBlock(mask_complexity // 8, activation="leakyrelu", fast=False)(var_y) var_y = Conv2DOutput(1, 5, name="mask_out")(var_y) outputs.append(var_y) return KerasModel([input_], outputs=outputs, name="decoder_b")