diff --git a/bob/learn/tensorflow/configs/style_transfer/inception_v1_example.py b/bob/learn/tensorflow/configs/style_transfer/inception_v1_example.py
deleted file mode 100644
index 00bfa1e0628534802d47bba19ad27b20b04ef236..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/configs/style_transfer/inception_v1_example.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Example using inception resnet v1
-
-"""
-
-import tensorflow as tf
-
-# -- architecture
-from bob.learn.tensorflow.network import inception_resnet_v1_batch_norm
-architecture = inception_resnet_v1_batch_norm
-
-# --checkpoint-dir
-from bob.extension import rc
-checkpoint_dir = rc['bob.bio.face_ongoing.inception-v1_batchnorm_rgb']
-
-# --style-end-points and -- content-end-points
-style_end_points = ["Conv2d_1a_3x3", "Conv2d_2b_3x3"]
-content_end_points = ["Block8"]
-
-scopes = {"InceptionResnetV1/":"InceptionResnetV1/"}
-
-# --style-image-paths
-style_image_paths = ["vincent_van_gogh.jpg",
-                     "vincent_van_gogh2.jpg"]
-
-# --preprocess-fn
-preprocess_fn = tf.image.per_image_standardization
diff --git a/bob/learn/tensorflow/configs/style_transfer/inception_v2_example.py b/bob/learn/tensorflow/configs/style_transfer/inception_v2_example.py
deleted file mode 100644
index 54eb3f2931f65e78fb6a1e201b65d119f172d0be..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/configs/style_transfer/inception_v2_example.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""
-Example using inception resnet v2
-"""
-
-import tensorflow as tf
-
-# -- architecture
-from bob.learn.tensorflow.network import inception_resnet_v2_batch_norm
-architecture = inception_resnet_v2_batch_norm
-
-# --checkpoint-dir
-from bob.extension import rc
-checkpoint_dir = rc['bob.bio.face_ongoing.inception-v2_batchnorm_rgb']
-
-# --style-end-points and -- content-end-points
-style_end_points = ["Conv2d_1a_3x3", "Conv2d_2b_3x3"]
-content_end_points = ["Block8"]
-
-scopes = {"InceptionResnetV2/":"InceptionResnetV2/"}
-
-# --style-image-paths
-style_image_paths = ["vincent_van_gogh.jpg",
-                     "vincent_van_gogh2.jpg"]
-
-# --preprocess-fn
-preprocess_fn = tf.image.per_image_standardization
diff --git a/bob/learn/tensorflow/configs/style_transfer/vgg19_example.py b/bob/learn/tensorflow/configs/style_transfer/vgg19_example.py
deleted file mode 100644
index 4d31888882eb98570549b4015f83a6089074ae6a..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/configs/style_transfer/vgg19_example.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""
-Example using VGG19
-"""
-
-from bob.learn.tensorflow.network import vgg_19
-# --architecture
-architecture = vgg_19
-
-
-import numpy
-
-# -- checkpoint-dir
-# YOU CAN DOWNLOAD THE CHECKPOINTS FROM HERE 
-# https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models
-checkpoint_dir = "/PATH-TO/vgg_19.ckpt"
-
-# --style-end-points and -- content-end-points
-content_end_points = ['vgg_19/conv4/conv4_2', 'vgg_19/conv5/conv5_2']
-style_end_points = ['vgg_19/conv1/conv1_2', 
-                    'vgg_19/conv2/conv2_1',
-                    'vgg_19/conv3/conv3_1',
-                    'vgg_19/conv4/conv4_1',
-                    'vgg_19/conv5/conv5_1'
-                    ]
-
-
-scopes = {"vgg_19/":"vgg_19/"}
-
-style_image_paths = ["/PATH/TO/vincent_van_gogh.jpg"]
-
-
-# --preprocess-fn and --un-preprocess-fn
-# Taken from VGG19
-def mean_norm(tensor):
-    return tensor - numpy.array([ 123.68 ,  116.779,  103.939])
-
-def un_mean_norm(tensor):
-    return tensor + numpy.array([ 123.68 ,  116.779,  103.939])
-
-preprocess_fn = mean_norm
-
-un_preprocess_fn = un_mean_norm
-
diff --git a/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh.jpg b/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh.jpg
deleted file mode 100644
index c17534eca0469abfa043146da04f82eab014ba99..0000000000000000000000000000000000000000
Binary files a/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh.jpg and /dev/null differ
diff --git a/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh2.jpg b/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh2.jpg
deleted file mode 100644
index 9a74d8588e73b044c3f8a51e8bb3bcf1e950174a..0000000000000000000000000000000000000000
Binary files a/bob/learn/tensorflow/configs/style_transfer/vincent_van_gogh2.jpg and /dev/null differ
diff --git a/bob/learn/tensorflow/script/style_transfer.py b/bob/learn/tensorflow/script/style_transfer.py
deleted file mode 100644
index 85c1db77b6e58d24fed3aa942c2dbbab7a17ec3f..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/script/style_transfer.py
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env python
-"""Trains networks using Tensorflow estimators.
-"""
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-import logging
-import click
-import tensorflow as tf
-from bob.extension.scripts.click_helper import (verbosity_option,
-                                                ConfigCommand, ResourceOption)
-import bob.io.image
-import bob.io.base
-import numpy
-import bob.ip.base
-import bob.ip.color
-import sys
-import os
-from bob.learn.tensorflow.style_transfer import do_style_transfer
-
-
-logger = logging.getLogger(__name__)
-
-
-@click.command(
-    entry_point_group='bob.learn.tensorflow.config', cls=ConfigCommand)
-@click.argument('content_image_path', required=True)
-@click.argument('output_path', required=True)
-@click.option('--style-image-paths',
-              cls=ResourceOption,
-              required=True,
-              multiple=True,
-              entry_point_group='bob.learn.tensorflow.style_images',
-              help='List of images that encodes the style.')
-@click.option('--architecture',
-              '-a',
-              required=True,
-              cls=ResourceOption,
-              entry_point_group='bob.learn.tensorflow.architecture',
-              help='The base architecure.')
-@click.option('--checkpoint-dir',
-              '-c',
-              required=True,
-              cls=ResourceOption,
-              help='CNN checkpoint path')
-@click.option('--iterations',
-              '-i',
-              type=click.types.INT,
-              help='Number of iterations to generate the image',
-              default=1000)
-@click.option('--learning_rate',
-              '-r',
-              type=click.types.FLOAT,
-              help='Learning rate.',
-              default=1.)
-@click.option('--content-weight',
-              type=click.types.FLOAT,
-              help='Weight of the content loss.',
-              default=5.)
-@click.option('--style-weight',
-              type=click.types.FLOAT,
-              help='Weight of the style loss.',
-              default=100.)
-@click.option('--denoise-weight',
-              type=click.types.FLOAT,
-              help='Weight denoising loss.',
-              default=100.)
-@click.option('--content-end-points',
-              cls=ResourceOption,
-              multiple=True,
-              entry_point_group='bob.learn.tensorflow.end_points',
-              help='List of end_points for the used to encode the content')
-@click.option('--style-end-points',
-              cls=ResourceOption,
-              multiple=True,
-              entry_point_group='bob.learn.tensorflow.end_points',
-              help='List of end_points for the used to encode the style')
-@click.option('--scopes',
-              cls=ResourceOption,
-              entry_point_group='bob.learn.tensorflow.scopes',
-              help='Dictionary containing the mapping scores',
-              required=True)
-@click.option('--pure-noise',
-               is_flag=True,
-               help="If set will save the raw noisy generated image."
-                    "If not set, the output will be RGB = stylizedYUV.Y, originalYUV.U, originalYUV.V"
-              )
-@click.option('--preprocess-fn',
-              '-pr',
-              cls=ResourceOption,
-              entry_point_group='bob.learn.tensorflow.preprocess_fn',
-              help='Preprocess function. Pointer to a function that preprocess the INPUT signal')
-@click.option('--un-preprocess-fn',
-              '-un',
-              cls=ResourceOption,
-              entry_point_group='bob.learn.tensorflow.preprocess_fn',
-              help='Un preprocess function. Pointer to a function that preprocess the OUTPUT signal')
-@click.option(
-  '--start-from',
-  '-sf',
-  cls=ResourceOption,
-  default="noise",
-  type=click.Choice(["noise", "content", "style"]),
-  help="Starts from this image for reconstruction",
-)
-@verbosity_option(cls=ResourceOption)
-def style_transfer(content_image_path, output_path, style_image_paths,
-                   architecture, checkpoint_dir,
-                   iterations, learning_rate,
-                   content_weight, style_weight, denoise_weight, content_end_points,
-                   style_end_points, scopes, pure_noise, preprocess_fn,
-                   un_preprocess_fn, start_from, **kwargs):
-    """
-     Trains neural style transfer using the approach presented in:
-
-    Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. "A neural algorithm of artistic style." arXiv preprint arXiv:1508.06576 (2015).
-
-    \b
-
-    If you want run a style transfer using InceptionV2 as basis, use the following template
-
-    Below follow a CONFIG template
-
-    CONFIG.PY
-    ```
-
-       from bob.extension import rc
-
-       from bob.learn.tensorflow.network import inception_resnet_v2_batch_norm
-       architecture = inception_resnet_v2_batch_norm
-
-       checkpoint_dir = rc["bob.bio.face_ongoing.idiap_casia_inception_v2_centerloss_rgb"]
-
-       style_end_points = ["Conv2d_1a_3x3", "Conv2d_2b_3x3", "Conv2d_3b_1x1", "Conv2d_4a_3x3"]
-
-       content_end_points = ["Bottleneck", "PreLogitsFlatten"]
-
-       scopes = {"InceptionResnetV2/":"InceptionResnetV2/"}
-
-    ```
-    \b
-
-    Then run::
-
-       $ bob tf style <content-image> <output-image> --style-image-paths <style-image> CONFIG.py
-
-
-    You can also provide a list of images to encode the style using the config file as in the example below.
-
-    CONFIG.PY
-    ```
-
-       from bob.extension import rc
-
-       from bob.learn.tensorflow.network import inception_resnet_v2_batch_norm
-       architecture = inception_resnet_v2_batch_norm
-
-       checkpoint_dir = rc["bob.bio.face_ongoing.idiap_casia_inception_v2_centerloss_rgb"]
-
-       style_end_points = ["Conv2d_1a_3x3", "Conv2d_2b_3x3", "Conv2d_3b_1x1", "Conv2d_4a_3x3"]
-
-       content_end_points = ["Bottleneck", "PreLogitsFlatten"]
-
-       scopes = {"InceptionResnetV2/":"InceptionResnetV2/"}
-
-       style_image_paths = ["STYLE_1.png",
-                            "STYLE_2.png"]
-
-    ```
-
-    Then run::
-
-       $ bob tf style <content-image> <output-image> CONFIG.py
-
-    \b \b
-
-    """
-
-    logger.info("Style transfer, content_image={0}, style_image={1}".format(content_image_path, style_image_paths))
-
-    # Loading content image
-    content_image = bob.io.base.load(content_image_path)
-
-    # Reading and converting to the tensorflow format
-    style_images = []
-    for path in style_image_paths:
-        style_images.append(bob.io.base.load(path))
-
-    output = do_style_transfer(content_image, style_images,
-                               architecture, checkpoint_dir, scopes,
-                               content_end_points, style_end_points,
-                               preprocess_fn=preprocess_fn, un_preprocess_fn=un_preprocess_fn,
-                               pure_noise=pure_noise,
-                               iterations=iterations, learning_rate=learning_rate,
-                               content_weight=content_weight, style_weight=style_weight,
-                               denoise_weight=denoise_weight, start_from=start_from)
-
-    os.makedirs(os.path.dirname(output_path), exist_ok=True)
-    bob.io.base.save(output, output_path)
diff --git a/bob/learn/tensorflow/style_transfer/__init__.py b/bob/learn/tensorflow/style_transfer/__init__.py
deleted file mode 100644
index 11f0c6a989d75fcae4804500619f8d980349e54d..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/style_transfer/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from .neural_transfer import compute_features, compute_gram, do_style_transfer
-
-# gets sphinx autodoc done right - don't remove it
-def __appropriate__(*args):
-    """Says object was actually declared here, an not on the import module.
-
-    Parameters:
-
-            *args: An iterable of objects to modify
-
-    Resolves `Sphinx referencing issues
-    <https://github.com/sphinx-doc/sphinx/issues/3048>`
-    """
-
-    for obj in args:
-        obj.__module__ = __name__
-
-
-__appropriate__(
-)
-
-__all__ = [_ for _ in dir() if not _.startswith('_')]
diff --git a/bob/learn/tensorflow/style_transfer/neural_transfer.py b/bob/learn/tensorflow/style_transfer/neural_transfer.py
deleted file mode 100644
index b65bd853273959a73f1499d34ab464ab26adc066..0000000000000000000000000000000000000000
--- a/bob/learn/tensorflow/style_transfer/neural_transfer.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/usr/bin/env python
-# vim: set fileencoding=utf-8 :
-# @author: Tiago de Freitas Pereira <tiago.pereira@idiap.ch>
-
-
-import tensorflow as tf
-import numpy
-import os
-from bob.learn.tensorflow.loss import linear_gram_style_loss, content_loss, denoising_loss
-import bob.io.image
-import bob.ip.color
-
-import logging
-logger = logging.getLogger(__name__)
-
-
-def compute_features(input_image, architecture, checkpoint_dir, target_end_points, preprocess_fn=None):
-    """
-    For a given set of end_points, convolve the input image until these points
-
-    Parameters
-    ----------
-
-    input_image: :any:`numpy.array`
-        Input image in the format WxHxC
-
-    architecture:
-        Pointer to the architecture function
-
-    checkpoint_dir: str
-        DCNN checkpoint directory
-
-    end_points: dict
-       Dictionary containing the end point tensors
-
-    preprocess_fn:
-       Pointer to a preprocess function
-
-    """
-
-    input_pl = tf.placeholder('float32', shape=(1, input_image.shape[1],
-                                                   input_image.shape[2],
-                                                   input_image.shape[3]))
-
-    if preprocess_fn is None:
-        _, end_points = architecture(input_pl, mode=tf.estimator.ModeKeys.PREDICT, trainable_variables=None)
-    else:
-        _, end_points = architecture(tf.stack([preprocess_fn(i) for i in tf.unstack(input_pl)]), mode=tf.estimator.ModeKeys.PREDICT, trainable_variables=None)
-    with tf.Session() as sess:
-        # Restoring the checkpoint for the given architecture
-        sess.run(tf.global_variables_initializer())
-        saver = tf.train.Saver()
-
-        if os.path.isdir(checkpoint_dir):
-            saver.restore(sess, tf.train.latest_checkpoint(checkpoint_dir))
-        else:
-            saver.restore(sess, checkpoint_dir)
-
-        #content_feature = sess.run(end_points[CONTENT_END_POINTS], feed_dict={input_image: content_image})
-        features = sess.run([end_points[ep] for ep in target_end_points], feed_dict={input_pl: input_image})
-
-    # Killing the graph
-    tf.reset_default_graph()
-    return features
-
-
-def compute_gram(features):
-    """
-    Given a list of features (as numpy.arrays) comput the gram matrices of each
-    pinning the channel as in:
-
-    Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. "A neural algorithm of artistic style." arXiv preprint arXiv:1508.06576 (2015).
-
-    Parameters
-    ----------
-
-    features: :any:`numpy.array`
-      Convolved features in the format NxWxHxC
-
-    """
-
-    grams = []
-    for f in features:
-        f = numpy.reshape(f, (-1, f.shape[3]))
-        grams.append(numpy.matmul(f.T, f) / f.size)
-
-    return grams
-
-
-def do_style_transfer(content_image, style_images,
-                      architecture, checkpoint_dir, scopes,
-                      content_end_points, style_end_points,
-                      preprocess_fn=None, un_preprocess_fn=None, pure_noise=False,
-                      iterations=1000, learning_rate=0.1,
-                      content_weight=5., style_weight=500., denoise_weight=500., start_from="noise"):
-
-    """
-    Trains neural style transfer using the approach presented in:
-
-    Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. "A neural algorithm of artistic style." arXiv preprint arXiv:1508.06576 (2015).
-
-    Parameters
-    ----------
-
-    content_image: :any:`numpy.array`
-       Content image in the Bob format (C x W x H)
-
-    style_images: :any:`list`
-       List of numpy.array (Bob format (C x W x H)) that encodes the style
-
-    architecture:
-       Point to a function with the base architecture
-
-    checkpoint_dir:
-       CNN checkpoint path
-
-    scopes:
-       Dictionary containing the mapping scores
-
-    content_end_points:
-       List of end_points (from the architecture) for the used to encode the content
-
-    style_end_points:
-       List of end_points (from the architecture) for the used to encode the style
-
-    preprocess_fn:
-       Preprocess function. Pointer to a function that preprocess the INPUT signal
-
-    unpreprocess_fn:
-       Un preprocess function. Pointer to a function that preprocess the OUTPUT signal
-
-    pure_noise:
-       If set will save the raw noisy generated image.
-       If not set, the output will be RGB = stylizedYUV.Y, originalYUV.U, originalYUV.V
-
-    iterations:
-       Number of iterations to generate the image
-
-    learning_rate:
-       Adam learning rate
-
-    content_weight:
-       Weight of the content loss
-
-    style_weight:
-       Weight of the style loss
-
-    denoise_weight:
-       Weight denoising loss
-    """
-
-    def wise_shape(shape):
-        if len(shape)==2:
-            return (1, shape[0], shape[1], 1)
-        else:
-            return (1, shape[0], shape[1], shape[2])
-
-    def normalize4save(img):
-        return (255 * ((img - numpy.min(img)) / (numpy.max(img)-numpy.min(img)))).astype("uint8")
-
-    # Reshaping to NxWxHxC and converting to the tensorflow format
-    # content
-    original_image = content_image
-    content_image = bob.io.image.to_matplotlib(content_image).astype("float32")
-    content_image = numpy.reshape(content_image, wise_shape(content_image.shape))
-
-    # and style
-    for i in range(len(style_images)):
-        image = bob.io.image.to_matplotlib(style_images[i])
-        image = numpy.reshape(image, wise_shape(image.shape))
-        style_images[i] = image
-
-    # Base content features
-    logger.info("Computing content features")
-    content_features = compute_features(content_image, architecture, checkpoint_dir,
-                                        content_end_points, preprocess_fn)
-
-    # Base style features
-    logger.info("Computing style features")
-    style_grams = []
-    for image in style_images:
-        style_features = compute_features(image, architecture, checkpoint_dir,
-                                          style_end_points, preprocess_fn)
-        style_grams.append(compute_gram(style_features))
-
-    # Organizing the trainer
-    logger.info("Training.....")
-    with tf.Graph().as_default():
-        tf.set_random_seed(0)
-
-        # Random noise
-        if start_from == "noise":
-            starting_image = tf.random_normal(shape=content_image.shape) * 0.256
-        elif start_from == "content":
-            starting_image = preprocess_fn(content_image)
-        elif start_from == "style":
-            starting_image = preprocess_fn(style_images[0])
-        else:
-            raise ValueError(f"Unknown starting image: {start_from}")
-
-        noise = tf.Variable(starting_image, dtype="float32", trainable=True)
-        _, end_points = architecture(noise,
-                                      mode=tf.estimator.ModeKeys.PREDICT,
-                                      trainable_variables=[])
-
-        # Computing content loss
-        content_noises = []
-        for c in content_end_points:
-            content_noises.append(end_points[c])
-        c_loss = content_loss(content_noises, content_features)
-
-        # Computing style_loss
-        style_gram_noises = []
-        s_loss = 0
-
-        for grams_per_image in style_grams:
-
-            for c in style_end_points:
-                layer = end_points[c]
-                _, height, width, number = map(lambda i: i.value, layer.get_shape())
-                size = height * width * number
-                features = tf.reshape(layer, (-1, number))
-                style_gram_noises.append(tf.matmul(tf.transpose(features), features) / size)
-            s_loss += linear_gram_style_loss(style_gram_noises, grams_per_image)
-
-        # Variation denoise
-        d_loss = denoising_loss(noise)
-
-        #Total loss
-        total_loss = content_weight*c_loss + style_weight*s_loss + denoise_weight*d_loss
-
-        solver = tf.train.AdamOptimizer(learning_rate).minimize(total_loss)
-
-        tf.contrib.framework.init_from_checkpoint(tf.train.latest_checkpoint(checkpoint_dir) if os.path.isdir(checkpoint_dir) else checkpoint_dir, scopes)
-        # Training
-        with tf.Session() as sess:
-            sess.run(tf.global_variables_initializer())
-
-            for i in range(iterations):
-                _, loss = sess.run([solver, total_loss])
-                logger.info("Iteration {0}, loss {1}".format(i, loss))
-
-            # Saving generated image
-            raw_style_image = sess.run(noise)[0, :, :,:]
-            # Unpreprocessing the signal
-            if un_preprocess_fn is not None:
-                raw_style_image = un_preprocess_fn(raw_style_image)
-
-            raw_style_image = bob.io.image.to_bob(raw_style_image)
-            normalized_style_image = normalize4save(raw_style_image)
-
-            if pure_noise:
-                if normalized_style_image.shape[0] == 1:
-                    return normalized_style_image[0, :, :]
-                else:
-                    return normalized_style_image
-            else:
-                # Original output
-                if normalized_style_image.shape[0] == 1:
-                    normalized_style_image_yuv = bob.ip.color.rgb_to_yuv(bob.ip.color.gray_to_rgb(normalized_style_image[0,:,:]))
-                    # Loading the content image and clipping from 0-255 in case is in another scale
-                    #scaled_content_image = normalize4save(bob.io.base.load(content_image_path).astype("float32")).astype("float64")
-                    scaled_content_image = original_image.astype("float64")
-                    content_image_yuv = bob.ip.color.rgb_to_yuv(bob.ip.color.gray_to_rgb(scaled_content_image))
-                else:
-                    normalized_style_image_yuv = bob.ip.color.rgb_to_yuv(bob.ip.color.gray_to_rgb(bob.ip.color.rgb_to_gray(normalized_style_image)))
-                    content_image_yuv = bob.ip.color.rgb_to_yuv(original_image)
-
-                output_image = numpy.zeros(shape=content_image_yuv.shape, dtype="uint8")
-                output_image[0,:,:] = normalized_style_image_yuv[0,:,:]
-                output_image[1,:,:] = content_image_yuv[1,:,:]
-                output_image[2,:,:] = content_image_yuv[2,:,:]
-
-                output_image = bob.ip.color.yuv_to_rgb(output_image)
-                return output_image
-