{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Deep feature consistent variational autoencoder\n", "\n", "## Introduction\n", "\n", "This article introduces the *deep feature consistent variational autoencoder*[1] (DFC VAE) and provides a Keras implementation to demonstrate the advantages over a plain *variational autoencoder*[2] (VAE).\n", "\n", "A plain VAE is trained with a loss function that makes pixel-by-pixel comparisons between the original image and the reconstructured image. This often leads to generated images that are rather blurry. DFC VAEs on the other hand are trained with a loss function that first feeds the original and reconstructed image into a pre-trained convolutional neural network (CNN) to extract higher level features and then compares the these features to compute a so-called *perceptual loss*. \n", "\n", "The core idea of the perceptual loss is to seek consistency between the hidden representations of two images. Images that are perceived to be similar should also have a small perceptual loss even if they significantly differ in a pixel-by-pixel comparison (due to translation, rotation, ...). This results in generated images that look more naturally and are less blurry. The CNN used for feature extraction is called *perceptual model* in this article.\n", "\n", "### Plain VAE\n", "\n", "In a [previous article](https://nbviewer.jupyter.org/github/krasserm/bayesian-machine-learning/blob/master/variational_autoencoder.ipynb?flush_cache=true) I introduced the variational autoencoder (VAE) and how it can be trained with a variational lower bound $\\mathcal{L}$ as optimization objective using stochastic gradient ascent methods. In context of stochastic gradient descent its negative value is used as loss function $L_{vae}$ which is a sum of a reconstruction loss $L_{rec}$ and a regularization term $L_{kl}$:\n", "\n", "$$\n", "\\begin{align*}\n", "L_{vae} &= L_{rec} + L_{kl} \\\\\n", "L_{rec} &= - \\mathbb{E}_{q(\\mathbf{t} \\lvert \\mathbf{x})} \\left[\\log p(\\mathbf{x} \\lvert \\mathbf{t})\\right] \\\\\n", "L_{kl} &= \\mathrm{KL}(q(\\mathbf{t} \\lvert \\mathbf{x}) \\mid\\mid p(\\mathbf{t}))\n", "\\end{align*}\n", "$$\n", "\n", "$L_{rec}$ is the expected reconstruction error of an image $\\mathbf{x}$, $\\mathbf{t}$ is a latent vector and $p(\\mathbf{x} \\lvert \\mathbf{t})$ is the *probabilistic decoder* of the VAE. When trained with images from the MNIST dataset, it makes sense to define the probabilistic decoder $p(\\mathbf{x} \\lvert \\mathbf{t})$ as multivariate Bernoulli distribution. The corresponding decoder neural network computes the single parameter $\\mathbf{k}$ of this distribution from a latent vector. The values of $\\mathbf{k}$ are the expected pixel values of a reconstructed image. The reconstruction loss can be obtained by computing the binary cross-entropy between the original image and the reconstructed image which is a pixel-by-pixel comparison (Fig. 1).\n", "\n", "$L_{kl}$ is the [KL divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence) between the variational distribution $q(\\mathbf{t} \\lvert \\mathbf{x})$ and the prior $p(\\mathbf{t})$ over latent variables. $q(\\mathbf{t} \\lvert \\mathbf{x})$ is the *probabilistic encoder* of the VAE. The probabilistic encoder $q(\\mathbf{t} \\lvert \\mathbf{x})$ is a multivariate Gaussian distribution whose mean and variance is computed by an encoder neural network from an input image. Prior $p(\\mathbf{t})$ is chosen to be a mutlivariate standard normal distribution. $L_{kl}$ acts as a regularization term ensuring that $q(\\mathbf{t} \\lvert \\mathbf{x})$ doesn't diverge too much from prior $p(\\mathbf{t})$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![vae](images/vae-dfc/vae-4.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Fig. 1: Plain variational autoencoder*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DFC VAE\n", "\n", "A plain VAE can be converted to a DFC VAE by replacing the pixel-by-pixel reconstruction loss $L_{rec}$ with a feature perceptual loss $L_{p}$ during training. At each layer of the perceptual model, the hidden representations of the original and the reconstructed image are taken and their squared Euclidean distance is calculated. This gives a perceptual loss component $L_{p}^i$ at each layer $i$. The overall perceptual loss $L_{p}$ is a weighted sum of the losses computed at each layer (Fig. 2)\n", "\n", "$$\n", "\\begin{align*}\n", "L_{p} &= \\sum_{i} w_i L_{p}^i \\\\\n", "L_{p}^i &= \\left\\lVert \\Phi(\\mathbf{x})^i - \\Phi(\\mathbf{\\bar x})^i \\right\\rVert ^2\n", "\\end{align*}\n", "$$\n", "\n", "where $\\Phi(\\mathbf{x})^i$ and $\\Phi(\\mathbf{\\bar x})^i$ are the representations of the original image $\\mathbf{x}$ and the reconstructed image $\\mathbf{\\bar x}$ at layer $i$ of the perceptual model $\\Phi$. Weights $w_i$ are hyperparameters in the following implementation. For DFC VAE training the sum of the perceptual loss the regularization term is used:\n", "\n", "$$\n", "L_{vae_{dfc}} = L_{p} + L_{kl}\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![vae](images/vae-dfc/vae-dfc-4.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Fig. 2. Deep feature consistent variational autoencoder*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training\n", "\n", "In contrast to the original paper we will use the MNIST handwritten digits dataset for training and for demonstrating how a perceptual loss improves over a pixel-by-pixel reconstruction loss. We can therefore reuse the VAE [encoder](https://github.com/krasserm/bayesian-machine-learning/blob/6962f02168fd82cd01ed6dfe3937e98b10a58b02/variational_autoencoder_opt_util.py#L15-L36) and [decoder](https://github.com/krasserm/bayesian-machine-learning/blob/master/variational_autoencoder_opt_util.py#L38-L53) architectures from the already mentioned [previous article](https://nbviewer.jupyter.org/github/krasserm/bayesian-machine-learning/blob/master/variational_autoencoder.ipynb?flush_cache=true). The perceptual model is a [small CNN](https://github.com/krasserm/bayesian-machine-learning/blob/6962f02168fd82cd01ed6dfe3937e98b10a58b02/variational_autoencoder_opt_util.py#L91-L105) (Fig. 3) that has already been trained in [another context](http://nbviewer.jupyter.org/github/krasserm/bayesian-machine-learning/blob/master/variational_autoencoder_opt.ipynb#Optimization-objectives) to classify MNIST images." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![pm](images/vae-dfc/classifier-3.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Fig. 3: Perceptual model used for DFC VAE training*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Depending on the value of the `use_pretrained` variable either pre-trained weights for the plain VAE and DFC VAE are loaded (default) or they are trained from scratch. The dimensionality of the latent space is 5 by default." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# True if pre-trained weights for the VAEs shall be\n", "# loaded, False for training the VAEs from scratch.\n", "use_pretrained = True\n", "\n", "# Dimensionality of latent space. Do not change to \n", "# a value other than 5 if use_pretrained = True,\n", "# otherwise create_vae (below) will raise an error.\n", "latent_dim = 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The perceptual model is never trained here but always loaded as pre-trained model. For computing the perceptual loss the representations of the first and third hidden layer (`conv2d_6` and `conv2d_7`) are used and weighted with `1.0` each:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "from keras.models import load_model\n", "\n", "# Load pre-trained preceptual model. A simple CNN for\n", "# classifying MNIST handwritten digits.\n", "pm = load_model('models/vae-opt/classifier.h5')\n", "\n", "# Names and weights of perceptual model layers \n", "# selected for calculating the perceptual loss.\n", "selected_pm_layers = ['conv2d_6', 'conv2d_7']\n", "selected_pm_layer_weights = [1.0, 1.0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we will use the same encoder and decoder architecture for the plain VAE and the DFC VAE we can define a generic `create_vae` function for creating both models. During training they also use the same KL divergence loss operation, corresponding to the regularization term, which is also returned by `create_vae`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import variational_autoencoder_opt_util as vae_util\n", "\n", "from keras import backend as K\n", "from keras import layers\n", "from keras.models import Model\n", "\n", "def create_vae(latent_dim, return_kl_loss_op=False):\n", " '''\n", " Creates a VAE able to auto-encode MNIST images.\n", "\n", " Args:\n", " latent_dim: dimensionality of latent space\n", " return_kl_loss_op: whether to return the operation for \n", " computing the KL divergence loss.\n", " \n", " Returns:\n", " The VAE model. If return_kl_loss_op is True, then the\n", " operation for computing the KL divergence loss is \n", " additionally returned.\n", " '''\n", "\n", " if use_pretrained:\n", " assert latent_dim == 5, 'latent_dim must be 5 if pre-trained VAEs are used'\n", " \n", " encoder = vae_util.create_encoder(latent_dim)\n", " decoder = vae_util.create_decoder(latent_dim)\n", " sampler = vae_util.create_sampler()\n", "\n", " x = layers.Input(shape=(28, 28, 1), name='image')\n", " t_mean, t_log_var = encoder(x)\n", " t = sampler([t_mean, t_log_var])\n", " t_decoded = decoder(t)\n", "\n", " model = Model(x, t_decoded, name='vae')\n", " \n", " if return_kl_loss_op:\n", " kl_loss = -0.5 * K.sum(1 + t_log_var \\\n", " - K.square(t_mean) \\\n", " - K.exp(t_log_var), axis=-1)\n", " return model, kl_loss\n", " else:\n", " return model\n", "\n", " \n", "# Create plain VAE model and associated KL divergence loss operation\n", "vae, vae_kl_loss = create_vae(latent_dim, return_kl_loss_op=True)\n", "\n", "# Create DFC VAE model and associated KL divergence loss operation\n", "vae_dfc, vae_dfc_kl_loss = create_vae(latent_dim, return_kl_loss_op=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The only difference between the plain VAE and the DFC VAE is that the plain VAE uses `reconstruction_loss` during training and the DFC VAE uses `perceptual_loss`. These losses are combined with the KL divergence loss in the `vae_loss` and `vae_dfc_loss` functions respectively:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def vae_loss(x, t_decoded):\n", " '''Total loss for the plain VAE'''\n", " return K.mean(reconstruction_loss(x, t_decoded) + vae_kl_loss)\n", "\n", "\n", "def vae_dfc_loss(x, t_decoded):\n", " '''Total loss for the DFC VAE'''\n", " return K.mean(perceptual_loss(x, t_decoded) + vae_dfc_kl_loss)\n", "\n", "\n", "def reconstruction_loss(x, t_decoded):\n", " '''Reconstruction loss for the plain VAE'''\n", " return K.sum(K.binary_crossentropy(\n", " K.batch_flatten(x), \n", " K.batch_flatten(t_decoded)), axis=-1)\n", "\n", "\n", "def perceptual_loss(x, t_decoded):\n", " '''Perceptual loss for the DFC VAE'''\n", " outputs = [pm.get_layer(l).output for l in selected_pm_layers]\n", " model = Model(pm.input, outputs)\n", "\n", " h1_list = model(x)\n", " h2_list = model(t_decoded)\n", " \n", " rc_loss = 0.0\n", " \n", " for h1, h2, weight in zip(h1_list, h2_list, selected_pm_layer_weights):\n", " h1 = K.batch_flatten(h1)\n", " h2 = K.batch_flatten(h2)\n", " rc_loss = rc_loss + weight * K.sum(K.square(h1 - h2), axis=-1)\n", " \n", " return rc_loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After loading the MNIST dataset and normalizing pixel values to interval $[0,1]$ we have now everything we need to train the two autoencoders. This takes a few minutes per model on a GPU. The default setting however is to load the pre-trained weights for the autoencoders instead of training them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from variational_autoencoder_dfc_util import load_mnist_data\n", "\n", "(x_train, _), (x_test, y_test) = load_mnist_data(normalize=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "if use_pretrained:\n", " vae.load_weights('models/vae-dfc/vae_weights.h5')\n", "else:\n", " vae.compile(optimizer='rmsprop', loss=vae_loss)\n", " vae.fit(x=x_train, y=x_train, epochs=15, shuffle=True, validation_data=(x_test, x_test), verbose=2)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "if use_pretrained:\n", " vae_dfc.load_weights('models/vae-dfc/vae_dfc_weights.h5') \n", "else:\n", " vae_dfc.compile(optimizer='rmsprop', loss=vae_dfc_loss)\n", " vae_dfc.fit(x=x_train, y=x_train, epochs=15, shuffle=True, validation_data=(x_test, x_test), verbose=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Experiments\n", "\n", "### Analyze blur of generated images\n", "\n", "The introduction stated that images generated by a DFC VAE tend to be less blurry than images generated by a plain VAE with the same architecture. The following example shows 10 manually selected images from the MNIST test set and their reconstructions by the plain VAE and the DFC VAE. If you run this notebook with `use_pretrained = False` then 10 randomly selected images from the MNIST test set are used instead. The remainder of this article assumes that `use_pretrained = True`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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c8YZZwCRESZjIk0TX5s2bejevTtAGFt+/vOfA1GZ1d4arIuKisIArz6bbHeNS+r/ixcvDvenoqIiXJcG9txzT3784x8D2XaeP38+1157LRC5KKGwm150r7Uoy2Qy4Xnbb7/9gKjszzzzDJA1/DTGO+dSc7/zoaSkJCyoTznlFAC+9rWvAdECW+Om2lH3CLJzhfr36aefzsKFC4Gs+/qNN95gxowZQGRYQWHbW+WXK/3kk08OQooWdEuXLuXjjz8GIuEECHVobhe6ufkMwzAMwzDyoFUoU5lMJigC5557LgCnnnoqEClOb7/9NpCVymfPnh0sdlmjxx13HBBZ7lJ3fv3rXwOR20EBlWldscg6l0uhQ4cO4bVZs2YB2cDBQpPcDq57nclkuPfee4FssO37778PRCtfuXu+/OUvA5FrT+49rbC6desGQJ8+fYIy1VKoPtouPmzYsOD6SRxxEoL/tQrWam/9+vV07twZqOv61KrpgQceqPO5NCMVcdSoUUDWzblkyRLmzp0LZDcJaGMBEOqvDSNt2rRhzpw5QFahKeTKV3/btWvHV77yFQAuueQSIFIRdY0Uqddffx2ATz75hOeffx7Ijjfz588HoHv37mFVv/322wPR86p+krw/hUSq2Z133hnCJVS2sWPH8u677wKFD5CHrMLZu3dvAM4880yGDRsGZMeb4uLisJlBioaexe7du4fnTd91++23h76nttP/p6HOSVSfXXbZJShRN910E5BVi4uKikL76T4sXrw49DspjL169QKiOuqzp59+OhA9r5988gnAJjfWbEmSRxhBNNYoPOCyyy4D4Iorrgjly02l07Vr1zAeyZU+ZswYIEo4K5W4OephypRhGIZhGEYetBplSkrU+eefD2R9pIsXLw6rjKSPXBaorHitIjt16sSRRx4JRPEBAMcff3zYmt3SQWuNRSsorZBLSkqCivbnP/8ZSE/cSSaTCTFqKuOkSZP4xz/+ARBUKK0mkmrgyy+/DESrYqmJakP5/hUDAS23YlIcgVa+FRUVfPbZZ0A2nmDSpEl88MEHQOS7h+xKcfvttw9qx5lnnglEMUbHH388kA36VCxNmpGytv/++wPZPjl58uQQsJpU2KRkffWrXwWyfbm6upoJEyaEfxcK9SEpMuXl5VxzzTVANj5DfbSysjKoAEpJMm/evEateBXLkQycLbQS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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from variational_autoencoder_dfc_util import plot_image_rows\n", "\n", "def encode(model, images):\n", " '''Encodes images with the encoder of the given autoencoder model'''\n", " return model.get_layer('encoder').predict(images)[0]\n", "\n", "\n", "def decode(model, codes):\n", " '''Decodes latent vectors with the decoder of the given autoencoder model'''\n", " return model.get_layer('decoder').predict(codes)\n", "\n", "\n", "def encode_decode(model, images):\n", " '''Encodes and decodes an image with the given autoencoder model'''\n", " return decode(model, encode(model, images))\n", "\n", "\n", "if use_pretrained:\n", " # Manually selected indices corresponding to digits 0-9 in the test set\n", " selected_idx = [5531, 2553, 1432, 4526, 9960, 6860, 6987, 3720, 5003, 9472]\n", "else:\n", " # Randomly selected indices \n", " selected_idx = np.random.choice(range(x_test.shape[0]), 10, replace=False)\n", "\n", "selected = x_test[selected_idx]\n", "selected_dec_vae = encode_decode(vae, selected)\n", "selected_dec_vae_dfc = encode_decode(vae_dfc, selected)\n", "\n", "plot_image_rows([selected, selected_dec_vae, selected_dec_vae_dfc], \n", " ['Original images', \n", " 'Images generated by plain VAE', \n", " 'Images generated by DFC VAE'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can clearly see that the images generated by the DFC VAE are less blurry than the images generated by the plain VAE. A similar trend can also be seen for other samples. To quantify blur we compute the Laplacian variance for each image to have a single measure of focus[3] (see also [Blur detection with OpenCV](https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/)). " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import cv2\n", "\n", "def laplacian_variance(images):\n", " return [cv2.Laplacian(image, cv2.CV_32F).var() for image in images]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Laplacian variance increases with increased focus of an image or decreases with increased blur. Furthermore, images with a smaller amount of edges tend to have a smaller Laplacian variance (the [Laplacian kernel](https://en.wikipedia.org/wiki/Discrete_Laplace_operator#Image_Processing) is often used for edge detection in images). Therefore we first have to analyze the Laplacian variances for digit classes 0-9 in the MNIST test set before we can compare blur differences in generated images:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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Btrb2znnnHPYtWsXPT09BYvDBVKpFIcccghdXV309PRQVlZGZWUle/bsoa+vL+7wYiMptnPEoYceyo4dO5g5cyYvvfQShx9+OC+++CLV1dW88sorB7UtSY+Y2aJc6+W8sjCzfwLuAn4IvAX4fNISxViQRCqVGvaEWQwqKyupq6tDEnV1dVRWVhY8hv3793P77bcP6An49ttvZ//+/QWPxQXfjb179/LlL395wN9i/67Eafv27UydOnVAicjUqVPZvn173vaZM1lImgv8t5n9vZldAbRLqstbRDHZtm0bfX19bNu2Le5QYtXV1cWWLVswM7Zs2UJXV1cscdx2220DuuW+7bbbYonDQV9fH5WVlbS0tDBlyhRaWlqorKws6quKJGhubuaZZ56hr6+PZ555hubm5rzuL0qdxQ+AzE9FbzhvQunt7R3wt5ilL63jusSuqqqitbWVk046ie3bt3PSSSfR2traX2ZebJIwnkW6XDzzr4vXjTfeSFtbGz09PbS1tXHjjTfmd4e5asCBx7PMeyJK7Xkhp9G0hgJsypQplkqlbMqUKUXbXJSEtIZKUpcKcUtCE970Z2DmzJkmqf+epGL8jmSK8/XX1tbapEmTBnxHJk2aNKLvCGPYGmqbpKXpB5LOBF4egzyVGJLYvXs3fX197N6928tiY/b8889z/vnnk0oFH89UKsX555/P888/H3NkhbdixQpWr149oP5m9erVsbREevHFFzGz/gYgLj5nnXUW+/bto6amBknU1NSwb98+zjrrrLztM0qyuAT4B0nPSdoCfA64OG8RxWTmzJlIYubMmXGHEruVK1eyd+9eVq5cGcv+jzzySNasWcOsWbOQxKxZs1izZg1HHnlkLPHEqaOjg87OzgHFUJ2dnXR0dMQdmotRW1sbV111FYcddhiSOOyww7jqqqtoa2vL306jXH4EVyocAhwSdf1CT6MphiovLx9wmV9eXl6Ul9iEN8BlXtqmb4wrpJqamqw3StbU1BQ0jiSora21adOmDehqY9q0aQUtkiNBfYYlSZyvfyz7LmOsiqEkVUg6F/gUcLmkz0v6fJREJOl0SU9K2iTpyizLL5f0e0nrJf1C0tEZy3olPR5Od0fZ30h1d3dz9tlnU1FRwdlnn013d3c+d5do+/bt66+87OvrY9++fQWPYfv27UyaNIlXXnmFvr4+XnnlFSZN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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "\n", "laplacian_variances = [laplacian_variance(x_test[y_test == i]) for i in range(10)]\n", "\n", "plt.boxplot(laplacian_variances, labels=range(10));\n", "plt.xlabel('Digit class')\n", "plt.ylabel('Laplacian variance')\n", "plt.title('Laplacian variance statistics per digit class');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a first approximation we can say that the Laplacian variance statistics for all digit classes are comparable except for class 1. It is no surprise that the average Laplacian variance of images showing a 1 is lower compared to other images as the amount of detectable edges is lower there as well. This also explain the (less prominent) difference between digit classes 7 and 8. \n", "\n", "The following histogram shows the frequency of Laplacian variances for all images in the MNIST test set except for digit class 1. The frequencies for the original images as well as for the images reconstructed by the plain VAE and the DFC VAE are shown in different colors." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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AawD7gO+UNVGwBfuOEBPoJH7uhl4JaQRmxLr8PFM7+vIiZMcOXEyInEsWrSIK664gr59+9KwYUPuu+8+ZsyYQdu2bWnWrBmbN28G4D//+Q/t2rWjZcuWdO3alV9++QVwuvi98soriY+P58Ybb+Scc87x1ljfeecd2rZtS0JCArfccgsnT57k5MmTjBw5kqZNm9KsWTOee+65U2LavHkz7du3p1mzZkyYMCHbr49nnnmGNm3a0Lx5cx5++GGAXLtF3rx5Mz169KBVq1Zcdtll3trnyJEjGTNmDO3atePee+9l6dKldOjQgZYtW3LxxRezfv16jh8/zkMPPcTs2bNJSEhg9uzZHDp0iNGjR9O2bVtatmzJRx99BMCRI0cYNmwYjRs3pn///t7t+/P000/TrFkz2rZty6ZNm/j9999p0KABJ06cAJx+h3zHPTwxt27dmvPPP5+PP/74lHX72w/P++yp9U+cOJHRo0fTsWNHGjZs6PcLoEuXLvz444/s2rULgEOHDrFgwQLvvQcZGRl88803TJs27ZQvhLBT1VxfQBVgK+5dtD7T1wO13eHawHp3+FVguL9ygV6tWrXSiNix/I+XiWqpqal66NgJ7+tw2jI9nLYs+3vovjzzcitzyisIp512mqqqLly4UKtUqaI7d+7Uo0eP6llnnaUPPfSQqqpOnjxZx48fr6qqe/fu1aysLFVVfe211/Tuu+9WVdVx48bpE088oaqqn376qQK6e/duTU1N1T59+ujx48dVVXXs2LE6ffp0TUpK0q5du3rj2Ldv3ymx9e7dW999911VVX3llVe8sX722Wd60003aVZWlp48eVJ79+6tixcv1q1bt2rp0qV1xYoVqqo6ePBgffvtt1VVtXPnzrphwwZVVV2yZIl26tRJVVUTExO1d+/empmZqaqqBw4c0BMnTqiq6ueff64DBgxQVdU33nhDx40b543t/vvv965737592qhRI83IyNC///3vOmrUKFVVXblypZYuXVqXLVt2yr6dc845OmnSJFVVnT59uvbu3VtVVUeOHKlz585VVdVXX33Ve3x9JSYmavfu3fXkyZO6YcMGrVOnjh45ckQXLlzoXU+g/fAt8/DDD2uHDh306NGjunv3bq1evbr3ffI1btw4nTx5sqqqzpw5UwcOHOid98477+jo0aNVVbVDhw6alJSkqqpbt27VuLg4bdGihff11VdfnbLu1NTUU6YBSZpHDlfVoG6YagDsBt4QkRZAMjAeOFNVd7llfgbOdIfrANt9lk93p+3ymYaI3IxT46devXrBfSsZEyXatGnj7e733HPPpVu3boDTFfDChQsB59GDQ4cOZdeuXRw/fpwGDRoATrfFni6Be/ToQbVq1QD44osvSE5Opk2bNoBT4z3jjDO46qqr2LJlC7fffju9e/f2bsvX999/z4cffgjANddc43284Pz585k/fz4tWzpdfGRkZLBx40bq1avnt1vkjIwMvvvuOwYPHuxd97Fjx7zDgwcPpnTp0oDTGVpiYiIbN25ERE6pTXvMnz+fefPmeW++Onr0KD/99BNfffWVtw28efPmAbtvBrzNH8OHD+euu+4C4MYbb+Tpp5+mX79+vPHGG7z22mt+lx0yZAilSpWiUaNGNGzY8JSO1oLdj969e1O+fHnKly/PGWecwS+//HJKN8zDhw/nnnvuYfz48cyaNYvrrrvOO2/mzJne7qqHDRvGzJkzvc848DTdhEswib4McBFwu6r+ICLP80czDQCqqiKSr05zVHUqMBWcvm7ys2wsWbtnLQDxNeIjHInJj5zd/fp2Bexpv7799tu5++67ufrqq1m0aBETJ07MdZ2qSmJiIk8++eQp81auXMlnn33GlClTeO+993j99deDilNVuf/++7nllluyTU9LSzulW+QjR46QlZVF1apVAyYd366YH3zwQTp16sTcuXNJS0ujY8eOAWP44IMPuOCCC4KK2R8ROWX4kksuIS0tjUWLFnHy5EnvE71yW9bfeLD7EagbaV8XX3wxu3btYuXKlXz33XfeJpq9e/fy5Zdfsnr1akSEkydPIiI888wzee98CATTRp8OpKvqD+74HJzE/4uI1AZw//7qzt8BnO2zfF13mjElyoEDB6hTpw4A06dP90737bZ4/vz57Nu3D3DaeOfMmcOvvzr/Snv37mXbtm389ttvZGVlMXDgQCZNmsTy5ctP2Vb79u293Qj7tv92796d119/nYyMDAB27NjhXb8/p59+Og0aNOD9998HnCS9cuXKPPfvzTff9E6vXLlyth42u3fvzosvvuhpymXFCucqp8svv5x3330XcB6usmrVqoBxzZ492/u3Q4cO3unXX38911xzjfcRj/68//77ZGVlsXnzZrZs2XLKF06g/SgI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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from variational_autoencoder_dfc_util import plot_laplacian_variances\n", "\n", "x_dec_vae = encode_decode(vae, x_test)\n", "x_dec_vae_dfc = encode_decode(vae_dfc, x_test)\n", "\n", "not_ones = y_test != 1\n", "\n", "lvs_1 = laplacian_variance(x_test[not_ones])\n", "lvs_2 = laplacian_variance(x_dec_vae[not_ones])\n", "lvs_3 = laplacian_variance(x_dec_vae_dfc[not_ones])\n", "\n", "plot_laplacian_variances(lvs_1, lvs_2, lvs_3, title='Laplacian variance of digit images (class != 1)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On average, the original images have the highest Laplacian variance (highest focus or least blur) whereas the reconstructed images are more blurry. But the images reconstructed by the DFC VAE are significantly less blurry than those reconstructed by the plain VAE. The statistical significance of this difference can verified with a [t-test](https://en.wikipedia.org/wiki/Student%27s_t-test) for paired samples (the same test images are used by both autoencoders):" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T-score = 364.80, p-value = 0.00\n" ] } ], "source": [ "from scipy.stats import ttest_rel\n", "\n", "res = ttest_rel(lvs_1, lvs_2)\n", "print(f'T-score = {res.statistic:.2f}, p-value = {res.pvalue:.2f}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [T-score](https://en.wikipedia.org/wiki/T-statistic) is very large and the [p-value](https://en.wikipedia.org/wiki/P-value) is essentially zero i.e. definitely lower than 0.05. We can therefore conclude that images generated by the DFC VAE are significantly less blurry than those generated by the plain VAE. For images of class 1, the difference is less clear when looking at the histogram but still significant as the p-value is essentially zero here as well:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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gYULF3LWWWfRt29fmjZtyu233860adPo1KkTrVq1Ii0tDYD//ve/dO7cmXbt2tGzZ09++OEHwCvxe/bZZ5OcnMzo0aM57rjjQj3Wl156iU6dOtG2bVuuvvpqDh06xKFDh7j88stp2bIlrVq14vHHH88TU1paGqeeeiqtWrViwoQJOb59PProo3Ts2JHWrVtz7733AuRbFjktLY3evXvTvn17unTpEup9Xn755YwZM4bOnTtz6623snjxYk477TTatWvH6aefztq1a/n111+55557mDlzJm3btmXmzJns3r2bUaNG0alTJ9q1a8fcuXMB2Lt3L0OHDqV58+b0798/tP1IHnnkEVq1akWnTp1Yv349v/zyC02aNOHAgQOAV3co/HW27Jg7dOjAiSeeyBtvvJFn3ZH2I/vvnN3rnzhxIqNGjaJr1640bdo04gdAjx49WLNmDVu2bAFg9+7dzJ8/P/Tbg8zMTD7++GOmTp2a5wOhpBWY6J1zHwI/55o2zzmX/ZG+CMguUdcXmOGc2++c+xZYD3QqxnhFSoXly5czefJkVq9ezYsvvsjXX3/N4sWLGT16dKgGzB/+8AcWLVrEsmXLGDp0KI888ggA9913H927d2flypUMGjSI7777DvB++Thz5kw++eQTUlJSqFixItOmTQsVDVuxYgWpqamhmvjhxo0bx7hx40hNTc1RMXLevHmsW7eOxYsXk5KSwtKlS/nwww+B6GWRr7rqKp566imWLl3KY489xjXXXBNaX0ZGBp9++il/+ctfOPnkk/noo49YtmwZ999/P3feeSeVK1fm/vvvZ8iQIaSkpDBkyBAefPBBunfvzuLFi1mwYAF//OMf2b17N3//+9+pVq0aq1ev5r777otavhmgVq1apKamct1113HjjTdSo0YNunbtyptvvgl4PecBAwZQqVKlPMump6ezePFi3nzzTcaMGZOnYFuk/YhkzZo1vPPOOyxevJj77rsvz4dKxYoVGThwYKiu0X//+1+6du1KzZo1AZg7dy69e/fmxBNPpF69ejn2Ny0tLcfQzUcffRT1WBRFcfxgahQw03/eEC/xZ8vwp4kESseOHUPlfo8//nh69eoFeKWAFyxYAHhJcciQIWzZsoVff/2VJk2aAF7Z4uySwL1796ZOnToAvPfeeyxdupSOHTsCXo/3yCOP5IILLuCbb77h+uuv57zzzgttK9xnn33Ga6+9BsDFF18cur3gvHnzmDdvHu3atQO8XuW6des49thjI5ZFzszM5NNPP+Wiiy4KrXv//v2h5xdddBEVK3pf0nfu3MmIESNYt24dZpYn8WWbN28er7/+eujHV/v27eO7777jww8/DI2Bt27dOmr5ZiA0/DFs2DDGjx8PwOjRo3nkkUfo168f//rXv3j22WcjLjt48GAqVKhAs2bNaNq0aZ5Ca7Hux3nnnUeVKlWoUqUKRx55JD/88EOeMszDhg3jlltuYdy4ccyYMYNLL700NG/69OmhctVDhw5l+vTpoXscZA/dlJS4Er2Z3QUcBApdUs/MrgKuAjj22GPjCUPksMtd7je8FHD2+PX111/PTTfdxIUXXsjChQuZOHFivut0zjFixAgeeuihPPOWL1/OO++8w+TJk3nllVd47rnnYorTOccdd9zB1VdfnWN6enp6nrLIe/fuJSsri9q1a0dNOuGlmO+++266devGnDlzSE9Pp2vXrlFjePXVVznppJNiijkSM8vz/IwzziA9PZ2FCxdy6NCh0B298ls20utY9yNaGelwp59+Olu2bGH58uV8+umnoSGan3/+mffff5/U1FTMjEOHDmFmPProowXvfDEo8lU3ZnY5cD4w3P1WGW0T8PuwZo38aXk456Y45zo45zo0aNCgqGGIlFo7d+6kYUPvC+0LL7wQmh5etnjevHls374d8MZ4Z8+ezY8//gh4yWHDhg389NNPZGVlMXDgQCZNmsSXX36ZZ1unnnpqaOglfPz3nHPO4bnnniMzMxOATZs2hdYfSc2aNWnSpAmzZs0CvCS9fPnyAvfv+eefD02vUaNGjgqb55xzDk899RTZaWLZMu8qpzPPPJOXX34Z8G6u8tVXX0WNa+bMmaF/TzvttND0yy67jIsvvjjicFa2WbNmkZWVRVpaGt98802eD5xo+1EUZsaQIUMYMWIE5557LklJSQDMnj2bSy+9lA0bNpCens7GjRtp0qRJsQ/RRFOkRG9mvYFbgQudc+E3sHwdGGpmVcysCdAMWBx/mCK5HNOueB8lYOLEiVx00UW0b9+e+vXrh6bfe++9zJs3j5YtWzJr1iz+7//+jxo1atCiRQsmTZpEr169aN26NWeffTZbtmxh06ZNdO3albZt23LJJZdE7PE/8cQT/OUvf6F169asX78+VE64V69eXHzxxZx22mm0atWKQYMGFVjmeNq0aUydOpU2bdqQnJwcOnma26233sodd9xBu3btcvRuu3XrxqpVq0InY++++24OHDhA69atSU5O5u677wZg7NixZGZm0rx5c+655548t2oMt337dlq3bs1f//rXHCejhw8fzvbt23Nc2ZLbscceS6dOnTj33HOZPHlyKPkWtB9FNWzYMJYvX57napvcVT8HDhwYuvom9xh9Ya72iYlzLt8HMB3YAhzAG3O/Au8k60YgxX9MDmt/F5AGrAXOLWj9zjnat2/vpHT5auOOPI9EWrVqVUK3X5z27dvnDhw44Jxz7tNPP3Vt2rSJe527d+92WVlZzjnnpk+f7i688MK411kWzJo1y11yySVR548YMcLNmjXrMEZUciL9HwCWuBhybIFj9M65SB+VUe9O7Jx7EHiwEJ81IuXKd999x+DBg8nKyqJy5cpRTyIWxtKlS7nuuutwzlG7du2Yx/DLsuuvv5633347ENfslzTdeEQi0o1HREqXeG48ohIIIiIBp0QvIhJwSvQiIgGnWwlKXErbWL6I5KUevZRJK7etLNZHLFSmODalqUzxxIkTadiwIW3btqVZs2YMGDCAVatW5djmSSedFLp+ffbs2QB8//33DB06lOOPP5727dvTp08fvv766xzr7tatG++8806OaU888QRjx47N8TopKYmdO3/rEC1cuJBatWrluG5+/vz5Rdq/WCnRi0ihlaUyxePHjyclJYV169YxZMgQunfvztatW0PzswvHpaSkMGjQIJxz9O/fn65du5KWlsbSpUt56KGHQtVHs8Valrhjx4785z//ydGuS5cuOcoS9+zZswT2/DdK9CKFpDLFZadMcW5DhgyhV69eodILkSxYsIBKlSoxZsyY0LQ2bdrQpUuXHO0GDRrEm2++ya+//ho6pps3bw61S0tLIzMzk0mTJuWpP3+4KdGLFIHKFJedMsW5nXLKKTkqWA4fPjw0hLJt2zZWrFiRbzmGbHXr1qVTp068/fbboRgGDx4cKpo2Y8YMhg4dSpcuXVi7dm2ObwQfffRRjqGb7M5BSdHJ2HJGJ0+Lh8oUl50yxbnl/pHotGnT6NChwN8cRY1rxowZ9O3blxkzZjB16m9FA6ZPn86cOXOoUKECAwcOZNasWVx33XWAN3QT6SYoJUWJXqQIVKa47JQpzm3ZsmX5Jvbk5OTQSdmC9O3bl/Hjx/Pll1+yZ8+e0DeB1NRU1q1bx9lnnw0Q+qDPTvSHm4ZuREqIyhT/FkMiyxSHe/XVV5k3b16+1S67d+/O/v37mTJlSmjaV199FbGkcPXq1enWrRujRo3KcxJ24sSJpKenh8buN2/ezIYNG2KKs7ipRy9lUnK95ESHUKDsMsV16tShe/fufPvtt4BXpnjYsGG8+OKLnHbaaaEyxfXr1w+VKc7KyqJSpUo8/fTTVK1alZEjR5KVlQUQtUzxJZdcwoMPPkjv3r1zlClevXp1KDlWr16dl156KTT8Esm0adMYO3YskyZN4sCBAwwdOpQ2bdrkaXfrrbcyYsQIJk2axHnnnRea3q1bNx5++GHatm3LHXfcwd13382NN95I69atycrKokmTJrzxxhuMHTuWkSNH0rx5c5o3bx5TmeIqVarkOLE5fPhwJkyYkG/ifvzxx3nppZfYvXs3LVu25P333ye/e2CYGXPmzOHGG2/kz3/+M0lJSTRu3JgnnngiYvthw4bRv3//HB+wM2bMyHPlUXabzp07h8bos02YMIFBgwZFjSleKmpWzsQ6Rl/c7eIVpKJm+/fvp2LFihxxxBF89tlnjB07Nu7byO3Zs4eqVatiZsyYMYPp06dHrSMfJLNnz2bu3Lm8+OKLiQ6lxMVT1Ew9epHDTGWKi4fKFMdOiV5iFqn3LoXXrFmz0Dh1cenSpUvUsfSgyr6MVQqmk7FSZpSGYUaRRIj3va9EL2VCUlIS27ZtU7KXcsc5x7Zt2/Lc67YwNHQjZUKjRo3IyMjIUaNEpLxISkrK8YvnwlKilzKhUqVKoV+WikjhaOhGRCTglOhFRAJOiV5EJOAKTPRm9pyZ/WhmK8Km1TWzd81snf9vHX+6mdmTZrbezL4ys1NKMngRESlYLD3654HeuabdDrznnGsGvOe/BjgXaOY/rgL+XjxhiohIURWY6J1zHwI/55rcF8gux/cC0C9s+r+dZxFQ28yOLq5gRUSk8Io6Rn+Uc26L//x74Cj/eUNgY1i7DH9aHmZ2lZktMbMlujZaRKTkxH0dvXPOmVmhf67onJsCTAGvemW8cUjRqYaNSLAVtUf/Q/aQjP9v9p0MNgG/D2vXyJ8mIiIJUtRE/zowwn8+ApgbNv0y/+qbU4GdYUM8IiKSAAUO3ZjZdKArUN/MMoB7gYeBV8zsCmADMNhv/hbQB1gP7AFiu7+XiIiUmAITvXMu2j26ekRo64Br4w1KRESKj34ZKyIScEr0IiIBp0QvIhJwSvQiIgGnRC8iEnBK9CIiAadELyIScEr0IiIBp0QvIhJwSvQiIgGnRC8iEnBK9CIiAadELyIScEr0IiIBp0QvIhJwSvQiIgGnRC8iEnBK9CIiAadELyIScEr0IiIBp0QvIhJwSvQiIgF3RDwLm9l4YDTggFRgJHA0MAOoBywFLnXO/RpnnFKGpGbszDOtVaNaCYhERCCOHr2ZNQRuADo451oCFYGhwJ+Bx51zJwDbgSvK01fAAAAPhUlEQVSKI1ARESmaeIdujgCqmtkRQDVgC9AdmO3PfwHoF+c2REQkDkVO9M65TcBjwHd4CX4n3lDNDufcQb9ZBtAw0vJmdpWZLTGzJVu3bi1qGCIiUoB4hm7qAH2BJsAxwO+A3rEu75yb4pzr4Jzr0KBBg6KGISIiBYhn6KYn8K1zbqtz7gDwH+AMoLY/lAPQCNgUZ4wiIhKHeBL9d8CpZlbNzAzoAawCFgCD/DYjgLnxhSgiIvGIZ4z+c7yTrl/iXVpZAZgC3AbcZGbr8S6xnFoMcYqISBHFdR29c+5e4N5ck78BOsWzXhERKT76ZayISMDF1aOX0i3SL1RFpPxRj15EJOCU6EVEAk6JPgFWblvJym0rEx2GiJQTSvQiIgGnRC8iEnBK9CIiAadELyIScEr0IiIBp0RfUjYv8x4iIgmmRC8iEnAqgVDc1IsXkVJGPXoRkYBTohcRCTgl+gRSGQQRORyU6EVEAk6JXkQk4JToRUQCToleRCTglOhFRAJOiV5EJOCU6EVEAi6uRG9mtc1stpmtMbPVZnaamdU1s3fNbJ3/b53iCrZUUxEzESml4u3R/xX4n3PuZKANsBq4HXjPOdcMeM9/LSIiCVLkRG9mtYAzgakAzrlfnXM7gL7AC36zF4B+8QYpIiJFF0+PvgmwFfiXmS0zs3+a2e+Ao5xzW/w23wNHRVrYzK4ysyVmtmTr1q1xhBEMK7etVEkEESkR8ZQpPgI4BbjeOfe5mf2VXMM0zjlnZi7Sws65KcAUgA4dOkRsI8GRmrEzz7RWjWolIBKR8ieeHn0GkOGc+9x/PRsv8f9gZkcD+P/+GF+IIiISjyIneufc98BGMzvJn9QDWAW8Dozwp40A5sYVoYiIxCXeO0xdD0wzs8rAN8BIvA+PV8zsCmADMDjObQSaxuVFpKTFleidcylAhwizesSzXhERKT76ZWwpp6txRCReSvQiIgEX7xi9FIJ65iKSCEr0kjCRrq0HXV8vUtw0dCMiEnDq0Ze0zcvgmHaFXkzDPCJSXJToDwMlbRFJJA3diIgEnBK9iEjAaehGSh1VuhQpXurRi4gEnHr08ci+R2wRrqqJRiduRaS4qUcvIhJwSvQiIgGnoZtE2LrW+7fBSfm3kxCdoBUpOvXoRUQCTom+jNBJWhEpKiX6ErBy17es3PVtosMQEQGU6EVEAk8nY0tQqFevk64ikkDq0YuIBJwSvYhIwMWd6M2sopktM7M3/NdNzOxzM1tvZjPNrHL8YQbE1rW/XUMvInKYFEePfhywOuz1n4HHnXMnANuBK4phG6Vbds0bEZFSKK5Eb2aNgPOAf/qvDegOzPabvAD0i2cbIiISn3h79E8AtwJZ/ut6wA7n3EH/dQbQMNKCZnaVmS0xsyVbt26NMwwREYmmyInezM4HfnTOLS3K8s65Kc65Ds65Dg0aNChqGCIiUoB4rqM/A7jQzPoASUBN4K9AbTM7wu/VNwI2xR+mFCRS0S8REYijR++cu8M518g51xgYCrzvnBsOLAAG+c1GAHPjjrK02LyswBOvEUsf6GobEUmgkriO/jbgJjNbjzdmP7UEtiEiIjEqlhIIzrmFwEL/+TdAp+JYr0h+VKNeJDaqdVMUum5eRMoQlUAQEQk4JfpE0klaETkMlOhFRAJOiV5EJOB0Mjaa8BOux7QrsLluHSgipZV69CIiAadELyIScBq6iUUpvW5+5baVACTXS05wJCJSmqlHLyIScEr0IiIBp6Gb3ErpMA38NlQjIlIY6tGLiAScEn1poDIIIlKClOhFRAJOiV5EJOB0MjZbKT4JKyISD/XoRUQCTj36siT7pG2DkxIbRwDoNoRSnijRx0lVK0WktNPQjYhIwCnRi4gEXJETvZn93swWmNkqM1tpZuP86XXN7F0zW+f/W6f4whURkcKKp0d/ELjZOdcCOBW41sxaALcD7znnmgHv+a9FRCRBinwy1jm3BdjiP//FzFYDDYG+QFe/2QvAQuC2uKIsKZuXxXSbQCk7dDWNSF7FMkZvZo2BdsDnwFH+hwDA98BRUZa5ysyWmNmSrVu3FkcYh8XKXd+W7JU2W9dGrn2TXz2cGH7s9c2uNXyza00cgYlIWRV3ojez6sCrwI3OuV3h85xzDnCRlnPOTXHOdXDOdWjQoEG8YYiISBRxXUdvZpXwkvw059x//Mk/mNnRzrktZnY08GO8QZZrqmwpInGK56obA6YCq51zfwmb9Towwn8+Aphb9PBERCRe8fTozwAuBVLNLMWfdifwMPCKmV0BbAAGxxdi6ZTIX8Su/yEzx+vKv/4K9SO31bi8iMRz1c3HgEWZ3aOo6y12ZeXKmtxDNHEM2Xyzaw1Na54cdR4Qdb6IBI9+GSsiEnDls6hZ+OWIZbAOfZUd6wHYX/sEANL2fMf+XZXVSxeRiMpnog+o8PH4oozNl/dhHf3YSoJKQzciIgGnHn0Zlj2EE2la9rBOLHRljkiwKdGXE1V2rM+R/MtTco80JCNSnmjoRkQk4MpHj74MXllTWJGGcUREQD16EZHAKx89+mJQ1m4CXpSTstGU98suRco6JfqA05COiGjoRkQk4ILboy8HJ2ALqziHc0Sk7Ahuoo9D9nh8cs0mOV5L+aOyCBIEGroREQk4JXqJi246LlL6BW/oRmPzxUYJXCQY1KMXEQm44PXopUAFXX0TrSef3y0KyxOdoJWyRj16EZGAK/s9+hIckw/6ZZW5e/a5SxlHonH7yApTClm9fzncyn6iD4iNP+9NdAiAflSVKLF+UOhDQopCQzciIgFXYonezHqb2VozW29mt5fUdiR+VXasj1r8LL954fK7nl7X2oskVokM3ZhZReBp4GwgA/jCzF53zq0qie1J8Stq1cv8Enrucsfltfxxcd/aUFcBlR2J+luVVI++E7DeOfeNc+5XYAbQt4S2JSIi+Sipk7ENgY1hrzOAzuENzOwq4Cr/ZaaZrS2hWMqC+sBPiQ6ilNExyUvHJLLyfFyOi6VRwq66cc5NAaYkavuliZktcc51SHQcpYmOSV46JpHpuBSspIZuNgG/D3vdyJ8mIiKHWUkl+i+AZmbWxMwqA0OB10toWyIiko8SGbpxzh00s+uAd4CKwHPOuZUlsa2A0BBWXjomeemYRKbjUgBzziU6BhERKUH6ZayISMAp0YuIBJwSfQkqqAyEmVUxs5n+/M/NrLE/vbGZ7TWzFP8x+XDHXlJiOCZnmtmXZnbQzAblmjfCzNb5jxGHL+qSF+dxORT2XgnMRQ8xHJObzGyVmX1lZu+Z2XFh8wL7XikS55weJfDAOwmdBjQFKgPLgRa52lwDTPafDwVm+s8bAysSvQ8JOiaNgdbAv4FBYdPrAt/4/9bxn9dJ9D4l+rj48zITvQ8JOibdgGr+87Fh/38C+14p6kM9+pITSxmIvsAL/vPZQA8zs8MY4+FW4DFxzqU7574CsnItew7wrnPuZ+fcduBdoPfhCPowiOe4BFUsx2SBc26P/3IR3u91INjvlSJRoi85kcpANIzWxjl3ENgJ1PPnNTGzZWb2gZl1KelgD5NYjklJLFvaxbtvSWa2xMwWmVm/4g0tYQp7TK4A3i7isoGnG4+UTluAY51z28ysPfCamSU753YlOjAplY5zzm0ys6bA+2aW6pxLS3RQh4uZXQJ0AM5KdCyllXr0JSeWMhChNmZ2BFAL2Oac2++c2wbgnFuKN1Z5YolHXPLiKY0R5LIace2bc26T/+83wEKgXXEGlyAxHRMz6wncBVzonNtfmGXLEyX6khNLGYjXgewrAgYB7zvnnJk18Gv64/fSmuGdUCrr4imN8Q7Qy8zqmFkdoJc/LQiKfFz841HFf14fOAMIwn0fCjwmZtYO+Adekv8xbFaQ3ytFk+izwUF+AH2Ar/F65Hf50+7He2MCJAGzgPXAYqCpP30gsBJIAb4ELkj0vhzGY9IRb0x1N7ANWBm27Cj/WK0HRiZ6X0rDcQFOB1LxrkpJBa5I9L4cxmMyH/jB/3+SArxeHt4rRXmoBIKISMBp6EZEJOCU6EVEAk6JXkQk4JToRUQCToleRCTglOjlsDGzzGJYR2MzW1HEZe/3f2CTcGb2aaJjkPJDJRCk3HDO3ZPoGMzsCOfcQefc6YmORcoP9egloczsAr8W/zIzm29mR/nTJ5rZi2b2mV9T/MoIyzY2s4/8Ou1fmtnpYfNuM7NUM1tuZg/7057PruVuZveY2RdmtsLMpmRXDTWzhWb2ZzNbbGZfRyooZ2YzzOy8sNfPm9mgaPGYWVd/+uv4v1rN/nZjZtX9Wupf+vH2Ddu31Wb2rJmtNLN5ZlbVn3eCf6yW+8sd70//o79PX5nZfcXyB5JgSPQvtvQoPw8i1E3Hqxee/cO90cD/859PxPu1Z1WgPl41wmMIq9UPVAOS/OfNgCX+83OBT/mtVnld/9/n8Wu5Z0/zn7+I/+tjvFox2TH0AeZHiLk/8IL/vLIfW9V84umK94vWJrmPBd636pr+8/p4v+Q0fz8PAm39ea8Al/jPPwf6+8+T/O32wrtJtuF14N4Azkz031yP0vHQ0I0kWiNgppkdjZc0vw2bN9c5txfYa2YL8GqUp4TNrwT8zczaAof4rfBbT+Bfzq9V7pz7OcJ2u5nZrXhJsi5eyYn/+vP+4/+7FC/h5vY28Fe/xkxv4EPn3F4zqxUlHoDFzrlvI6zLgD+Z2Zl4teYbAkf58751zmXv71KgsZnVABo65+b4+7YPwMx64SX7ZX776ngfNh9G2KaUM0r0kmhPAX9xzr1uZl3xevLZctfnyP16PF6tkzZ4vdh9sWzQzJKAZ4AOzrmNZjYRr2ecLbsK4iEi/B9xzu0zs4V4N7gYgndTjILi2R0lnOFAA6C9c+6AmaWHxbI/rN0hvG8NUXcLeMg594982kg5pTF6SbRa/FZCNve9PfuaWZKZ1cMb/vgiwrJbnHNZwKV4t58D745CI82sGoCZ1c21XHYi/cnMquNVDi2smcBIoAvwvwLiyU8t4Ec/yXcDjsuvsXPuFyAj+wYj5t13uBpedcZR/v5gZg3N7Mgi7JcEkBK9HE7VzCwj7HETXg9+lpktBX7K1f4rYAHebeIecM5tzjX/GWCEmS0HTsbvNTvn/odX0naJmaUAt4Qv5JzbATwLrMBLkLk/QGIxD+9GF/Odd6u7qPEUYBrQwcxSgcuANTEscylwg5l9hXcu4v+cc/OAl4HP/HXNBmoUZockuFS9Ukolfzgl0zn3WKJjESnr1KMXEQk49ehFRAJOPXoRkYBTohcRCTglehGRgFOiFxEJOCV6EZGA+//ZMqtYIS0cmQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ones = y_test == 1\n", "\n", "lvs_1 = laplacian_variance(x_test[ones])\n", "lvs_2 = laplacian_variance(x_dec_vae[ones])\n", "lvs_3 = laplacian_variance(x_dec_vae_dfc[ones])\n", "\n", "plot_laplacian_variances(lvs_1, lvs_2, lvs_3, title='Laplacian variance of digit images (class == 1)')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T-score = 78.94, p-value = 0.00\n" ] } ], "source": [ "res = ttest_rel(lvs_1, lvs_2)\n", "print(f'T-score = {res.statistic:.2f}, p-value = {res.pvalue:.2f}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although the distributions for class 1 are more skewed, usage of the t-test can still be justified as the sample size is large enough (1135 class 1 images in the MNIST test set)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linear interpolation between images\n", "\n", "Linear interpolation between two images is done in latent space. A finite number of points are sampled at equal distances on a straight line between the latent representations of the input images and then decoded back into pixel space:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "def linear_interpolation(model, x_from, x_to, steps):\n", " n = steps + 1\n", "\n", " t_from = encode(model, np.array([x_from]))[0]\n", " t_to = encode(model, np.array([x_to]))[0]\n", "\n", " diff = t_to - t_from\n", " inter = np.zeros((n, t_from.shape[0]))\n", " for i in range(n):\n", " inter[i] = t_from + i / steps * diff\n", "\n", " return decode(model, inter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use the `linear_interpolation` function to interpolate between digits 1 and 5 and compare results generated by the plain VAE and the DFC VAE:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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QpBOy+ExDpVKVVVVPN/SV1xmFuNsyjXAvC34SmvkyJExdspt7NGjR6zPSlk5pvEyezDzhRdeGGNVlixZAiTpZjzdSlsCl8sJrztvm7169Yp9zutt1113jekcKil1las3voEgfebs4MGDgfzGnsbGxliflaJUmRl77703QEyk7v2utrY2nozhas7rr78eU8lUQj127949nszhyrf3q4EDB8bE/65SvfPOO83OPS5nvG3uu+++Ufl2z5qnvxkzZkxUhz1m/913340ejXK10W1zte2oo46KMX1ef16fe++9d4yH9tOClixZ0kJlLRfMLKbi8pNZ9ttvv2ire53SG7NcOfW+98EHH8T7fUeMNVIWhRBCCCFEUSpeWUyvkn11DPnEuOkEqpVIVVUVo0aNAvJqTlNTU4wLqxQ1ozV8Jdm3b9+4u9ZXkKtWraqYHcKtUZgmoaqqKqqNvorMZrNRbUynr6gEvO58pbtu3brYFj2VRzrtyLx584DK2LXvCoAra94OM5lMXPl7yovXXnuNxx9/HMin6UrbXY6YWVR/XY3y/gdw5plnAnDCCScAyRjqmQn8yE0/jrKc+mY6TtjbmbdPT4dUX1/PVVddBTQ/7s+P9PM69DN0y2V8LTzmraGhId7bCmPhDj74YA466CCgeTyjK6l/+ctfALjxxhubvaYjMbM4pvgxd6tWrYoKodvo8cPnnHNOTGSdtvGll14CiL//8z//E8ircx2FmcU+NmzYMCBpm4Ux68cddxwARx99dHy9H2fY0NAQszC4PVdeeSWQqOPbmoqfLEL+AqfPO/XTByqdTCYTG5fb19TUFKX3cjhn9tPiA3ptbW2U49OD+iGHHALAfffdB5Sfa6Et+M24a9eucZLog/q5554bT5iYMGECkO/05e5697r785//DCQn7/imCT9l4YADDoiB235j+vnPfw7kb9TliNvmGyHczdylSxf69OkD5FMG7b333tHl6RNIv4lNnz69LPtlJpOJ4QHe3nzDUkNDQ9xI5+lKstlsXLCec845QJLaA+D73/9+2fRLv9bZbDam/fH8rR5KsGbNmmif/85kMnFDjKcnczfu0UcfHVN3lQO+6Sh9nrOnCfJFzrp162I79XHVzOJmkS984QsAXHbZZQCcddZZPPDAA0DHjTshhHgv81NJnn/++ZgWyMdMt7GxsTHmCPX8kpDvlx7W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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_linear_interpolations(x_from, x_to, steps=10):\n", " plot_image_rows([linear_interpolation(vae, x_from, x_to, steps), \n", " linear_interpolation(vae_dfc, x_from, x_to, steps)], \n", " ['Linear interpolation with plain VAE', \n", " 'Linear interpolation with DFC VAE'])\n", "\n", "plot_linear_interpolations(selected[1], selected[5])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to generating less blurry images, the interpolation done by the DFC VAE is also less surprising as it doesn't generate intermediate digits of values other than 1 and 5. It just distorts the vertical bar representing a 1 more and more to finally become a 5. On the other hand, the plain VAE generates the intermediate digits 8 and 3. The situation is similar for an interpolation between digits 1 and 3:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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jx492G+//QC46aabABg6dCi/+c1vALjooosAWLt2bR6Ocssw5beiogKA4cOHc9pppwHwpS99CYBPPvmE7373uwAsWLAAKByl2K61HXbYAYBjjz2WXXbZBYA333wTgHnz5vHWW28BsH79+jwc5ZZhbVdaWgrAdtttB8AJJ5zA8uXLgcg2gLq6OjZs2AAUTtvFx5SysjIA+vbtC8CoUaN49dVXAVi6dCkQjZlJG1c2FllxzrUaWwDKy8sB6N+/f7CroaEBgObm5i4/3i1hYzamUqnQhoZdk2VlZXz22WdA8iNrm7Ix+3n7P5VK0dTU1E1H2TU45zZqf9LaTMqiEEIIIYTIyTalLFZVVQFw+umnh5nkmDFjgMysqxApKSkBIrsAevfuHWaVU6dOBTLKYiFhM/qePXtyxhlnADBixAggUgROOOEEAH76058CsGjRIiB5M672iM+AAc466yymT58OZFSOlpYWzj33XAAuvvhiAD7//PNuPtLNw+wZOnQoAGeeeSYAF1xwQein1q7Lly/n5JNPBuC5555r9VxSKS4upra2FoCZM2cC8JWvfAWAgQMHBqXG2umee+7hqquuAuCjjz4Cktc/rS/a75qamhCRmDFjBgADBgwAIlXKVOC6ujoALr/8ch544AEgef3TORcUYLuuRo0aFdrMxpCePXsC0Vj66aefAvDOO+8AUeTixRdfBEiUWmXtVVRURHV1NZBRuceMGcPo0aMBOPTQQ4HMfaKsrIx///vfAPzrX/8C4Morr+SDDz4AkhV9MgU4lUoF23beeWcADj74YIYNGwYQbDXKy8t56KGHAKivrwfg1ltvZeXKlUByrkFTtnv06BGiMHaPGzVqFL179wZg3333BQhRioqKCm699VYgY8usWbPC9ZcP+wrXg2oHC6WUl5eHC2LVqlVAphGcc4npSB3Bex9CRX369AmP2U3XBr5CpqioiD322APItFMqlQo3LRs0Cwk75nh4zwaOeNjSBotCmczYDXnPPfcE4KSTTgKiG5U5kmZfr169+MIXvgBkJjNJdRbjoeezzz4bgMmTJwPQr18/oHVYzK7JY489lkceeQSAJ554AsjYnxTsmHv16gXAxIkTue666wCCExJfEGjO18CBAwG48MILefnllwFCiDrfDoeN4alUKqR6nH/++QBMnz6d7bffHsjcrI2WlpZwTZrtP/zh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f1nfvn3DXos202hoaAiFZS3pvDPs9N5vNEGwK+zr3bs3zz33HJDZdmzDhg1cddVVAFx77bVA55Re2ZR90DU2VldXhzwa21fYe88rr7wCwNixY4GM0rE15NPGb33rWwBceOGFQKRKmTIzfvx4INp/OH2cW/xd3dFPs4vIDhw4MChsVsJj2LBh4XU33ngjAN///veBrVPduqsNbZZvqu9BBx0UlAtT2MaNGxcWoJmyagrOu+++u8Xf3dU2WruYUmo5wyNGjAiPWbmcadOmhXw4U41t+7lLL710i8t3dWU/tXwvy1U0m7bbbrugTln7nH766SFn056zUjrTpk3jT3/60xYdQ1e3oeV0W16wqU7V1dVhIZZtYzhlyhT23ntvIHMfsTHmtddeC/16cxe9dKWNqVQqXHt27Hbd9ejRIzxn+5tPmjQp9FMbTy2vsaGhISiqthFCR+mqflpcXBzUQyuPZ/83NTWFa8366YknnhieP/fcc4HMGOW956abbgJgxowZQMd9go60IWwDzuLEiRPDptrWMd56663Q+W0hSKE6i3vuuSdPP/00kKmJ1tjYGMIm9lxnSM/5cqQGDBjAz372M4CQoNyrV6+wa8TZZ58NdM7G9/mysaamJtixxx57AHDMMceEsLOF+Z555hk7zi3+ru7sp+Z09O/fP9yYbZC69NJL2W233YDMAD158mRg6xz/7m5DC1vutNNOYYWihYYmT54cVmhaWHDmzJkA3HzzzVs8iesuG83Zt5tOnz59wjhqE5lhw4Zx6aWXAoRxxxa4HHfccWGyvrl9tiv7afZkxha1lJaWBkfSnPvKyspg109+8hMgcz7uvvtuLrjgAmDzU0S6ug2z67aaXfHFEebIp1KpsP+3pWjZTjZr164NE9k777zTjr1Dx9DVNsZ39Ep/Vvjb+mncwbV2s1XF1113XficN954A4AxY8YAdLi2ZndMaux8x6uBWPvGxxB7zNrSdo8aPHhwOA92n3nggQc61I4ddRYVhhZCCCGEEDkpeGXx4osv5gc/+EGrx5544olQc6ozdzjJh7J44IEHhjCIzZrWr18fFBp7rpDD0LW1tWH2bmWCDj300LA3tD1m/28N+bKxsrIy7F1ubfXwww+H3SQsrGfnYWuU4nz004qKipAGYmr+1KlTQ/jZZsyWeP76669vsXqarzYsKSkJob/47i533303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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_linear_interpolations(selected[1], selected[3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This doesn't mean that the interpolation with the DFC VAE never creates intermediate digits of other value. For example, an interpolation between digits 3 and 7 creates an intermediate 8 but the overall quality of the interpolation is still much better (less blurry) compared to the plain VAE." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAosAAABxCAYAAAC9fOlBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXmQnNV57p/Ts/TMaHbNaF9GGyNASEJGYpFYDAYHg1eMb64dY1I4ufnj3pTrJnXvLSc3cVJJbtnllB3f3Liy2CYuG2zAYBuz2BiDjFgkI7FLAm1IAi0jjWak0ezLuX98/bx9+utuIWD6m8Z5flVTPdPd0/2939ne9znvOcd57yGEEEIIIUQhUlN9AUIIIYQQonyRsyiEEEIIIYoiZ1EIIYQQQhRFzqIQQgghhCiKnEUhhBBCCFEUOYtCCCGEEKIochaFKAOcc5c7516d6usAAOfcF51z/zbV13E2OOe+5Jz73rv4/1ecc1dN4iVN6vc75x53zn1+kr7rdufc35zlex9yzn1uMr5XCPHeR86iEAninHvdOfeB+PPe+ye8951TcU1xvPd/570/Kwfl3TprSVLIWfLen++9f3yKLinn+8vpXnrvr/fe//vb/T/n3MPOub8u8PxHnXNHnHOVwXNfcs5559zFsffe6pwbd86djv3MeWfWCCHeLXIWhfgPTDh4/0f8fjHp/DuA33POudjznwXwfe/9GABkXr8FwInMY5ynvff1sZ9DJb1yIURR5CwKUQY4565yzr0R/P26c+5PnXMvOudOOud+6JyrCV6/0Tn3vHOu1zn3lHNuZfDa/3LO7XHO9TnntjvnPh68dqtz7knn3Necc90AvlTgWkzhcs51ZNSfzznnDjjnjjvn/izz2u8A+CKA/5RRfl7IPN/knPuWc+6wc+5N59zfOOcqin1/8Nw/Zmzd6Zy7JrieOc65nzrnTjjndjvn/uAM9/HujIJ10jn3a+fc+Znn/xDAZwD8j8y13h/c5w9kfk87577unDuU+fm6cy4dlo9z7k+cc10Z236/yDW83zn3UvD3I8653wR/P+Gc+1j4/cXuZYaFmfvT55z7hXOurcj38hq/mCmn151znyny3hbn3M+cc8eccz2Z3+cFr9v0d6Z8Njnnvpp57z7n3PVFiuDHAKYDuDz8LgA3Avhu8L7LAcwG8McAftc5V13k84QQZYCcRSHKl08B+B0AiwCsBHArADjnLgTwbQD/BdHA/M8AfkrHBsAeRINxE4C/AvA959zs4HMvBrAXwEwAf3uW17IBQCeAawD8hXPuXO/9wwD+DsAPM8rPqsx7bwcwBmApgAsBXAcgnNYu9P0XZ667DcBfArjXOdeaee0HAN4AMAfAJwH8nXPu6iLX+RCAZQBmANgG4PsA4L3/l8zvX8lc64cL/O+fAbgEwGoAqwCsA/DnweuzEN3TuQBuA/D/Mo5QnGcALHPOtTnnqhCV3RznXINzrhbARQCeCP/hDPcSAD4N4PczNlUD+NMitvMa2zLX+DkA/+KcK5TekALwHQALASwAMAjgH8/wuRcDeDXz2V8B8K2MOpiD934QwF3IVQs/BWCn9z50gD8H4P7MewGgUHkIIcoEOYtClC/f8N4f8t6fQDSwrs48/4cA/tl7v9l7P57JLRtG5OjAe3935v8mvPc/BLALkeNDDnnv/6/3fiwzuJ8Nf+W9H8wM+C8gcqbycM7NBPAhAF/w3vd777sAfA3A777F93cB+Lr3fjRzza8CuME5Nx/AegD/03s/5L1/HsC/ofDUJbz33/be93nvhxGppqucc01naeNnAPy1977Le38MkaP92eD10czro977BwGcRuRAx69hEMBvAFwB4H2I7teTGTsuAbDLe999ltcEAN/x3r8WOGKr3+L9/9t7P+y93wjgAUTOWvwau733P/LeD3jv+xA57Vee4TP3e+//1Xs/jmiqeTYiZ78Q/w7gk4ESfkvmOQCAc64OwM0A7vDejwK4B/nleUlGNefPnrewWQhRQpQvJET5ciT4fQCRsgZEatDnnHP/LXi9mq87524B8N8BdGReq0ekCJGDk3At9UXetxBAFYDDgfCUin1noe9/03vvg7/3I7JnDoATGYcmfO2i+Adkprr/FpEj0g5gIvNSG4CTRa43ZE7ms+PXQLqZc5fhTPdhI4CrECmiGwH0IHLGhjN/vx3O9t4DQI/3vj/4O24DAHPYvoZIuaY62uCcq8g4hEWvwXs/kCnbgtfhvd/knDsO4GOZ6fd1AD4RvOXjiJTnBzN/fx/AL51z7RknHQCe8d5vOIOdQogEkbIoxHuPgwD+1nvfHPzUee/vdM4tBPCvAP4rgOne+2YALwMIpwx9gc98p8Q/6yAih6gtuLZG7/35b/H9c2PTmgsAHMr8tDrnGmKvvVngMz4N4KMAPoBourgj8zw/963sPoTI2Y1fwzuBzuIVmd83InIWr0RxZ3EyyqXFOTct+LuYDX+CSBW92HvfmLlOILeevBu+i0gt/D0AP/feHw1e+xwiR/OAc+4IgLsRBRifnqTvFkJMMnIWhUieKudcTfDzdhX+fwXwR865i13ENOfcDRmHahoip+MYAGQWYayY3MvP4SiADudcCgC894cB/ALA3zvnGp1zKefcEufcmaY4gSgf74+dc1XOuZsBnAvgQe/9QQBPAfg/mXu1ElG+YKEtZhoQOardAOoQ5QDGr3XxGa7hTgB/7pxrzywi+Ysi33M2PIXIGVsHYIv3/hVEjujFAH5d5H9y7uW74K+cc9XOucsRLSy5u8B7GhDlKfZmckP/8l1+Z5zvInLa/wC5U9BzEeW93ohoOp35oV9GkdQCIcTUI2dRiOR5ENFAzZ8vvZ1/9t4/i2gQ/kdE05u7kVn84r3fDuDvATyNyPm4AFG+XKmgI9LtnNuW+f0WRNPi2zPXdw+iHLczsRnRwpTjiKaSPxnk9f1nRCrhIQD3AfhL7/0vC3zGdxFNu76Z+e5nYq9/C8B5mRy4Hxf4/78B8CyAFwG8hGiBzFltYh0nMxW8DcAr3vuRzNNPI8r96yryb4Xu5dvlCKJ7fgjR9O4fee93Fnjf1wHUIrrfzwB4+B1+X0G8968jcpinAfhp8NJnATzvvf+F9/4IfwB8A8BK5xwDm0td/j6LayfzGoUQZ4/LTRMSQohkcc7dCuDzylF7d7joJJjvee/nvdV7hRDi7SBlUQghhBBCFEXOohBCCCGEKIqmoYUQQgghRFGkLAohhBBCiKLIWRRCCCGEEEWRsyiEEEIIIYoiZ1EIIYQQQhRFzqIQQgghhCiKnEUhhBBCCFEUOYtCCCGEEKIochaFEEIIIURR5CwKIYQQQoiiyFkUQgghhBBFkbMohBBCCCGKImdRCCGEEEIURc6iEEIIIYQoipxFIYQQQghRFDmLQgghhBCiKHIWhRBCCCFEUeQsCiGEEEKIoshZFEIIIYQQRZGzKIQQQgghiiJnUQghhBBCFEXOohBCCCGEKEplkl/mnPNJft9k4713Z3r9t90+QDa+F1A9lY3vBVRPZeN7AdXTCCmLQgghhBCiKHIWhRBCCCFEUeQsCiGEEEKIoshZFEIIIYQQRZGzKIQQQgghipLoauizwTmHVCqV95xzuQt2Kioq7PexsTEAwMTEBADA++zipPD3cqCQLalUymzm9VZVVdnfcfv4GL6/nHgrG/lIGycmJjA+Pg4gtyxpW7naGCeVSplNrJ/8e3x83MptZGTEnitXG4vZV11dDQD2yLIcHR219w0PDwMob/uAwvXUOYd0Og0gayNtm5iYsPfTxvdqW2S9ZPmxToawTYY2liOFxov4c7QlpNztComPD4Xa53vJnkLQpjPZWI5t7D8KUhaFEEIIIURRykZZrKmpAQB0dHSgo6MDANDc3AwAmDlzJlpbWwEAtbW1Of939OhR9Pf3AwCOHTsGAHj++edx9OhRAFkFIFQ+pgKqFHPnzjW72traAABLlizB9OnTc97HSPLYsWMYHBwEAPT09AAAnnvuubKzD8iqaO3t7WYH7TrvvPMwY8YMADDlpq6uDgDQ3d1t13/8+HEAwG9+8xscOXIEQFb1KAcbKyujJsMyBIBp06YBAFasWGF1l7Y1NDQAAPr6+uz+vP766wCAp59+Gl1dXQDKx0Yqok1NTRbZs20uW7bM7KuvrweQra9jY2PWNl999VUAURmyztKuqbYPyLathoYGK0/aOG/ePMyePRtAtgxDZZE27tq1CwCwe/duDAwM5LyP6vhUQhvr6ury2tv06dOtzlKpOXXqFIBcZZV9zIkTJ8w2KnSFlLokYd2sq6uzsmNdrKmpMftZFhwjvPdW5kNDQwCAgYGBvFmbclCwaGM6nTYb2T4rKyvzZmNYD7339j7aMzY2VpYqP22srKy08gufo220lf1kIRu892VlW0hFRYWVCR9TqVRO+YSPhZhq26bcWWSn9YEPfAAAcO2112LDhg0AkONw0Clio2GDn5iYsBvMgemRRx7BPffcAwB45ZVXcl5LWqrn4EKbNmzYYL+z8547d641Br4/nAKjs9jb2wsA+NWvfoUf//jHAIDt27cDiDp0YGqmIlgm73vf++xx1apVAIBZs2YBABYvXpwzSIf/Nzw8jL6+PgBZh3/jxo144IEHAGSdj6m0kY7eihUrAACrVq3C/PnzAUTBDACsXbvWbOMj6/fY2JjVwQMHDgCIgoRHH30UAPDaa68BmDobad+yZcsAABdccIE593SM161bh5aWFgBAY2MjgCgwAKL2SOf+xRdfBAAsXboUW7duBZBth93d3QCmxtlgn7FgwQIAwLnnnmv1k22xs7MzL5hbuHAhgGjQ3rdvH4AoYAOA/fv3Y8eOHQCiIBXI9jVTYSMHorlz5wKIymDOnDkAsg7+rFmz8tIJWO7Nzc3Wp+zZswcA0NXVhd27dwMAdu7cCQA4efIkgORtpH0st2XLlplzTye3sbHRHA46F7wHbW1teOONNwBk+5oTJ06YfSzf06dPA5jaMmS/EpYhcc7ZtbHvbGpqAhCNl3SOOW4eO3YM+/fvBwAcOnQIQNZZngobORbQxkWLFlmd5b0fHR21a6M9LNeWlhYb91nGJ0+etDJlG+RrYVpTEtA+9pfz5s2zfoT2DQ0N2fWFjj4QjRu0neU0NDRkZR3eIyAZ+zQNLYQQQgghijJlyiIjhMsuuwwAcMsttwCIFBtGG1TUKioqzKOmMsEouba21lQOqnIf+9jHLOqgisNIIylo3/r16wEAt956K4BImaIixYihpqbGbGXEHiqoVDr4eNNNN5mt//AP/wAgefuArI2XXnopAOBTn/oUgKgMOV0ZThfR3nBKiHC6mo+zZs2y37/5zW8CyCqrSapujBBZjjfeeCMAYM2aNTmKExApGvFpL0aOzjmzh9HmwoULsWTJEgDA7bffDgB48sknASRnI+1jGV5zzTUAgNWrV+Occ84BkG1Xzc3NZg/t4/9XVlaaMsD2u27dOlMUv//97wMAfvaznwGI6n5SkX7cxssvvxxAlBpx/vnnA8j2Jy0tLRatM3rnazU1NabenHfeeQCi9ko16u677wYA3HXXXQCie5S0jZdccgmArI2LFy9GZ2cnAOQoxVQt4v1pQ0MDzj33XADZunv06FHs3bsXAHD//fcDAO677z4A0T1Kwkbat3r1agDA1VdfDQCYP38+Fi1aBCCrGM+YMcPse/PNNwFklf6mpiZT0am6vfHGG6bsP/LIIwCy9fTUqVOJtUUqiqxbH/zgBwFEqijVU/Y5M2fOtOs6ePAggOyY0dzcbDMavA979+61GZpNmzYBAH7+858DiPrVpKaoaSP7vRtuuAFAVHasn5ytaG5utus5fPgwgFwbWaYsx927d9v7nn76aQDRLBwQqce8F6W0kfZx/LvuuusA5KrD7EPq6uqsr2E7DNVhjit87cCBA5YusmXLFgCwmanjx4+XfEGalEUhhBBCCFGUKVMW6YEzZ4aq0+joqOVtMUp47rnnLH+GChzVi2XLllmuHKOp5uZmXHzxxTnfV2gZfilhfhQjdipOVVVVpspQLd23b58temAUQfWpo6PDIn3a19raairJP/3TPwHI2uecS0zNYITO3C7azOgIyEY5r7/+uuUKMdrnvZkzZ46prcwda29vN3Xke9/7HoCpsZHRHaNCqtjhQiXW5d7eXsuZ4eIA3pPGxkbLs6JSN3v2bFx55ZUAgIcffjjn/WFCeikJF5YBWWU3zOfjNfX395u6y4U5oX1hxAxE9rGMqZiyvQ8PDydWhrwe5uXRxosuusjUUNblME+KeURsr6GaQbsaGxut/jN3karU4OBgYvlgvK4LL7wQQFaBuuqqq/Lq3fj4eF6uFB9ramrsfrFu1NfXW/1nvX7ssccA5NpYyvJkf8iZKKqll112WZ5iA+QvhOC4UVVVZW2a9tXV1Vn9p9JD5WZgYMCeK3V9pbJ2xRVXAICp3qtWrcK8efMAZOtuKpWy62JdZBk2NDSYbewz6+vrTbHkfWL+6eDgoKlzpbaRdnCNAq9p5cqVpgzTxjAvk22X5VpTU5OzfR6QzdMFsveSqusLL7xgPkYpF6DRBirfK1euBBC1S77Gugxkx0eWZbi4h2XBttzZ2Wn9J5+jv7Bly5a8PNXJLsspcxZZCegEcsHGT3/6U1v5TOP37dtnyfMsaDbu3t5eu9Hr1q0DEFU2diBscHRQkkp05XVS+qdcvGnTJuu8ya5du8w+Tn2xUS1btswGZjqIra2tNi1Bm5mgnWSyMm3kIElH6rXXXstJmAeArVu3WsPlVDvLec6cOfZ+DgahjXyOiwrC/ftKDRsek/55zX19fVi7di2ArDOydetWm85iIw5XRbPO0gnu7OzMGyA4NTQyMpJIWdK+l156CUC2vBobG21Kk47Uyy+/bPbRaSDpdNrqLKfsOzs7zZnklNodd9wBIGrbSU3vcZB4+eWXAWQH1127dtnAyes8cOCA2capV079VFZWWlDDALWjo8Puz7XXXgsA+Pa3vw0g6puSWl0bTsUB2cGyp6fHpvXoTPT09OQEqkA2XWd8fNzKkYu5FixYYA4Wp9U41d7d3W2OWClhXxNPRXHOmdPA6xgcHLQyZ79P+4aGhqxfWbp0KYAo5YXtlGkYDz30EIConiexAtw5Zzbxe+gYpNNpu//hYgf+zrGDZeqcszJnIFNfX2+fz77m8ccfBxDdI97fUk5HO+esncX3Mg1XcLMcwzQO2hbuwcgyCx/5OheRss0fPnzYxKdSBTepVMrGQD7yO3p7e03g4vg3NDSUt89puP8p7xGpq6szZ5LjPsWJU6dO2Rh1phXj78q+Sf00IYQQQgjxW8WUKYv0eqk2hdNa8anbkZERUw8ZiTDa7+npMQWSHntfX5/t18dINL47fKnh93DqlddWVVVl0R4jvf7+fosGGF1xyqilpcXURto8NDRkzzEKi59YkAS0kdE7p6amTZtmijEjyePHj9v1x/fOSqVSptixvEZHR/P2kGTUNRWwHJkcvmfPHquz5PDhw3b9jIQZYabTabt+RoNLlizJm4bg9NGpU6cSqbP8bKoTVG/7+vrstVDhZ7vic7z+cFsHKlNLly7NO+GF9gHJt0mWF9XRdDptfU2otFEVZn2lzT09PTb9w2ufO3euKRu0lZ+ZFOEpLUzhYfvbtGmT3V+2p66uLuuP+H7OgOzbt8/UU9blm266KW+7K/7N7w+Z7PIMT2RhObEM6+vr8/a5PH36tPWPLHMqTLt27bJZJ6qIH/zgB/O2hGLKT6h+l7K+hjayTKgUOedy+kUgKhs+xzGAth4+fNjGGCrg69atM2WLfS3V56QIp86paJPe3l7rY3nPu7u7bVyMp6t1d3dbXeRimbVr1+ZN17O9hjOKpSpH55yVHbcPY9+xZ88e21qL4wDrKJBVRzkmDg4Omn2ciVy1apWp4fGFdt77ku9hK2VRCCGEEEIUZco35WZUxIihoqIib1uO6upqi/gYKTD6XbBggeXWMHLq6emx3K+4+pPk4gggmydE+6qrqy06ZoRRXV2dtwEwo4mOjg7LT+Bzp0+ftgUDjMamYvFH/PQHlmVtba0pF+HpEYzoGdkyP27WrFm2IIllODAwYGoAbSy0832p4feEeSZApA7G8xJra2utjJhszXtUX19vNvK1kZER2yiXyebh2dJJ2Mjr49ZL4ebZVKJYhqECzMid96CtrQ0XXXQRgKx94+PjOSfyAFnFvKqqKrH8Wn4Pr4UR/sDAQM4CACCykVE7r5U2tre3W2TP9jo+Pm737oUXXgCQrdfV1dV5uWClwHtvCgxPlmG/19fXZ+UYqty0m30sVY7p06db+YX5VHyd9ZU2ptPpgudkT7Z9HBM2b94MIKssHjt2zGan2HbS6bT1u7xeKuZVVVWmGjI39dSpUzYDwrw2KqfpdNrafCnb48TEhCmFnL1gLviBAwes72Q5j42NWb1k/8j63dzcbLn6zz77LIBonGR9ji8Sra2tte8uJePj41YvubUNFe1zzjnH7jnvd29vr9nE/pf2NzU1WZ47c4ubm5utHbPPourY3Nycl2c92YyPj9t3sP7Rvvb29pzFi0DU58ZVcVJfX29qN8eUwcFBe479L/NvFyxYYH13qZCyKIQQQgghijLlymK4qg3IjcAZCbW2tmLNmjUAYNvIXHDBBfbICIkee1dXl0WP9LwZMSa1JQmJb5QZfjcjjenTp9uWF9wSgsflnXvuuRZN8LPC86KpcDC/IYmViXHiq8vC/BAqEE1NTRbtclUwtxLo7Ow0O0hfX59FoVTuWKZJ5fOFhMcq8ZF2U4mZPn261c/4EWsdHR1WF6nYDA4OWv4iI2G+v6KiIpFzlOP5bIVWCtKm1tZWLF68GEC2XMPcPdocrmqMK/tU7ZLMsY3nXrKf2LVrl7VB2tjS0mLqKZU4bgS9ePFiW2XKenD69GmbKaDqwf+vrq5OrD2y3KjAsDypogKwzavb2try+iXW4Y6ODlN4QhupgPBzeR/q6uoSORqPbYH1id+ZSqXMZl53c3Oz5eBSmWKZL1myxOonlbkjR46YrbST+Xxhznipz/ymokZ1ivVqbGzM+kfe/6qqKttujdfMNpVOp01tZf3btWuX3R++j+pUe3u79UOl7nPC4wcB5Bxfx3Lhe5xzeWfLhznQLBfOxr388sum/DPHkW143rx5tlNAKWEfwNxFzrqdPHkyL397YmIib5sb9qeDg4NWP1m/d+zYgfe///0Asr4Dx8S5c+eWvE+dcmeRhDeLlYYDZ3t7uxU6ByR24HPnzrUbx4bR3Nxs+zjFK+Arr7xS8ASRUhM6UuyYwn0T6RBxEObpGbNmzco7+L6hocESl2lLeC7vVNgHIGfrBzYa2tXS0mIOETut5cuXA4hSCti4+X+jo6PmmDDNgNMNvb29iUzvFYI2hlNzoaPHMuUjg5pZs2aZQ8/OYmhoyDpsDuSs34cPH05s77PwO8ITaDgw8/6HU5Ts1PhaU1OT2RcuXGJZM6CjvTU1NYmfTUsbw7NkuRCE+6E1NTVZMMNBmGkg1dXVVtbhgp24k8i+qr6+3gbDpGwMFxwBkXPF6Uy2p9OnT1s/Qzu4DVRFRYVN54ZT1fE+mf/f0tJig1op2yQ/M74H5v79++17WU7h9CXHBNbbcNqctoTXy+fonM2bN8/OUi60V+9k2lrMxgMHDpjDQCf91KlT1v+wzNnXjo2NmbPCcurr67NxgfWTgduCBQtsupTlHE65T+Z2OvHPCp1H1js+huNI/P8HBwet3MOFaGxvbIvhnq8cR2ljuDBssrfTiZdlf39/njMXCg4kPNOcv7Pcenp68oJP2tLS0mKfXyr7NA0thBBCCCGKUjbKYgg9Y6ozNTU1RbdPGRoaylMP0+m0KRg33XQTgKzCc8cdd9i5ppS4k9zIGshGD1QpKioqLEqMT6+OjIzkTWHX1dWZUvPxj38cQDaR984778QvfvELAFn5Omn7vPd5EczIyIhNr3B7AzI+Pp6XjlBbW2s2UiWmclVbW2snLDCqTGqz9VAhjisAg4ODplSxbBn9TkxM5CzYAiK7GflS2WEUOTg4aAt8+FwSm5GHETGjWC4SaGxsNAWCSde8tnQ6bYpFePYuP4/KKZXIQ4cO2WKMJO0DctsWFRguThkdHbX0F05FhtOsTBOhreFUEp+jgrd06VKrn6EKlOTZ5sPDw7YA4te//jWASL1mf8EpPCo43d3dNmvDNJG6ujpTbFivqdQtX77cFOhww+xSn+oSKky0j+2roaHB2hjLi/V1eHjYyokzG21tbTmL1MLXVq1aZdu8hApqkqr/0NBQ3sbgFRUVppSFKi//5nMs33PPPdfKjDbShksuucQW2IWKLNt/KcePUGGMb6kG5J49Hz5OmzbN/AP2LatXr7aFr1SIqTCuX7/eFtmxvg4ODhYddyfbvkJjXPh7/LGystLGO6rcF1xwgZVnfHxZsWKF2c5xdnBw0PrWybBPyqIQQgghhChK2SmLExMTOfk2QG40yOiOeSQHDhyw6J0KyDnnnGORM9UpLpBZvnw5brjhBgDAV77yFQDRuYqlTl4mExMTFsUzAhgeHrbIljbztTDxl3Y2NTWZcspokkc4XXDBBXa02je+8Q0AUeJvEoslyMTEhH1faCOjIS42YllWVVVZJMhodmJiIidhHcjm66xfvx6//OUvAQDf+c53AETHnMXzW0rJxMSE1ZnwGKn4meA8ZiydTttrjO4GBgbMRpb/Jz/5SQCR0viTn/wEAPDAAw/Y9ySlaIRlyHZVWVlpqiEjVqoU5513ntVJvmdsbMxeZ9RLJXz58uV2pNrGjRsBREnhLMNSqm9htE8buRWL997UjHhbXLZsmSlW4YIyll1cCW9pabF+66mnngIQteEkbAxnI2gjF0SMjIxYWwoXigCRSkP1gvmzY2Nj9nmswzxOra6uzu4Ft/M6ceKEqe2lymMM7YtvjZRKpWxbFS54YI53fX29qSxUgBsaGqyP5fVSrbryyiutzVHpP3jwoH0X7SxFWYa5vywfPldTU2PXyFkz5tq2trba+8PFWVTiaD9VtzVr1ljOOw9Y2LNnj9UXKsalGCNDtS2e01dVVWXth4sDWScOtqx9AAASbUlEQVRnzZplOZe08fLLL887vpM2r1y5Eh/96EcBZPvkV1991Ra9cJZxsssxrPe0L1QR2Veyn2RbmjlzpinBXHz3kY98JGeLLyA7C7tw4ULceOONALJbKe3cudP6tXAG7p1Sds4ikJsUCkTTduH+b0C28x0YGMhxrIDoBrICce83OlOdnZ3mTHFw+/SnP203OIlphUL2MQmdU8dsqOl02gqaHVNlZaXZx8R8LoiZOXMmbr75ZgDZabEvfOELidoHZG3k9FV1dbVNdYQn7fCa2bhpI5DtBDgdSIdj6dKl1jGy8Xz5y1+2TiCpab54gnU6nbYzljm9SXsOHTpkZRSeUBB3FjlQr1u3zgYzdiD33HOPlWOpgxvvvX0Hy6mrqwtbt24FkC2TcBqagQs76K6uLrsPDBQ4wC1dutSm+tjxPfHEE+Z4J7XHJB238MSPbdu2AcgGKbzm+fPn5yWMhwudWE4c2GbPnm0OJB225557zu5JEo5/aGO4ypRtkFOsdK7a2tqsX6RjHP5vfAFIuHqc9WXLli05K6lLTTwQnj9/ft7Z9JyGnjZtmrU5XncqlbJ2ysE7FBloC22fNm2ajUdJrXaPp2GtX78el156KYBsEE3H2DlnNtLudDpt9YwORpg2wXGSKULhAjTWlVISno3NenfhhReak0/HiW3Re292s89samrKm+rlZ82cOdP6GzqUY2NjVu6l3mcy3P+Y1zR//nxLy2F/ynFgYmLC+n+W8/Tp0/NS0th3NjU1WdoIbe/t7c1blf1u0DS0EEIIIYQoSlkqi/Fl5ydOnDAFgx4ylbjBwUGLgMIInfLy/fffDyCrvH3ta1+zLRa4t+FHPvIRfPOb38z7jFIR36bkxIkTeWc9czogTMIPp3Q4Nclo97LLLgMAfPGLX7QI6uqrrwYAXH/99fjWt74FIPltSnjN3d3dplDFFZXp06fnnRE+NDRkERijLp7letttt5l6w2nNrVu34vbbbweQnLLI62fUH55/zYiP0e+CBQtMDed0VrjtB6Pj66+/HgBw1VVXmcJz2223AYjUybvvvru0RgWE2wQB0fYWrKesd4xiZ8yYYfeBi2A2b95sC34Y9bIMFy9ebKkin//85wFE94/TYUkR38LjxIkTViac8mL9C6ehw/N4eYZvfA/K1tZW62s4zXX8+HH7PemTlliOp06dsn6A5UKlvqWlxdQrlufIyIgpMFSjOBPQ1tZm06C0dceOHSU/LYN4762eskxOnjxp5UkFlLZXVFSYohjumcoy53RgWK85drAu9/b25p2NXkrCxXG08ciRI1aPqAbS5urq6rw9FcMFgPHp0Pr6elMg2Q8fOHDAptqTGDNCG1nvwpQN1jf+PW3aNGuX4Xnz8TYVblPGz2Afs3///pJNP8cJ01vCcYP3ltcWLuLkvsScsQlPXuL1sh4eOnTIZl3Z/+7Zs2dSlX0pi0IIIYQQoihlqSySMEqgBx7mhwFRNFXodJRwg2gg623fddddFgkz+vrQhz5kqhQ99SQINyjldTLSYfR78uTJglsYMIpkxP/YY48BAM4//3xTbBglX3fddbjzzjsBZPPPkia0kfkhVM4GBgYsF4/2h0n18dMYli1blpeXefHFF5vqlkSOTQivc2xszCI/KitULHp7ey0fj1s4HDt2zOpbPJ9zyZIlFlmGic7xjb2TIFQYGR1zgdkll1xi72M5cfHRCy+8YLld8bOyP/OZz1juEJXwRYsWmfqa1GKluDp8+vRpU9bY14QLd9h+WBdfeuklO+c2flb4okWLTGVk3tHDDz9sSmRSpxDFbezp6bG6SGWR9XRoaMhsC1VU5lCzT2H/W11dnbeFSTqdTnR7oLg6vHfvXlMUQ2UJiPJI+X6q/rW1tdaPsuzCrVrii0vCBTxJEd9sfceOHVYGnHniNkFz5syxfoXl29bWZjbFT+8ZHR21RWxUFvft22f9dNIKOK/v4MGDdgIRxwWObbNnz7YyoN2LFi2ysmJdCGcAeD44FeIDBw7YSTJJ1tewHnGGlP0KZ5ja29vx4osvAsj6KeHG4qzXHC+2b99u72dbPXXqlL0+GWUoZVEIIYQQQhSlrJXFQsSjI+DsvGZGDnv37jXVglHIjBkzEo0s4oTXH88XOltC+xhNMeKfM2dO4sfikUKbWMfzGSsrK/OOgSp0vSy3HTt2WFRJBfacc84peBxXEoQRcfwcYqo0p0+ftnLhtYcbrvPeMGdz27ZttrqR5bh27VpTE5JUiEPlhvWSj9zMesWKFdaeqFLs27fPcmbi21vt2bPHlFPmP65Zs8Y2zE9aAaeNQ0NDpgqHK72BqJ9g5E9l9ZlnnrFInkopVfLwGE+qk8uXL8evfvUrAMnbyLrW19dnig3LgwrHhg0bbIcFtq2jR4/aTgPM4+Q9Cdsp1ePw+LgkVgvHFane3l67x1S2N2/eDCBSn7iNGu1sa2uz66SKEx4/G98Oq7a2Ni//rNSEsxdAZOOmTZsAZJWkZ555BkC08perwdevXw8g2joofl5ymDPPus6+6e2Or5NB3Ma+vj7bmYCKZ7gbA/tHvj/crSCs6wDw9NNP23GxVNUHBgZyxqdSE/+OgYEBa1fsH7nWorW11eon1dTzzz/fyoXKKRXXJ5980vricH1HmJf7bnnPOIusBEz2DA+2jzsJ4ZmIbNRM4P7whz9snXq4x1pS+ywWIrx+TluxUhTafwrI2kXnknsxXX/99XmdwZtvvjmlzjAJT6ABshW+r6/Pri881Yb3hVOvXJC0YcMG67hp48DAwJQ5iyRMtmfHHDp/cRtra2vtXsTPy+7s7LT3sS5UV1fbNGCSFEoHIdx65cEHH7SpPw681dXVthCJjgedpsbGRrtHLMPW1ta8BQZJT4GFQQ3rJ7dDuvfeey2FJRy0aVP8s6qqqvJsnDFjhpX5VNk4Pj5u18N+hFPjIyMjVmfDhRMsWw60vPampiYLZliH29vbzUYO1kkOxiMjI1Z2tIXjRVdXl/X7vAdLliyxxRK0LwwQOF3Nsmxpaclb6JT0lmRhO6TDwbZz8OBBcxhYN2fOnGm/xxeLDgwM2LjDae6qqqq8U0WSPD0qfASyZcWx4OjRoxaIcuwbGBiw8ZBT82y73d3dJjbwtfBzkyDumIb7vDKFhfWqr6/P2hCv23tv5cN6+sQTTwCIpqNZrmxzY2Nj9vmahhZCCCGEECXlPaMs0sumosRor6+vz6b6wk1nqa5x2uQTn/gEAODmm2/OiU4A4O677078/OSQiYkJ2yiVcAPqurq6nIRVIFIDGOlzu45rr70WQLQ1Ce1jBPXggw/avUmaMJpihMponKrTypUrLbLilkGhKsUy5GKKNWvW5E3Hbtq0KbENcuOEU+e0kVEeo9/Vq1fnqYgVFRVWn6mYn3feeQAiVYfTX2FS+2Rsrvp2KZQaQKWG5ZZKpUw9ZNm0t7dbFE1Vg9uQ1NTU2L1idN/T05PIJs6FOJONTILv6+vLUdSAqLzYd3BajNuQpFKpvIi+rq7O7J0qZTH8vvBcbiAqJypU3Jh62rRpVo6sw+xfKyoq8rb/6OjosD4oSbW/kH2sT1RYQnWe5bVgwYK8tB+20crKyrwNmzs6OmxBGvufpLckC2E9pQ0NDQ12/6m6zZw5M+dcaSC7JdTJkydtO6/wdBeOj1NVT0PYB9KGdDpt/cyqVasAZH0DIDvjRtUbyNZ1flZIkjYW+o5CCmD8IIOKigqbCeBrbHO9vb05W10BuYtEJwMpi0IIIYQQoihlqSwWikbpLTMqoAKzdOlSU5SobLS1tZk3zvdR2aisrLQI45FHHgEQHcE1FQtAwu+kfVzqzuvfsGGDJSlTaVu0aJHZyq0RGEGlUim7R0xiZ5LwVBJuncP7z+TchQsX2rFOzC1dvHixKQBUagodP8aE4Geffbas8jJZnrSxoqLCovybbroJQLQggO9nedLGVCplkSLzUzZv3jzleZmEZRkeT8m6yI3FZ82aZe8Lj1YDonYY5v0BUfI6I+ZygGXD/mXbtm2mXnz2s58FENVX2kS1n9F+VVVV3ua5W7ZsyTvftRwW17HP2Lt3ry0iWLt2LYBIDeb7qICznk5MTFhbpI379u2zmR8u9pmqmZv4tjpdXV2Wx8bZmLq6OlOi4puOj46O2pZQVCmPHz9u9lFZn8qZqfjWSKdOnbJ+kdfnvTe1kTaG268w95g2dnd3W/87VTM2hQgVOCr+nFkMZ+j4SNX1yJEjOfcCiOyKnwk+1YTHiPLaC+X9cnzhTNyRI0fyZg8nu06WpbMYd9zChOzw/Gcg2iORSedsBIWmf9gZ9vf340c/+hEA4Ktf/SqAKCF4qlYLA4VPIeB0Y2dnp53OQmeRHVkI7RsaGrLTXXgqzfbt26e0M4vDa2FjSKfTuPzyywHAyrKmpiZvaj608dFHHwUA21vxqaeeSnTvwbci7jQODg7a1BadxpaWFnOO4ic0DA8P2+pGBjWPPfbYlO2TWQyW5fHjx82ppS11dXV5DhQ7tPHxcdsXjFN627ZtS/x0k7OB19LX12era7lXW2Njo+3zFl+4NTY2ZikkXISwfft2u0/l1CbJ8PAwdu3aBSAKwICoz+XZwWyTtPH06dP2fi6SeeWVV8xZKTcbx8bGzPnbsmULgMiGDRs25LwvXB3MKVo6vvv3759yJ/itYN/KVe6pVMrKMJ6m9Pzzz9s94dTz0NBQWTmJhMFyZWWl9SlsT6+//rqJQgxA6QSHziLLNhQwygXaV1dXlyeS9Pf32xjH8uIK776+vpx+pxRoGloIIYQQQhSlLJXFOOGSccKIfePGjTZ1yamEmpqaPA/8hz/8IYBovyVGzHytHKYvQ/kZyO7jdt9995miGG5RwfczEvzJT34CIIqWeaIEo99yUdziWwdQJb7vvvssSqT6xml4ILvAgCeDbNmyxfZNo8LT399flmoUo71HH33Uon2qM9dcc41NSdJGnu6ybds2q6dU3o4dO1Z2kTCvZ9++fRaxM7K94oorbCqTZc12u3v3blOiqELt3LmzLNUMluXAwIApFT/4wQ8AROobFZv4/qH9/f3WPrmFy86dO6dkkdJbESrhvNZ7770XQLQ4gqks4d60QNSWWba09eDBg2ZjubTJcFsWTls+9NBDAIAXX3zRpvNYdpyl6u3tNWUnnJ2izeViH5Dbv/L+P/744wAiBYqzElTv2TcdOnTIts7hWHro0KGcLVvKEZYB9xccHh62vQl5EhT7m/7+flsoSYXx2LFjZdffhFv+sS6yvlZWVlqZ3X///QCy9gG5284BUV2eTPukLAohhBBCiKK4JKMG59ykfRkj3JqaGku6poJWX19vOQuMBsN5fP7+dhVF7/0ZVxdMpn1hbgaj3DDJnFEV7QsTfxkRvl0V6q3sy1zXpFeYyspKS6amwtje3p6Towjk5rvx97ermk6VjRUVFXmRX1tbW95GtOEJCnG7z7atJllPSSqVsrJj22xsbLT8KL7GSHd0dNTsitfht2KqytA5Z2UX5mWyXOPndjvnrFxpY19f31m1y6m0kbaFfSxnNTh7w/6poqIiLz/32LFjZ1WWU1FPQ/toS3Nzsy1YCReJAJF97JtYX998882zygubqjJMpVJWT5lH29HRYdtWcdaK+W4TExNWvmyfR48ePavxMWkbw3rH9kaV+4orrrDtkKiEU2EMF3+wjM92NirJehr2K6yTzOdfsWKFlSs34964cSOAqH9hnYzPcLwVZ1OGgJRFIYQQQghxBt6zymLscwEkchxR4pFw5nP5/aX4eGOqIuHM5/IaSvHxhmwsH/ve6f0o9zIMtzeKv3+y1OHMZyeeTFboaFUy2TYmaV/8aLsQqj3xs+3finKop+Hf8WNjQ+WQr73dlbRTqYDHyyzccD3cVSJOOc8okoqKClO+qSbW1tbaLCNz3MOV3e90XDlbZfG3wllMinLq3EpBuQ5Qk4ls/O23D5CN7wVUT2XjZFOKgLxc6mno8NPhnQw7NQ0thBBCCCHeNYkqi0IIIYQQ4r2FlEUhhBBCCFEUOYtCCCGEEKIochaFEEIIIURR5CwKIYQQQoiiyFkUQgghhBBFkbMohBBCCCGKImdRCCGEEEIURc6iEEIIIYQoipxFIYQQQghRFDmLQgghhBCiKHIWhRBCCCFEUeQsCiGEEEKIoshZFEIIIYQQRZGzKIQQQgghiiJnUQghhBBCFEXOohBCCCGEKIqcRSGEEEIIURQ5i0IIIYQQoihyFoUQQgghRFHkLAohhBBCiKLIWRRCCCGEEEWRsyiEEEIIIYoiZ1EIIYQQQhTl/wMHJMTXwpktnwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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AVBbW2tja3feD7e0DXXsutYqKirs+I899lgAxo0bx8svvwxkxw6124gRI3jxxReB7D2jubm5R4SFrtqoe3z6HnjQQQcBSV/885//DMB7770HYAJCv379WLNmjY6hze/uZkv6aW4blpWV2T1kzz33BBKb//KXvwDwz3/+E8g6/CGEXhOCOluU28PQjuM4juM4TkGKrixqxqRZ4X/+53+yyy67AFnVArKzBnneCn81NTWZOiB1srGxkQsuuADA1KnukOi7oiweffTRAHzlK19h3333BWijJmomopm71LSWlhZT7PRZTU1NXHLJJQDMnj0byM4gu0JXVbf99tsPgFNOOYVPf/rTQDYMXVZWZjauX78eyNoI2XORVlGvuOIKAG644YY278sca+cNS9FVxWbixIlAYut5550HJLP89GsAC+VJ2UgrIGrj5uZms/Gmm24CsjZ2ZWbZFcVm/PjxAEyaNInvfOc7QDb1Q+0MmNLU1NQEJO2XGxqsq6vjyiuvBOCOO+4AsupbT9qX+fyCNkrNmDZtGt/+9rcB2HXXXe241LdyVamampo2EQ2AV155hV/96lcAzJkzB8jamFaTN5eu2rjtttsCcNhhh/GNb3wDgI9+9KP2Oo0XSh2QUldVVWXPqR3/93//l+uvvx7IKqpq966oH1vST9UHt99+eyAZV7/85S8DMGHCBL2PDz/8EMheT1JOy8vL7THZee+995raKCVLr+nKfaOrkZqPfexjAJx66qmcdtppQDZ1qby83NpAx6jxpbKy0sYfKfq/+c1vTG184IEHgKyNXVGLt9RG3cv22GMPAM4880xmzpwJJMooJDbq+IX6W3V1NQsXLgQwhfFnP/sZ77//PpD0Wcja1pM2duTXTJs2DYDTTjvNVGGlaFVUVFhkUP1afs2oUaPMd9G5+uUvf2njj1Tk3IWUW4Iri47jOI7jOE6XKfoCFylP8rZXrFjBu+++C8Bbb70FJDN25ZdoJqyZ4tZbb82BBx4IYLOvmpoajjvuOACbMUoJ6W2U46YZYXo2odnA22+/bflRWvyg/7fZZht23nlnIKvwDBkyxGYpynnTjKoYibKyUQuSdt1113b5W+vWrbPZvhaz/PWvfwUSRUCLX6QODB06lBkzZgAwd+5cAJYsWQIUx0bN2qdOnQokuadScdIqhmb7r7/+OpC1ccyYMey4444A9nvIkCEccMABANx///0A1vd720bNhNXXDj74YLNLKsX69estZ0/9dNGiRQBstdVWTJo0CciqrzvssAOHHnooAI899hiQta8YC7Ok2Eh1O+aYY6wNZdfq1astfyhXuaiqqrKoh1Sf3Xff3aIiys/UrL8YCw7UjlJPTzrpJMtD1TW5atUqGw+V76Zra+PGjbbITmPW1KlTLSogdUpjc2+3o65D3S+OP/54s09K2bp16+zcy2b1Zcieo3Suo/KP9RmPPvqofVZvk1ayIVkAmTvWpMcHPZeObCgaJRvPOeccU+nOOeccIKsSNzQ0FG280TFPnjzZ7odquxij+Qfqf1LgQgg23uj1v/3tb629v/71rwNYTuCKFSt6texVbqRs4sSJ9v3p9ho5cmSbx/Q/wLnnntvmM84++2wbpxQteOKJJ4C2iwl76posurMo4+UQzJ071xJcFRJYvnx5uxMgB2X58uV2A1dYc/z48XZT6o7wbFdQ533mmWfs92GHHQbA4sWLgWT1qOzT8SopfZtttrFOoMUTe+yxR5sQfZp0GK23kI26gVx++eUcfvjhQOIkQTIwaSCW3RoAhg8fbhf+9OnTAZgxY4aFRDUxSC/+yV1Z1tM269jlxN92223Wd+UcPfjgg+ZgKJygm/KgQYMsXK2JzCGHHML+++8PZJ20dPpBro09eWOWfTreJ5980vqgBuyHH37YJm0K0crOqqqqNmEzSBLVP/GJTwDw/PPPA3DjjTcCyU0vHZKGnnc8dG3J+XvyySct/KrB+vbbb7dkejkKWgHd3NxsodwzzjgDSMKgmrhpzLnwwgvt9bmTpt7qp3IMnn76absG9dzVV19tkxo5H2rXhoYGczS/9KUvAcmiCo2x3/rWtwAsRaGxsbHNzb2n0fnU8c+fP9+cWzm+11xzjd101bfUhq2trXY+JC5MnjzZHOPzzz8fyJ6Purq6Hln80hGyTWPNvHnzbNL15ptvAkk/lYMrp1LHuf3229tjGkMHDx5s4+gPf/hDINtHHnrooV6vyqBrS2326KOPWiqIxp3HH3/cxhI5X3KCa2pqbLzQ+FReXm7v/clPfgJkUy9+/etf29janQvRCqHzWVtbCyROq64rLaBbvny5iQVygtNOtOzTc5WVleYDKL3n2WefBeCiiy6yPt6diwnTeBjacRzHcRzHKUjRlUXNbBUGKSsr4/bbbweyM+H0Tgu5Ow+MHDnSlDo9V19fz29/+1ugd2YRHaHZnsKSZWVlpj6ld79QiEy/pRyOGDHCwux6rqGhwWovFiu8niadCA/Jsb/00ktAdta3bNkyK+ehEJJCzv369bPZltqwsbGRRx55xN6bfq6jnV96Cs3yFFYeNGiQhWAnT54MJLNHJd6rZIKStevq6kztkD1r1qyx2a5UBLV7WlnsDfRdUodXrlxp4VgpbXPmzDF1VG2pUhZ1dXVm85NPPgkkdSfTSkD6dzq811t26nukAL744ot23lUf89FHHzXbhNpo9erVNl5pMcuMGTNsti81/Ze//CWQVRV6E9ko9f6OO+6w61IK+J/+9CeLzAj1yebmZjsnSrDfb7/9LHR/8sknA4lSA8k57M1wu65DqSjXXXcdDz30EJBVpB577DGzT9eTUn8+/PBDWwgpVeu73/2upfiorInU4tmzZ/d6dCq3n95www0WeUur3X/605+ArOqWriWptJ5PfvKTQLLQSTZut912QLLYEhJ1NnchSU+Tu1Bj1qxZ1mZ67r333uO6664Dsm2r+355ebm11fHHHw8k6U9K8dFY9NWvfhVIxiSNY72BbFB62LXXXtumljQk0Rmp4ronauwZOXIke+21F4AtiN1mm23MLkVEjjzySCBRnFXirKdwZdFxHMdxHMcpSNGVRdFR8ml5ebkpEiqToxnupEmTLFdKzJkzp1uLHHcHykNJk95RQTOKXJVi5MiRNlvSzOvll1+2hT65eV7FtFcqE7RPSB4wYIDNipSbIhVu3bp17L333kCy6AOSXNZCO0kUc9cazU7ff/99s1Gq8dixY232rlxEqeMLFy7kqKOOArJ9uKqqyj5DilW+Ug+92aaaCdfX15sC/uqrrwJJe8kulYSQejZ//nxTWJUbVVNTY+0vdSZdkqRYfVVK4cqVK802FTiurq623U2kiuraffvtt61/plUctaFsTO+zXCwbFXFYs2aNKeBSGJubm9ss+IC2x6w2knq3YsUKU6NyF9BooVNvo3zhxYsXW1H0tGqdO3akdznROKUowbPPPmsqlVQfKc233npruxI1vYX62JIlS6x4uqJL69evb1NKLE1ra6sVxtd4tWjRIq6++mog24a6XocPH273y962UddMWvWTetjS0mLnQMeXji6pXysCNXXqVNvNTfcaqchjxoyx+2dvKsUax9Ob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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_linear_interpolations(selected[3], selected[7])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other implementations\n", "\n", "The original paper[1] uses a different DFC VAE architecture and a training dataset with 202,599 face images ([CelebA](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)). Their perceptual model is a 19-layer VGGNet[4] trained on ImageNet. A [Torch](http://torch.ch/) implementation together with a pre-trained model is available [here](https://github.com/houxianxu/DFC-VAE). A corresponding Tensorflow implementation is available at [davidsandberg/facenet](https://github.com/davidsandberg/facenet/wiki/Variational-autoencoder). In contrast to the original paper, the latter implementation uses a pre-trained FaceNet[5] model as perceptual model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "- \\[1\\] Xianxu Hou, Linlin Shen, Ke Sun, Guoping Qiu [Deep Feature Consistent Variational Autoencoder](https://arxiv.org/abs/1610.00291).\n", "- \\[2\\] Diederik P Kingma, Max Welling [Auto-Encoding Variational Bayes](https://arxiv.org/abs/1312.6114). \n", "- \\[3\\] Said Pertuz, Domenec Puig, Miguel Angel Garcia [Analysis of focus measure operators for shape-from-focus](https://dl.acm.org/citation.cfm?id=2431007).\n", "- \\[4\\] Karen Simonyan, Andrew Zisserman [Very Deep Convolutional Networks for Large-Scale Image Recognition](https://arxiv.org/abs/1409.1556).\n", "- \\[5\\] Florian Schroff, Dmitry Kalenichenko, James Philbin [FaceNet: A Unified Embedding for Face Recognition and Clustering](https://arxiv.org/abs/1503.03832).\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }