Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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")
Ejemplo n.º 3
0
    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")
Ejemplo n.º 4
0
    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")