From e19e808ecf8a65a90bb0f5543eb434b7e54c78c2 Mon Sep 17 00:00:00 2001 From: Kyle Steckler Date: Wed, 7 Jun 2023 14:57:26 +0000 Subject: [PATCH 1/2] add diffusion model solution nb --- .../solutions/diffusion_model.ipynb | 723 ++++++++++++++++++ 1 file changed, 723 insertions(+) create mode 100644 notebooks/image_models/solutions/diffusion_model.ipynb diff --git a/notebooks/image_models/solutions/diffusion_model.ipynb b/notebooks/image_models/solutions/diffusion_model.ipynb new file mode 100644 index 00000000..9e9fa6d8 --- /dev/null +++ b/notebooks/image_models/solutions/diffusion_model.ipynb @@ -0,0 +1,723 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0edea9eb-383b-49db-8623-c8b08c6ca501", + "metadata": {}, + "source": [ + "# Diffusion Models for Image Generation \n", + "\n", + "Generative image models (and generative AI as a whole) have gained significant attention over the last few years. Model types you may have heard of like GANs, have shown success in creating realistic looking images. Diffusion models are a relatively new class of models and have recently demonstrated state-of-the-art performance with image generation. Diffusion models were [first conceptualized for image generation in 2015](https://arxiv.org/pdf/1503.03585.pdf) and now underpin many of the leading image generation systems. Diffusion models consist of two processes:\n", + "\n", + "* The forward (noising) process: Slowly add noise to an image, destroying structure in the data distribution \n", + "* The reverse (de-noising) process: Learn the reverse diffusion process, yielding a generative model of the data\n", + "\n", + "In other words, the forward process adds random noise to an image and the reverse process learns to remove noise from an image. After training, we can use the model from the reverse process to iteratively remove noise from a random-noise starting point and generate images.\n", + "\n", + "In this lab, you will:\n", + "* Load the dataset \n", + "* Define the de-noinsing model (U-net with residual connections) \n", + "* Define the diffusion model (forward and reverse processes) \n", + "* Train the diffusion model and visualize results " + ] + }, + { + "cell_type": "markdown", + "id": "0c765cd6-ee12-4acc-9b6b-8402f30f3637", + "metadata": {}, + "source": [ + "### Setup " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b48cd06-8e9f-47e0-915f-30f65f904835", + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "import tensorflow_datasets as tfds\n", + "\n", + "print(tf.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "9d79e03c-6d8a-4407-8b82-5a9ae8bf350c", + "metadata": {}, + "source": [ + "### Choose dataset\n", + "This lab can be ran with either the flowers dataset or mnist dataset. **NOTE**: To train the model on the flowers dataset, it requires a GPU. To train a model faster, or without a GPU, choose the mnist dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f552b91-5e09-4131-bdad-6d6bb4af0ba2", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_choice = \"flowers\"\n", + "# dataset_choice = 'mnist'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffba120d-26b6-4bf5-a6b9-038e17af5f9e", + "metadata": {}, + "outputs": [], + "source": [ + "if dataset_choice == \"flowers\":\n", + " IMAGE_SIZE = 64\n", + " IMAGE_CHANNELS = 3\n", + " WIDTHS = [64, 128, 128, 256]\n", + " DATASET_NAME = \"oxford_flowers102\"\n", + " DATASET_SPLIT = \"test\"\n", + " CENTRAL_CROP = 0.8\n", + "\n", + "elif dataset_choice == \"mnist\":\n", + " IMAGE_SIZE = 28\n", + " IMAGE_CHANNELS = 1\n", + " WIDTHS = [8, 16, 32]\n", + " NUM_EXAMPLES = 10000\n", + "\n", + "else:\n", + " raise ValueError(\"Please specify dataset_choice in the cell above.\")\n", + "\n", + "BLOCK_DEPTH = 2\n", + "EPOCHS = 50\n", + "BATCH_SIZE = 32\n", + "MIN_SIGNAL_RATE = 0.02\n", + "MAX_SIGNAL_RATE = 0.95\n", + "PLOT_DIFFUSION_STEPS = 25\n", + "EMA = 0.999\n", + "OUTPUT_DIR = \"diffusion_model\"\n", + "CHECKPOINT_DIR = os.path.join(OUTPUT_DIR, \"checkpoints\")\n", + "\n", + "print(f\"Using dataset: {dataset_choice}\")" + ] + }, + { + "cell_type": "markdown", + "id": "f21834ae-5f34-4e28-be06-f32bfadb6642", + "metadata": {}, + "source": [ + "### Load dataset \n", + "\n", + "Define a function to load the dataset. This lab uses either the [Oxford Flower Dataset](https://www.tensorflow.org/datasets/catalog/oxford_flowers102) or the MNIST dataset. The flowers dataset contains images of flowers commonly found in the UK, and the MNIST dataset contains grayscale images of handwritten digits. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fe069e4-e8c5-4577-acf2-e496d8adf689", + "metadata": {}, + "outputs": [], + "source": [ + "# tf data ingest for flowers dataset\n", + "def _preprocess_flowers(data):\n", + " image = data[\"image\"]\n", + " image = tf.image.central_crop(image, CENTRAL_CROP)\n", + " image = tf.cast(image, tf.float32) / 255.0\n", + " image = tf.image.resize(\n", + " image, size=[IMAGE_SIZE, IMAGE_SIZE], antialias=True\n", + " )\n", + " return tf.clip_by_value(image, 0.0, 1.0)\n", + "\n", + "\n", + "def create_dataset_flowers(batch_size):\n", + " ds = tfds.load(DATASET_NAME, split=DATASET_SPLIT)\n", + " ds = ds.map(\n", + " _preprocess_flowers, num_parallel_calls=tf.data.AUTOTUNE\n", + " ).cache()\n", + " return ds.batch(batch_size, drop_remainder=True).prefetch(tf.data.AUTOTUNE)\n", + "\n", + "\n", + "# tf data ingest for mnist dataset\n", + "def _preprocess_mnist(image):\n", + " image = tf.cast(image, tf.float32) / 255.0\n", + " image = tf.expand_dims(image, -1)\n", + " return tf.clip_by_value(image, 0.0, 1.0)\n", + "\n", + "\n", + "def create_dataset_mnist(batch_size):\n", + " (X_train, _), (_, _) = tf.keras.datasets.mnist.load_data()\n", + " ds = tf.data.Dataset.from_tensor_slices(X_train[:NUM_EXAMPLES])\n", + " ds = ds.map(_preprocess_mnist, num_parallel_calls=tf.data.AUTOTUNE).cache()\n", + " return ds.batch(batch_size, drop_remainder=True)" + ] + }, + { + "cell_type": "markdown", + "id": "c6368afc-cdca-4aa7-8438-eef7980bac1b", + "metadata": {}, + "source": [ + "### Forward Diffusion Process\n", + "We will have a diffusion process starting at time = 0, and ending at time = 1. At each diffusion time, we will have a noise level `noise_rate` and a signal level `signal_rate`. How do we know the noise and signal level for a given diffusion time? For this, we will use a simple cosine schedule as defined in `diffusion_schedule()`. We generate the noisy image (for the forward diffusion processes) by weighting random noise by the noise rate, and the training image by the signal rate, then adding them together.\n", + "\n", + "**Note**: This code needs to be implemented in a training step of a subclasses model eventually. We are only running it here locally first to visualize the forward diffusion process. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fac64b9a-2582-462e-bf09-81b62f01d4bf", + "metadata": {}, + "outputs": [], + "source": [ + "def diffusion_schedule(\n", + " diffusion_times, max_signal_rate=0.98, min_signal_rate=0.02\n", + "):\n", + " # diffusion times -> angles\n", + " start_angle = tf.acos(max_signal_rate)\n", + " end_angle = tf.acos(min_signal_rate)\n", + "\n", + " diffusion_angles = start_angle + diffusion_times * (end_angle - start_angle)\n", + "\n", + " # angles -> signal and noise rates\n", + " signal_rates = tf.cos(diffusion_angles)\n", + " noise_rates = tf.sin(diffusion_angles)\n", + "\n", + " return noise_rates, signal_rates" + ] + }, + { + "cell_type": "markdown", + "id": "ac87f587-95b1-409f-8818-01f5a08f35a6", + "metadata": {}, + "source": [ + "### Visualize forward diffusion process\n", + "Apply this forward diffusion to a single image and visualize this forward diffusion of adding guassian noise at randomly sampled diffusion times between 0 and 1. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26ef7a5a-3696-41d5-a2f3-f11dde03ed46", + "metadata": {}, + "outputs": [], + "source": [ + "# Batch of data\n", + "if dataset_choice == \"mnist\":\n", + " train_ds = create_dataset_mnist(BATCH_SIZE)\n", + "elif dataset_choice == \"flowers\":\n", + " train_ds = create_dataset_flowers(BATCH_SIZE)\n", + "\n", + "ds_iter = train_ds.as_numpy_iterator()\n", + "data_batch = ds_iter.__next__()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "edb950ac-0250-4c22-bb17-b14a9dbab4b8", + "metadata": {}, + "outputs": [], + "source": [ + "# random noise the same size as input batch of images\n", + "noises = tf.random.normal(shape=data_batch.shape)\n", + "\n", + "# random sample of diffusion times between 0 and 1\n", + "diffusion_times = tf.random.uniform(\n", + " shape=(data_batch.shape[0], 1, 1, 1), minval=0.0, maxval=1.0\n", + ")\n", + "\n", + "# compute noise and signal rates for each respective diffusion time\n", + "noise_rates, signal_rates = diffusion_schedule(diffusion_times)\n", + "\n", + "# create noisy images\n", + "noisy_images = signal_rates * data_batch + noise_rates * noises" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4b3ae14-8b19-4377-8cb7-54e0e9ef0139", + "metadata": {}, + "outputs": [], + "source": [ + "# Visualize original images and noisy images\n", + "num_rows = 32\n", + "num_cols = 2\n", + "plt.figure(figsize=(8, 64))\n", + "index = 0\n", + "for row in range(num_rows - 1):\n", + " plt.subplot(num_rows, num_cols, index + 1)\n", + " plt.imshow(data_batch[row], cmap=\"gray\")\n", + " plt.title(\"Original Image\")\n", + " plt.axis(\"off\")\n", + "\n", + " plt.subplot(num_rows, num_cols, index + 2)\n", + " plt.imshow(noisy_images[row], cmap=\"gray\")\n", + " plt.title(\n", + " f\"t={tf.squeeze(diffusion_times[row]):.2f} | signal={tf.squeeze(signal_rates[row]):.2f} | noise={tf.squeeze(noise_rates[row]):.2f}\"\n", + " )\n", + " plt.axis(\"off\")\n", + " index += 2\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ea957ec7-25f2-4fc9-aa19-5778ab0032dc", + "metadata": {}, + "source": [ + "As you can see visually, a small diffusion time (high signal rate, low noise rate) only adds a little noise and we can still (even visually) see what the original image is. Larger diffusion times (low signal rate, high noise rate) diffuse more \"aggresively\" and we can visually see the structure of the initial image is essentially, completely gone. \n", + "\n", + "**NOTE** You can run the previous two cells again to visualize another forward diffusion process, since diffusion times are randomly sampled. " + ] + }, + { + "cell_type": "markdown", + "id": "4cfe9716-3832-46f6-ad04-ebdbfe0c20fe", + "metadata": {}, + "source": [ + "### De-noinsing Model Architecture\n", + "\n", + "Now we need to specify the neural network that will be used for denoising (predicting the noise added to a given image). U-Net is a popular semantic segmentation architecture, whose main idea is that it progressively downsamples and then upsamples its input image, and adds skip connections between layers having the same resolution.\n", + "\n", + "Our U-Net takes two inputs: the noisy images and the variances of their noise components. The variances are required since denoising a signal requires different operations at different levels of noise. In other words, the model needs to learn how to denoise at different noise rates so we will embed noise variance in such a way that different noise variances are represented differently. We will transform the noise variances using sinusoidal embeddings. This is quite similar to positional encodings used in transformers. The output of the model is the predicted noise. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e6320d8f-73a7-4979-9c74-4053dfa5a0ba", + "metadata": {}, + "outputs": [], + "source": [ + "class SinEmbedding(tf.keras.layers.Layer):\n", + " \"\"\"\n", + " Custom layer for embedding noise rate variance.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self, embedding_dim=32, min_freq=1.0, max_freq=1000.0, **kwargs\n", + " ):\n", + " super().__init__(**kwargs)\n", + " self.frequencies = tf.exp(\n", + " tf.linspace(\n", + " tf.math.log(min_freq), tf.math.log(max_freq), embedding_dim // 2\n", + " )\n", + " )\n", + "\n", + " self.angular_speeds = 2.0 * math.pi * self.frequencies\n", + "\n", + " def get_config(self):\n", + " config = super().get_config()\n", + " return config\n", + "\n", + " def call(self, inputs):\n", + " inputs = tf.cast(inputs, dtype=tf.float32)\n", + " emb = tf.concat(\n", + " [\n", + " tf.sin(self.angular_speeds * inputs),\n", + " tf.cos(self.angular_speeds * inputs),\n", + " ],\n", + " axis=3,\n", + " )\n", + " return emb\n", + "\n", + "\n", + "def ResidualBlock(width):\n", + " \"\"\"\n", + " Batch norm followed by two conv layers to specified width.\n", + " Input also skips these layers and is added to output.\n", + " \"\"\"\n", + "\n", + " def apply(x):\n", + " input_width = x.shape[3]\n", + " if input_width == width:\n", + " residual = x\n", + " else:\n", + " residual = tf.keras.layers.Conv2D(width, kernel_size=1)(x)\n", + " x = tf.keras.layers.BatchNormalization(center=False, scale=False)(x)\n", + " x = tf.keras.layers.Conv2D(\n", + " width,\n", + " kernel_size=3,\n", + " padding=\"same\",\n", + " activation=tf.keras.activations.swish,\n", + " )(x)\n", + " x = tf.keras.layers.Conv2D(width, kernel_size=3, padding=\"same\")(x)\n", + " x = tf.keras.layers.Add()([x, residual])\n", + " return x\n", + "\n", + " return apply\n", + "\n", + "\n", + "# Downsampling\n", + "def DownBlock(width, block_depth):\n", + " \"\"\"\n", + " Component of down stack of residual U-Net. Stacks block_depth ResidualBlocks to specified\n", + " width, followed by Average Pooling for dimensionality reduction i.e. downsampling.\n", + " \"\"\"\n", + "\n", + " def apply(x):\n", + " x, skips = x\n", + " for _ in range(block_depth):\n", + " x = ResidualBlock(width)(x)\n", + " skips.append(x)\n", + " x = tf.keras.layers.AveragePooling2D(pool_size=2)(x)\n", + " return x\n", + "\n", + " return apply\n", + "\n", + "\n", + "# Upsampling\n", + "def UpBlock(width, block_depth):\n", + " \"\"\"\n", + " Component of up stack of residual U-Net. Applies bilinear upsampling and\n", + " stacks block_depth ResidualBlocks to specified width. Concats skip connections\n", + " from same resolution as downstack.\n", + " \"\"\"\n", + "\n", + " def apply(x):\n", + " x, skips = x\n", + " x = tf.keras.layers.UpSampling2D(size=2, interpolation=\"bilinear\")(x)\n", + " for _ in range(block_depth):\n", + " x = tf.keras.layers.Concatenate()([x, skips.pop()])\n", + " x = ResidualBlock(width)(x)\n", + " return x\n", + "\n", + " return apply\n", + "\n", + "\n", + "def get_network(image_size, image_channels, widths, block_depth):\n", + " noisy_images = tf.keras.Input(\n", + " shape=(image_size, image_size, image_channels)\n", + " )\n", + " noise_variances = tf.keras.Input(shape=(1, 1, 1))\n", + "\n", + " e = SinEmbedding()(noise_variances)\n", + " e = tf.keras.layers.UpSampling2D(size=image_size, interpolation=\"nearest\")(\n", + " e\n", + " )\n", + "\n", + " x = tf.keras.layers.Conv2D(widths[0], kernel_size=1)(noisy_images)\n", + " x = tf.keras.layers.Concatenate()([x, e])\n", + "\n", + " skips = []\n", + " for width in widths[:-1]:\n", + " x = DownBlock(width, block_depth)([x, skips])\n", + "\n", + " for _ in range(block_depth):\n", + " x = ResidualBlock(widths[-1])(x)\n", + "\n", + " for width in reversed(widths[:-1]):\n", + " x = UpBlock(width, block_depth)([x, skips])\n", + "\n", + " x = tf.keras.layers.Conv2D(\n", + " image_channels, kernel_size=1, kernel_initializer=\"zeros\"\n", + " )(x)\n", + "\n", + " return tf.keras.Model(\n", + " [noisy_images, noise_variances], x, name=\"residual_unet\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "48c9788f-df46-45dd-a96f-25e37c7f399c", + "metadata": {}, + "source": [ + "### Diffusion Model\n", + "\n", + "#### Training process\n", + "When subclassing `tf.keras.Model` the core logic of defining a training step is in `train_step()`. A single training step in our diffusion model does the following:\n", + "* Normalize the images and samples random Gaussian noise \n", + "* Samples noise/signal rates from sampled diffusion times \n", + "* Mixes the images with the noise according to noise/signal rates\n", + "* Sends the noisy images through the de-noising network (`denoise()`)\n", + "* Computes loss between predicted noise and noise \n", + "* Updates model parameters \n", + "\n", + "\n", + "#### Sampling/Generating (reverse diffusion)\n", + "When sampling or generating via reverse diffusion, the goal is the remove noise from an image using the trained model. At each step, it takes the previous estimate of the noisy image and separates it into image and noise using the trained network. Then it recombines these components using the signal and noise rate of the next step. This process occurs while iterating over diffusion times in reverse (i.e. 1 to 0). This logic is implemented in `reverse_diffusion()`. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c118c008-0eda-4f98-80a6-e29fa50e76ee", + "metadata": {}, + "outputs": [], + "source": [ + "class DiffusionModel(tf.keras.Model):\n", + " def __init__(\n", + " self,\n", + " image_size,\n", + " image_channels,\n", + " widths,\n", + " block_depth,\n", + " batch_size,\n", + " min_signal_rate,\n", + " max_signal_rate,\n", + " ema,\n", + " plot_diffusion_steps,\n", + " ):\n", + " super().__init__()\n", + " self.image_size = image_size\n", + " self.image_channels = image_channels\n", + " self.batch_size = batch_size\n", + " self.min_signal_rate = min_signal_rate\n", + " self.max_signal_rate = max_signal_rate\n", + " self.plot_diffusion_steps = plot_diffusion_steps\n", + " self.ema = ema\n", + "\n", + " self.normalizer = tf.keras.layers.Normalization()\n", + " self.network = get_network(\n", + " image_size, image_channels, widths, block_depth\n", + " )\n", + " self.ema_network = tf.keras.models.clone_model(self.network)\n", + "\n", + " def denormalize(self, images):\n", + " # convert the pixel values back to 0-1 range\n", + " images = self.normalizer.mean + images * self.normalizer.variance**0.5\n", + " return tf.clip_by_value(images, 0.0, 1.0)\n", + "\n", + " def diffusion_schedule(self, diffusion_times):\n", + " # diffusion times -> angles\n", + " start_angle = tf.acos(self.max_signal_rate)\n", + " end_angle = tf.acos(self.min_signal_rate)\n", + "\n", + " diffusion_angles = start_angle + diffusion_times * (\n", + " end_angle - start_angle\n", + " )\n", + "\n", + " # angles -> signal and noise rates\n", + " signal_rates = tf.cos(diffusion_angles)\n", + " noise_rates = tf.sin(diffusion_angles)\n", + "\n", + " return noise_rates, signal_rates\n", + "\n", + " def denoise(self, noisy_images, noise_rates, signal_rates, training):\n", + " if training:\n", + " network = self.network\n", + "\n", + " # Use EMA network for generation\n", + " else:\n", + " network = self.ema_network\n", + "\n", + " # predict noise component and calculate the image component using it\n", + " pred_noises = network(\n", + " [noisy_images, noise_rates**2], training=training\n", + " )\n", + " pred_images = (noisy_images - noise_rates * pred_noises) / signal_rates\n", + "\n", + " return pred_noises, pred_images\n", + "\n", + " def reverse_diffusion(self, initial_noise, diffusion_steps):\n", + " # reverse diffusion = sampling\n", + " num_images = initial_noise.shape[0]\n", + " step_size = 1.0 / diffusion_steps\n", + "\n", + " # at the first sampling step, noisy_image is pure noise\n", + " # signal rate is assumed to be min_signal_rate\n", + " next_noisy_images = initial_noise\n", + " for step in range(diffusion_steps):\n", + " noisy_images = next_noisy_images\n", + "\n", + " # separate the current noisy image to its components\n", + " diffusion_times = tf.ones((num_images, 1, 1, 1)) - step * step_size\n", + " noise_rates, signal_rates = self.diffusion_schedule(diffusion_times)\n", + " pred_noises, pred_images = self.denoise(\n", + " noisy_images, noise_rates, signal_rates, training=False\n", + " )\n", + " # network used in eval mode\n", + "\n", + " # remix the predicted components using the next signal and noise rates\n", + " next_diffusion_times = diffusion_times - step_size\n", + " next_noise_rates, next_signal_rates = self.diffusion_schedule(\n", + " next_diffusion_times\n", + " )\n", + " next_noisy_images = (\n", + " next_signal_rates * pred_images + next_noise_rates * pred_noises\n", + " )\n", + " # this new noisy image will be used in the next step\n", + "\n", + " return pred_images\n", + "\n", + " def generate(self, num_images, diffusion_steps):\n", + " # noise -> images -> denormalized images\n", + " initial_noise = tf.random.normal(\n", + " shape=(\n", + " num_images,\n", + " self.image_size,\n", + " self.image_size,\n", + " self.image_channels,\n", + " )\n", + " )\n", + " generated_images = self.reverse_diffusion(\n", + " initial_noise, diffusion_steps\n", + " )\n", + " generated_images = self.denormalize(generated_images)\n", + " return generated_images\n", + "\n", + " def train_step(self, images):\n", + " images = self.normalizer(images, training=True)\n", + " noises = tf.random.normal(\n", + " shape=(\n", + " self.batch_size,\n", + " self.image_size,\n", + " self.image_size,\n", + " self.image_channels,\n", + " )\n", + " )\n", + "\n", + " diffusion_times = tf.random.uniform(\n", + " shape=(self.batch_size, 1, 1, 1), minval=0.0, maxval=1.0\n", + " )\n", + " noise_rates, signal_rates = self.diffusion_schedule(diffusion_times)\n", + " noisy_images = signal_rates * images + noise_rates * noises\n", + "\n", + " with tf.GradientTape() as tape:\n", + " pred_noises, pred_images = self.denoise(\n", + " noisy_images, noise_rates, signal_rates, training=True\n", + " )\n", + "\n", + " noise_loss = self.loss(noises, pred_noises) # used for training\n", + "\n", + " gradients = tape.gradient(noise_loss, self.network.trainable_weights)\n", + " self.optimizer.apply_gradients(\n", + " zip(gradients, self.network.trainable_weights)\n", + " )\n", + "\n", + " # track the exponential moving averages of weights\n", + " for weight, ema_weight in zip(\n", + " self.network.weights, self.ema_network.weights\n", + " ):\n", + " ema_weight.assign(self.ema * ema_weight + (1 - self.ema) * weight)\n", + "\n", + " return {\"noise_loss\": noise_loss}\n", + "\n", + " def plot_images(self, epoch=None, logs=None, num_rows=3, num_cols=6):\n", + " # plot random generated images for visual evaluation of generation quality\n", + " generated_images = self.generate(\n", + " num_images=num_rows * num_cols,\n", + " diffusion_steps=self.plot_diffusion_steps,\n", + " )\n", + "\n", + " # plot in grayscale for single channel images\n", + " cmap = None\n", + " if self.image_channels == 1:\n", + " cmap = \"gray\"\n", + "\n", + " plt.figure(figsize=(num_cols * 2.0, num_rows * 2.0))\n", + " for row in range(num_rows):\n", + " for col in range(num_cols):\n", + " index = row * num_cols + col\n", + " plt.subplot(num_rows, num_cols, index + 1)\n", + " plt.imshow(generated_images[index], cmap=cmap)\n", + " plt.axis(\"off\")\n", + " plt.tight_layout()\n", + " plt.show()\n", + " plt.close()" + ] + }, + { + "cell_type": "markdown", + "id": "516bf100-2b61-4e8d-b811-3da620640470", + "metadata": {}, + "source": [ + "### Train the model \n", + "Before training the model, you need to compile it and specify an optimizer and loss function. We will simply use Adam as an optimizer and mean squared error to compute the loss between the actual noise added to an image and the predicted noise. \n", + "\n", + "The model has callbacks that will generate and display images after each epoch of model training, and save checkpoints of the best model (lowest loss). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a2cd070-b66c-446c-8efd-cd5db4d76a2d", + "metadata": {}, + "outputs": [], + "source": [ + "model = DiffusionModel(\n", + " image_size=IMAGE_SIZE,\n", + " image_channels=IMAGE_CHANNELS,\n", + " widths=WIDTHS,\n", + " block_depth=BLOCK_DEPTH,\n", + " batch_size=BATCH_SIZE,\n", + " min_signal_rate=MIN_SIGNAL_RATE,\n", + " max_signal_rate=MAX_SIGNAL_RATE,\n", + " plot_diffusion_steps=PLOT_DIFFUSION_STEPS,\n", + " ema=EMA,\n", + ")\n", + "\n", + "model.compile(optimizer=\"adam\", loss=tf.keras.losses.MeanSquaredError())\n", + "\n", + "# compute mean/variance of dataset for normalization layer\n", + "model.normalizer.adapt(train_ds)\n", + "\n", + "model.fit(\n", + " train_ds,\n", + " epochs=EPOCHS,\n", + " callbacks=[\n", + " tf.keras.callbacks.LambdaCallback(on_epoch_end=model.plot_images),\n", + " tf.keras.callbacks.ModelCheckpoint(\n", + " CHECKPOINT_DIR,\n", + " monitor=\"noise_loss\",\n", + " mode=\"min\",\n", + " save_best_only=True,\n", + " save_weights_only=True,\n", + " ),\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4028698a-967b-49bb-805e-c45f65ddda11", + "metadata": {}, + "source": [ + "Congrats! You've succesfully trained a diffusion model to generate images. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "abbf9875-c1f4-406c-bcb4-33b8f60cfbdd", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m108", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m108" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From aa1518435f90d58ec7dfee6a97ba82feffcbe7a3 Mon Sep 17 00:00:00 2001 From: Kyle Steckler Date: Tue, 18 Jul 2023 19:05:17 +0000 Subject: [PATCH 2/2] update diffusion solution nb --- .../image_models/assets/diffusion_times.png | Bin 0 -> 194151 bytes .../solutions/diffusion_model.ipynb | 155 +++++++++++++++--- 2 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 notebooks/image_models/assets/diffusion_times.png diff --git a/notebooks/image_models/assets/diffusion_times.png b/notebooks/image_models/assets/diffusion_times.png new file mode 100644 index 0000000000000000000000000000000000000000..1e01c6718d2aff6a80d35813b89ba7d2bec32e3d GIT binary patch literal 194151 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 W(MlO$ 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 angles\n", " start_angle = tf.acos(max_signal_rate)\n", " end_angle = tf.acos(min_signal_rate)\n", "\n", " diffusion_angles = start_angle + diffusion_times * (end_angle - start_angle)\n", "\n", - " # angles -> signal and noise rates\n", " signal_rates = tf.cos(diffusion_angles)\n", " noise_rates = tf.sin(diffusion_angles)\n", "\n", @@ -211,7 +233,7 @@ " train_ds = create_dataset_flowers(BATCH_SIZE)\n", "\n", "ds_iter = train_ds.as_numpy_iterator()\n", - "data_batch = ds_iter.__next__()" + "data_batch = next(ds_iter)" ] }, { @@ -283,15 +305,30 @@ "source": [ "### De-noinsing Model Architecture\n", "\n", - "Now we need to specify the neural network that will be used for denoising (predicting the noise added to a given image). U-Net is a popular semantic segmentation architecture, whose main idea is that it progressively downsamples and then upsamples its input image, and adds skip connections between layers having the same resolution.\n", + "Now we need to specify the neural network that will be used for denoising (predicting the noise added to a given image). U-Net is a popular semantic segmentation architecture, whose main idea is that it progressively downsamples and then upsamples its input image, and adds skip connections between layers having the same resolution. U-Net architectures have shown good performance with diffusion models, likely because they are suited well for representing images in many subspaces, and inherently have the same dimensionality of input/output which is needed for a de-noising model. \n", + "\n", + "The U-Net will take in two inputs. The first input is of course the noisy image (`noise_rate` * `noise` + `signal_rate` * `image`). The de-noising model needs to be able to predict/remove noise at different levels of noise, however, so we need to pass in an input related to the noise level in addition to the noisy image. To enable our model to learn how to de-noise at different noise rates, we will pass in the square of the noise rate (noise variance). While we could simply pass in the noise rate (or the signal rate) instead, passing in the squared noise rate has nice properties (it is symetric under the sampling schedule and generally leads to better performance). We will embed noise variance in such a way that different noise variances are represented differently. We will do this with sinusoidal embeddings. This is quite similar to positional encodings used in transformers, and will allow the model to represent different noise rates uniquely, and learn patterns across noise rate variances. The output of the model is of course the predicted noise. \n", + "\n", + "Model Inputs: \n", + "- Noisy Image: `noise_rate` * `noise` + `signal_rate` * `image` \n", + "- Noise Variance: `noise_rate`**2\n", "\n", - "Our U-Net takes two inputs: the noisy images and the variances of their noise components. The variances are required since denoising a signal requires different operations at different levels of noise. In other words, the model needs to learn how to denoise at different noise rates so we will embed noise variance in such a way that different noise variances are represented differently. We will transform the noise variances using sinusoidal embeddings. This is quite similar to positional encodings used in transformers. The output of the model is the predicted noise. " + "Model Output: \n", + "- Predicted Noise " + ] + }, + { + "cell_type": "markdown", + "id": "4981450a-9819-4c0d-a42d-a1bac43ea24b", + "metadata": {}, + "source": [ + "The first layer we will define is `SinEmbedding`. The purpose of this layer is to take a noise_rate (squared) and represent it as a `embedding_dim` dimensional vector. We will use `embedding_dim=32`. The idea is that this 32 dimensional vector will be different for different noise rates, allowing the denoising model to learn how to predict/remove noise across all possible noise rates. " ] }, { "cell_type": "code", "execution_count": null, - "id": "e6320d8f-73a7-4979-9c74-4053dfa5a0ba", + "id": "3b8df3e3-451a-4ee1-940f-ab3710e83dd0", "metadata": {}, "outputs": [], "source": [ @@ -325,9 +362,56 @@ " ],\n", " axis=3,\n", " )\n", - " return emb\n", + " return emb" + ] + }, + { + "cell_type": "markdown", + "id": "1a4b9ac2-6a40-45f6-9d97-9aa3b9478d90", + "metadata": {}, + "source": [ + "This is similar to how positional encodings for transformers are created. \n", "\n", + "We can visualize this with a heatmap (i.e. looking at how the 32 dimensional vectors change as the noise rate changes from zero to one)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a51f1618-3d7c-47ee-a236-497d2806ab43", + "metadata": {}, + "outputs": [], + "source": [ + "# noise rates ranging from zero to one\n", + "test_noise_rates = tf.reshape(tf.linspace(0.0, 1.0, 100), (100, 1, 1, 1))\n", + "\n", + "# send noise rates through SinEmbedding layer\n", + "encoded_noise_variances = SinEmbedding()(test_noise_rates**2)\n", + "plt.imshow(tf.transpose(tf.squeeze(encoded_noise_variances)))\n", + "plt.xlabel(\"Noise Rate\")\n", + "plt.xticks([0, 49, 99], [\"0.0\", \"0.5\", \"1.0\"])" + ] + }, + { + "cell_type": "markdown", + "id": "f29def84-58d6-46ed-86c6-5403176ee429", + "metadata": {}, + "source": [ + "Next define the building blocks of the U-Net architecture. This will be composed of:\n", + "* `ResidualBlock()`: Convolutional layers with an additive skip connection\n", + "* `DownBlock()`: (downstack) Residual blocks followed by average pooling \n", + "* `UpBlock()`: (upstack) Bilinear upsampling followed by residual blocks, concatenating same dimensionalities from downstack. Note that you could also use transpose convolutional layers (instead of bilinear upsampling) and that may lead to better performance.\n", "\n", + "Then define `get_network`: A function that will use the building blocks to compose the de-noising network. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e6320d8f-73a7-4979-9c74-4053dfa5a0ba", + "metadata": {}, + "outputs": [], + "source": [ "def ResidualBlock(width):\n", " \"\"\"\n", " Batch norm followed by two conv layers to specified width.\n", @@ -431,8 +515,17 @@ "source": [ "### Diffusion Model\n", "\n", - "#### Training process\n", - "When subclassing `tf.keras.Model` the core logic of defining a training step is in `train_step()`. A single training step in our diffusion model does the following:\n", + "Now that we understand the concepts and have a function to build the de-noising model, we can put everything together into one Keras Model. This class will need the following methods:\n", + "\n", + "`denormalize()`: A method to denormalize pixels back to 0-1 using the keras normalization layer\n", + "\n", + "`diffusion_schedule()`: A method to return noise and signal rates, given a tensor of diffusion times. This is what we implemented and ran directly above in the notebook. \n", + "\n", + "`denoise()`: A method to take in a noisy image and a noise rate, send them through the de-noising model, then remove the predicted noise from the input.\n", + "\n", + "`reverse_diffusion()`: Iteratively denoise for a specified number of diffusion steps. At each step, it takes the previous estimate of the noisy image and separates it into image and noise using the trained network. Then it recombines these components using the signal and noise rate of the next step. This process occurs while iterating over diffusion times in reverse (i.e. 1 to 0)\n", + "\n", + "`train_step()`: A single training step in our diffusion model does the following:\n", "* Normalize the images and samples random Gaussian noise \n", "* Samples noise/signal rates from sampled diffusion times \n", "* Mixes the images with the noise according to noise/signal rates\n", @@ -440,10 +533,9 @@ "* Computes loss between predicted noise and noise \n", "* Updates model parameters \n", "\n", + "`plot_images()`: A method to generate and display images with the model. While this method is not neccesary, we can use it as a callback to plot images after each epoch of training. \n", "\n", - "#### Sampling/Generating (reverse diffusion)\n", - "When sampling or generating via reverse diffusion, the goal is the remove noise from an image using the trained model. At each step, it takes the previous estimate of the noisy image and separates it into image and noise using the trained network. Then it recombines these components using the signal and noise rate of the next step. This process occurs while iterating over diffusion times in reverse (i.e. 1 to 0). This logic is implemented in `reverse_diffusion()`. \n", - "\n" + "Another thing to note is `self.ema_network`. While the de-noising model is `self.network`, we will also update `self.ema_network` at each training step with an exponential moving average of the weights of `self.network`. `self.ema_network` is not used while training and is only used when generating images.\n" ] }, { @@ -678,30 +770,41 @@ }, { "cell_type": "markdown", - "id": "4028698a-967b-49bb-805e-c45f65ddda11", + "id": "a31bc3e2-bbba-45fd-bc01-de0f3fd26794", "metadata": {}, "source": [ - "Congrats! You've succesfully trained a diffusion model to generate images. " + "Load the model in from the checkpoint file and use it to generate an image." ] }, { "cell_type": "code", "execution_count": null, - "id": "abbf9875-c1f4-406c-bcb4-33b8f60cfbdd", + "id": "9e62f095-dab7-402d-aef5-567eab7ae18d", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "model.load_weights(CHECKPOINT_DIR)\n", + "model.plot_images()" + ] + }, + { + "cell_type": "markdown", + "id": "4028698a-967b-49bb-805e-c45f65ddda11", + "metadata": {}, + "source": [ + "Congrats! You've succesfully trained a diffusion model to generate images. " + ] } ], "metadata": { "environment": { "kernel": "python3", - "name": "tf2-gpu.2-11.m108", + "name": "tf2-gpu.2-8.m109", "type": "gcloud", - "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m108" + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-8:m109" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" },