From 75ad0f4241197b7bdafcb5243a6883de56c9ca2a Mon Sep 17 00:00:00 2001 From: blake Date: Sun, 21 Dec 2025 19:10:08 +1000 Subject: [PATCH] moved files to correct repo. Sorry for the delay. --- .../Hip_MRI_VQVAE_PixelCNN_48036177/.Rhistory | 0 .../.gitignore | 11 + .../pixel-cnn-generator.py | 334 +++++++++++ .../Novel_Generated_Outputs_3_better.jpg | Bin 0 -> 59558 bytes .../plots/Novel_Generated_Outputs_working.jpg | Bin 0 -> 57458 bytes .../plots/loss.png | Bin 0 -> 32115 bytes .../plots/model_architecture.png | Bin 0 -> 25844 bytes .../plots/reconstruction.jpg | Bin 0 -> 35633 bytes .../plots/reconstruction_good.jpg | Bin 0 -> 38520 bytes .../Hip_MRI_VQVAE_PixelCNN_48036177/readme.md | 46 ++ .../requirements.txt | 8 + .../ssim-evaluation.py | 54 ++ .../Hip_MRI_VQVAE_PixelCNN_48036177/vq-vae.py | 522 ++++++++++++++++++ 13 files changed, 975 insertions(+) create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.Rhistory create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.gitignore create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/pixel-cnn-generator.py create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_3_better.jpg create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_working.jpg create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/loss.png create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/model_architecture.png create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/reconstruction.jpg create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/reconstruction_good.jpg create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/readme.md create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/requirements.txt create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/ssim-evaluation.py create mode 100644 recognition/Hip_MRI_VQVAE_PixelCNN_48036177/vq-vae.py diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.Rhistory b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.Rhistory new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.gitignore b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.gitignore new file mode 100644 index 000000000..4981c7f21 --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/.gitignore @@ -0,0 +1,11 @@ +Makefile +plan.txt +s_run_script.sh +slurm.sh +trainer.weights.h5 +w-gan.py +venv/ +data/ +.DS_Store +trained_models/ +plot_history.py \ No newline at end of file diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/pixel-cnn-generator.py b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/pixel-cnn-generator.py new file mode 100644 index 000000000..ac42254cb --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/pixel-cnn-generator.py @@ -0,0 +1,334 @@ +""" +Based on PixelCNN by ADMoreau available at +https://keras.io/examples/generative/pixelcnn/ + +PixelCNN to mimic latent space of the encoders output. For generation +""" + +import keras +import numpy as np +from keras import layers + +import tensorflow as tf +# from keras import mixed_precision +# mixed_precision.set_global_policy("mixed_float16") # speed up + + +# for displaying +import matplotlib.pyplot as plt +import math + +import importlib +vqvae = importlib.import_module("vq-vae") + +class MaskConstraint(keras.constraints.Constraint): + def __init__(self, mask): self.mask = tf.constant(mask, dtype=tf.float32) + def __call__(self, w): return w * self.mask + +class PixelConvLayer(layers.Layer): + + """ + a convolution layer that masks the kernel to only influence pixels behind + the current pixel - allows for conditional generation of the output + """ + + def __init__( + self, + mask_type, # A includes the pixel itself, B does not + **kwargs, # arguments for convolution layer + ): + super().__init__() + self.mask_type=mask_type + self.conv = layers.Conv2D(**kwargs) + + def build( + self, input_shape + ): + self.conv.build(input_shape) + k = self.conv.kernel + + # get dimensions + kh, kw, cin, cout = k.shape + + mask = np.zeros((kh, kw, cin, cout), dtype=np.float32) + mask[: kh // 2, :, :, :] = 1.0 # rows above + mask[kh // 2, : kw // 2, :, :] = 1.0 # same row, left + + if self.mask_type == "B": + mask[kh // 2, kw // 2, ...] = 1.0 # center (only for B) + + self.mask = tf.constant(mask, dtype=tf.float32) + # Hard-apply once at init to eliminate any initial leakage + self.conv.kernel.assign(self.conv.kernel * self.mask) + # Keep enforcing after each optimizer step + self.conv.kernel_constraint = MaskConstraint(self.mask) + + print(self.mask_type, self.mask[..., 0, 0][k.shape[0]//2]) + def call( + self, x + ): + # mask the kernel with the mask + self.conv.kernel.assign(self.conv.kernel * self.mask) + + # return + return self.conv(x) + + +def residual_pixel_layer( + x, + num_filters, +): + + """ + a residual layer with 2 1x1 convolutions around a 3x3 pixel convolution. + """ + start = x + + x = layers.Conv2D( + num_filters, 1, 1 + )(x) + x = keras.activations.relu(x) + + x = PixelConvLayer( + # "B", filters=num_filters//2, kernel_size=3, padding="same" + "B", filters=num_filters, kernel_size=3, padding="same" + )(x) + + x = keras.activations.relu(x) + + + x = layers.Conv2D( + num_filters, 1, 1 + )(x) + + x = keras.layers.add([x, start]) + x = keras.activations.relu(x) + + return x + + +def pixel_cnn_model( + input_shape, + num_residuals, + num_embeddings, + num_filters=128 +): + """ + returns a pixelCNN model + """ + + inputs = layers.Input(shape=input_shape, dtype=tf.int32) + # x = tf.cast(inputs, tf.float32) / 511 + # one hot + # x = layers.Embedding(num_embeddings, 3)(tf.squeeze(inputs, -1)) + x = tf.one_hot(tf.squeeze(inputs, -1), num_embeddings) + + # initial convolution + x = PixelConvLayer( + "A", + filters=num_filters, + kernel_size=7, + padding="same" + )(x) + + x = keras.activations.relu(x) + + for _ in range(num_residuals): + x = residual_pixel_layer( + x, num_filters + ) + + # end on 2 more pixelconvolutions + for _ in range(2): + x = PixelConvLayer( + "B", filters=num_filters, kernel_size=1, strides=1, padding='valid' + )(x) + + output = layers.Conv2D( + filters=num_embeddings, + kernel_size=1, + strides=1, + padding="valid" + )(x) + + return keras.Model(inputs=inputs, outputs=output) + +def generate_images( + pixelcnn, + quantizer, + decoder, + image_shape, # (rows, cols) + num_samples=16, +): + + rows, cols = image_shape + batch_size = num_samples + num_embeddings = quantizer.num_embeddings + + # initialise latent index grid + # priors = np.random.random_integers(0, num_embeddings-1, (batch_size, rows, cols, 1)) + priors = np.zeros((batch_size, rows, cols, 1)) + + for r in range(rows): + for c in range(cols): + logits = pixelcnn(priors) + logits_rc = logits[:, r, c, :] / 0.7 + sample = tf.random.categorical(logits_rc, 1) + priors[:, r, c, 0] = tf.squeeze(sample, -1).numpy().astype(np.int32) + + # back to one-hot + priors = priors.squeeze(-1) + indices = tf.one_hot(priors, num_embeddings) + + codebook = tf.convert_to_tensor(quantizer.codebook, dtype=tf.float32) + quantized = tf.matmul(indices, tf.transpose(codebook)) + + # decode to image space + generated = decoder(quantized, training=False) + + return generated + + +# pass image dataset through new pipeline +def dataset_pipeline(img): + # add batch and channel dimension + img = tf.expand_dims(img, axis=0) # batch + img = tf.expand_dims(img, axis=-1) # channel + + prediction = encoder(img, training=False) + flattened = tf.reshape(prediction, (-1, prediction.shape[-1])) + + # quantize + indices = quantizer.get_code_indices(flattened) + indices = tf.cast(indices, tf.int32) + indices = tf.reshape(indices, prediction.shape[1:-1]) + indices = tf.expand_dims(indices, -1) # channel dim + + return (indices, indices) + + +def load_model(path): + shape = ( + vqvae.get_dataset(vqvae.TRAIN_FOLDER) + .map(dataset_pipeline) + .element_spec[0].shape#[1:] + ) + + new_pixel = pixel_cnn_model( + shape, + 4, + vqvae.CODEBOOK_SIZE, + num_filters=32 + ) # new model with same parameters + + + new_pixel.compile("adam") + new_pixel.build(shape) + new_pixel.load_weights(path) + + return new_pixel + + +def show_generated_images(batch, title="Generated_Images"): + """ + Display a batch of generated grayscale images as a square grid. + + Args: + batch: np.ndarray or tf.Tensor of shape (N, H, W, 1) or (N, H, W) + N = number of images + title: optional string for figure title + save file name + """ + + # Convert to numpy + batch = np.array(batch) + + # Drop channel dimension if present + if batch.ndim == 4 and batch.shape[-1] == 1: + batch = batch[..., 0] + + n = batch.shape[0] + grid_size = math.ceil(math.sqrt(n)) + + fig, axes = plt.subplots(grid_size, grid_size, figsize=(grid_size * 2, grid_size * 2)) + axes = axes.flatten() + + for i, ax in enumerate(axes): + ax.axis("off") + if i < n: + ax.imshow(batch[i], cmap="gray") + plt.suptitle(title) + plt.tight_layout() + plt.savefig(title+".jpg") + + +if __name__ == "__main__": + # load existing vqvae model + vae_model = vqvae.load_model( + "trainer.weights.h5" + ) + + # get components + encoder = vae_model.get_layer("encoder") + decoder = vae_model.get_layer("decoder") + quantizer = vae_model.get_layer("quantizer") + + print("Codebook shape:", quantizer.codebook.shape) + + + # load the dataset if it already exists + dataset_save_path = "pixelcnn_dataset" + try: + pixelcnn_dataset = tf.data.Dataset.load(dataset_save_path) + except: + print("Dataset not found, creating now...") + # create pixelcnn dataset + image_dataset = vqvae.get_dataset( + vqvae.TRAIN_FOLDER + ) + + pixelcnn_dataset = image_dataset.map(dataset_pipeline) + pixelcnn_dataset = pixelcnn_dataset.cache().batch(64) + + # save so it isnt used again + pixelcnn_dataset.save(dataset_save_path) + + # actually need to remove channel dim on Y + pixelcnn_dataset = pixelcnn_dataset.map(lambda x, y: (x, tf.squeeze(y, -1))) + pixelcnn_dataset = pixelcnn_dataset.shuffle(pixelcnn_dataset.cardinality()) + + # initialise pixelcnn object + io_shape = pixelcnn_dataset.element_spec[0].shape[1:] # it adds batch dim auto + pcnn = pixel_cnn_model( + io_shape, 8, vqvae.CODEBOOK_SIZE, num_filters=256 + ) + + pcnn.compile( + keras.optimizers.Adam( + # dtype_policy="mixed_float16", + learning_rate=0.001, + clipnorm=1.0 + ), + loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), + metrics=[keras.metrics.SparseCategoricalAccuracy()] + ) + + # load in existing weights + # pcnn = load_model("pixel.weights.h5") + + pcnn.fit( + pixelcnn_dataset, + epochs=200 + ) + + generated_outputs = generate_images( + pcnn, quantizer, decoder, io_shape[:-1] + ) + + show_generated_images(generated_outputs, title="Novel_Generated_Outputs_3") + + # save model + pcnn.save_weights( + "pixel_round_2.weights.h5" + ) + + diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_3_better.jpg b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_3_better.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac0622922a7de79fe6d6104c3e59b370515d7ea9 GIT binary patch literal 59558 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 literal 0 HcmV?d00001 diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_working.jpg b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/Novel_Generated_Outputs_working.jpg new file mode 100644 index 0000000000000000000000000000000000000000..702cd72af937beb672cb6db492db0caf66790527 GIT binary patch literal 57458 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�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 #?6!)-l`^kps=#h@ZLY>;MBWa* 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 literal 0 HcmV?d00001 diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/loss.png b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/loss.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbdcc83b3615fdf4c7ca211bdec910128e62a7a GIT binary patch literal 32115 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 Xa^#8gC49NaTcRZ7#nZ0ce(?VQ$s`5a literal 0 HcmV?d00001 diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/model_architecture.png b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/model_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..58680e924ba5601d66fc3e44c619662c760db87a GIT binary patch literal 25844 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 z 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 literal 0 HcmV?d00001 diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/reconstruction_good.jpg b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/plots/reconstruction_good.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3528ff73a0735526c638fc48a8d624db056a1012 GIT binary patch literal 38520 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 ONdWr)@hjx##Qy`7(8omp literal 0 HcmV?d00001 diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/readme.md b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/readme.md new file mode 100644 index 000000000..d42e1754c --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/readme.md @@ -0,0 +1,46 @@ +## VQ VAE and PixelCNN Implementation + +This completes problem 10 of the COMP3710 (Pattern Recognition) assignment 2025. + +All requirements for this project are listed in requirements.txt + +#### VQ-VAE + +In vq-vae.py, there is the implementation in tf/keras of a vector quantised variational autoencoder. Calling this implementation uses a default architecture designed by me and takes only as hyperparameters the latent dimension (of embeddings) and the number of embeddings (ie codebook size) + +![model architecture](plots/model_architecture.png) + +The encoder consists of 3 residual blocks each doubling in filters from 128 while halving in spacial dimension. The quantizer takes the embeddings and maps them to the closest of the 512 codebook vectors and the decoder performs the exact operations of the encoder but in reverse (with transpose convolutions). This model was trained for 10 epochs. + +![loss](plots/loss.png) + +The end result are the following reconstructions: + +![reconstruction 1](plots/reconstruction_good.jpg) + +![reconstruction 1](plots/reconstruction.jpg) + +This was tested in ssim-evalution.py and it scored 0.78039 structured similarity across the test set. + +This is with 3 halvings in spacial dimension and a latent dimension of 3 corresponding to roughly 21x compression in latent representation (128x256 in image space and 16x32x3 in latent). + +#### PixelCNN + +Then, in pixel-cnn-generator.py a pixelcnn model was trained on the latent distribution. Attempting to conditionally predict latent vector indices. + +The PixelCNN has structure of an initial pixelConvolution layer followed by 8 residual pixelConvolution layers and finally 2 more pixel convolutions. A pixel convolution is a standard convolution with all kernel entries occuring at and after the current pixel being zeroed out. This is what makes the pixelCNN conditional, it may only determine the current output entry by what has come before it. A residual pixel layer is a pixelConvolution inbetween 2 regular convolutions with a skip connection across all. + +This PixelCNN trained for ~50 epochs on the latent representation output by the encoder and converged (on the best run) with a loss of ~2.7 + +unlike other models the convergent error of a pixelcnn scales with the codebook size and so this loss is indicative of a decent model but one still with possible improvement. A perfect model would be closer to 2 for the used codebook size. + +then this model can be used in the generate_images function to sample this learned distribution. The sampled indices are selected from the code book and run through the decoder to produce novel examples. + +First the examples were very rough +![rough](plots/Novel_Generated_Outputs_working.jpg) + +But then by adding one-hot encoding to input, adjusting the temperature of sampling and tweaking the model architecture (to that described above), they could be improved to the following + +![better](plots/Novel_Generated_Outputs_3_better.jpg) + +These have clear features present in hip MRI scans shown above. \ No newline at end of file diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/requirements.txt b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/requirements.txt new file mode 100644 index 000000000..6ac0faa5d --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/requirements.txt @@ -0,0 +1,8 @@ +tensorflow==2.15 +tensorflow_probability +keras==2.15 +tf-keras==2.15 +numpy +scikit-image +nibabel +matplotlib \ No newline at end of file diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/ssim-evaluation.py b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/ssim-evaluation.py new file mode 100644 index 000000000..e71c31274 --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/ssim-evaluation.py @@ -0,0 +1,54 @@ +import tensorflow as tf + +import importlib +vqvae = importlib.import_module("vq-vae") + +""" +EVALUATED: 0.78039 +""" + +def evaluate_ssim(model, test_dataset, max_val=1.0): + """ + Compute average SSIM over a test dataset for a VQ-VAE model. + + Args: + model: a trained VQ-VAE model with .predict or __call__ method + test_dataset: a tf.data.Dataset yielding batches of images in [0, 1] range + max_val: maximum pixel value (default assumes images scaled to [0,1]) + + Returns: + float: average SSIM score across the dataset + """ + ssim_scores = [] + + for batch in test_dataset: + # Ensure batch is float32 + batch = tf.cast(batch, tf.float32) + + # Get reconstructions from model + recon = model(batch, training=False) + + # Compute SSIM for each image in the batch + batch_ssim = tf.image.ssim(batch, recon, max_val=max_val) + + # Collect as numpy values + ssim_scores.extend(batch_ssim.numpy()) + + return float(tf.reduce_mean(ssim_scores).numpy()) + +if __name__ == "__main__": + # fetch test set + test = vqvae.get_dataset( + # "data/keras_slices_data/keras_slices_train/" + "/home/groups/comp3710/HipMRI_Study_open/keras_slices_data/keras_slices_test" + ).batch(10) + + vae = vqvae.load_model( + "trainer.weights.h5" + ) + + ssim = evaluate_ssim( + vae, test + ) + + print(ssim) \ No newline at end of file diff --git a/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/vq-vae.py b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/vq-vae.py new file mode 100644 index 000000000..3512ce72e --- /dev/null +++ b/recognition/Hip_MRI_VQVAE_PixelCNN_48036177/vq-vae.py @@ -0,0 +1,522 @@ +import tensorflow as tf +import keras +from keras import layers + +# for data +import os +import nibabel as nib +import numpy as np + +# testing +import matplotlib.pyplot as plt +from skimage.transform import resize +import json + +""" +Based on example: 'Vector-Quantized Variational Autoencoders' by Sayak Paul +href: https://keras.io/examples/generative/vq_vae/ +""" + +""" +IDEAS: Could increase the number of hidden units across the board +""" + +# TRAIN_FOLDER = "data/keras_slices_data/keras_slices_train/" +TRAIN_FOLDER = "/home/groups/comp3710/HipMRI_Study_open/keras_slices_data/keras_slices_train" +HISTORY_PATH = "history.json" +LATENT_DIM = 3 +CODEBOOK_SIZE = 512 + +class VectorQuantizerLayer(layers.Layer): + + def __init__( + self, + num_embeddings, # number of vectors in codebook + embedding_dim, + commitment_weight=0.25, # coefficient of commitment loss + **kwargs + ): + super().__init__(**kwargs) + + self.commitment_weight=commitment_weight + self.embedding_dim = embedding_dim + self.num_embeddings = num_embeddings + + # Initialise codebook + self.codebook = self.add_weight( + name="VQ-CODEBOOK", + shape=(self.embedding_dim, self.num_embeddings), + initializer=tf.random_uniform_initializer(), + trainable=True + ) + + + def call(self, x): + """ + Given a layer of network, replace each vector in the layer with a + vector from the codebook - quantize the layer + """ + + # store starting shape + start_shape = tf.shape(x) + + # flatten to single row of embedding_dim vectors + flattened = tf.reshape(x, [-1, self.embedding_dim]) + + # actually quantize + # indices of closest code vectors + indices = self.get_code_indices(flattened) + + # one-hot the needed vector + one_hot_indices = tf.one_hot(indices, self.num_embeddings) + + # extract the given index from the codebook - one hot selects correct + # codebook vector + quantized = tf.matmul(one_hot_indices, self.codebook, transpose_b=True) + quantized = tf.reshape(quantized, start_shape) + + # loss definitions + loss_commitment = tf.reduce_mean( + # dont let this loss flow to the codebook - only to update encoder + # so detach with stop_gradient + + # MSE to get encoder to give vectors close to codebook vectors + (tf.stop_gradient(quantized) - x)**2 + ) + + loss_codebook = tf.reduce_mean( + # for codebook only, stop gradient from flowing to encoder + (quantized - tf.stop_gradient(x)) ** 2 + ) + + # add to model + loss_total = self.commitment_weight * loss_commitment + loss_codebook + self.add_loss(loss_total) + + # trick to stop gradient flowing from rest of model going through + # the codebook - quantized is gradient stopped but we're still passing + # the quantized output -- gradient flows through x + gradient_skipped_quantized = x + tf.stop_gradient(quantized - x) + return gradient_skipped_quantized + + def get_code_indices(self, flattened): + """ + calculate L2 distance to all codebook vectors and return the index + of the closest one for each vector in flattened + """ + + ab = tf.matmul( + flattened, self.codebook + ) + + distances = (#L2 + tf.reduce_sum(flattened ** 2, axis=1, keepdims=True) + + tf.reduce_sum(self.codebook ** 2, axis=0) + -2*ab + ) + + smallest_indices = tf.argmin( + distances, axis=1 + ) + + return smallest_indices + + +def residual_block(x, num_filters): + """ + standard residual block. used for encoder and decoder both + """ + start = x + x = keras.layers.Conv2D( + num_filters, 3, 1, padding="same" + )(x) + + x = keras.activations.relu(x) + + x = keras.layers.Conv2D( + num_filters, 1, 1, padding="same" + )(x) + + x = keras.layers.Add()([x, start]) + x = keras.activations.relu(x) + + return x + + +def get_encoder( + input_shape, + layers_filters, + latent_dim=64, + ): + """ + returns an encoder + + layers: list of kernal sizes to iterate over + """ + + inputs = keras.Input(shape=input_shape) + + x = inputs + for num_filters in layers_filters: + x = keras.layers.Conv2D( + num_filters, + 4, + strides=2, + padding="same" + )(x) + + x = keras.activations.relu(x) + + # down sampling followed by residual blocks + x = residual_block(x, num_filters) + x = residual_block(x, num_filters) + + # use 1x1 kernel to convert to latent dim size + outputs = keras.layers.Conv2D( + latent_dim, 1, padding="same" + )(x) + + return keras.Model(inputs, outputs, name='encoder') + +def get_decoder( + layers_filters, + input_shape, # shape of encoder output + latent_dim = 64 +): + """ + layers_filters should be the same as the encoder but reversed. + + Returns decoder object. + """ + + inputs = keras.Input( + shape=input_shape + ) + x = inputs + for num_filters in layers_filters: + + x = keras.layers.Conv2DTranspose( + num_filters, 4, strides=2, padding="same" + )(x) + + x = keras.activations.relu(x) + + x = residual_block(x, num_filters) + x = residual_block(x, num_filters) + + # 1x1 kernel to bring to a single layer + x = layers.Conv2DTranspose(1, 3, padding="same")(x) + outputs = keras.activations.sigmoid(x) # scale to [0,1] + return keras.Model( + inputs, outputs, name="decoder" + ) + +def vq_vae( + input_shape, + latent_dim=64, + num_embeddings=128, +): + quantize_layer = VectorQuantizerLayer( + num_embeddings, latent_dim, name="quantizer" + ) + + filter_layers = [ + 128, 256, 512 + ] + + encoder = get_encoder( + latent_dim=latent_dim, + input_shape=input_shape, + layers_filters=filter_layers + ) + + decoder = get_decoder( + filter_layers[::-1], # reverse order to encoder to end in same shape + encoder.output.shape[1:], + latent_dim=latent_dim + ) + + inputs = keras.Input(shape=input_shape) + encoder_out = encoder(inputs) + quantized_out = quantize_layer(encoder_out) + reconstruction = decoder(quantized_out) + + return keras.Model( + inputs, reconstruction, name="vq-vae" + ) + +class trainer(keras.models.Model): + """ + Class to train a vq-vae + """ + def __init__( + self, + train_variance, + latent_dim, + codebook_size, + input_shape, + **kwargs + ): + # init + super().__init__(**kwargs) + self.train_variance = train_variance + self.latent_dim = latent_dim + self.codebook_size = codebook_size + + + # actual model + self.vqvae = vq_vae( + input_shape, latent_dim, codebook_size + ) + + # initialise losses - all mean to average over batch + self.total_loss = keras.metrics.Mean("total_loss") + self.reconstruction_loss = keras.metrics.Mean("reconstruction_loss") + self.vqvae_loss = keras.metrics.Mean("vqvae_loss") + + def call(self, x): + return self.vqvae(x) + + # override metrics so our custom metrics are reset on epochs/tracked + @property + def metrics(self): + return [ + self.total_loss, self.reconstruction_loss, self.vqvae_loss + ] + + def train_step(self, x): + + with tf.GradientTape() as tape: + # get output + reconstruction = self.vqvae(x) + + # calculate loss - reconstrution normalised to dataset variance + recon_loss = tf.reduce_mean((x-reconstruction)**2) #/ self.train_variance + + total_loss = ( + recon_loss + + sum(self.vqvae.losses) + ) + + # now backpropegate + grad = tape.gradient( + # derivative of total_loss w.r.t all trainable variables + total_loss, self.vqvae.trainable_variables + ) + self.optimizer.apply_gradients( # run gradient descent + zip(grad, self.vqvae.trainable_variables) + ) + + # track losses + self.total_loss.update_state(total_loss) + self.reconstruction_loss.update_state(recon_loss) + self.vqvae_loss.update_state(sum(self.vqvae.losses)) + + # return result + return { + "loss" : self.total_loss.result(), + "reconstruction loss": self.reconstruction_loss.result(), + "vqvae loss": self.vqvae_loss.result() + } + +def __NUMPY__load_image_to_tensor(filepath: str): + """ + loads the image at filepath and returns it as a greyscale numpy array + with values between [0,1] + """ + filepath = filepath.decode("utf-8") + # load into greyscale + img = nib.load(filepath) + + # as np array + data = img.get_fdata().astype(np.float32) + zoom = img.header.get_zooms() + + # Normalize to [0,1] + data = (data - np.min(data)) / (np.max(data) - np.min(data) + 1e-8) + + data_resized = resize( + data, (256, 128), order=1, preserve_range=True, anti_aliasing=True + ).astype(np.float32) + + # expand channels on end to 1 + data = np.expand_dims(data_resized, axis=-1) + + return data # returns as numpy + +def load_image_to_tensor(filepath): + data = tf.numpy_function( # execute and cast to tensor + __NUMPY__load_image_to_tensor, [filepath], tf.float32 + ) + # define the shape + data.set_shape([256, 128, 1]) + print(data) + + return data + + +def get_dataset(folder): + train_files = [ + os.path.join(folder, f) + for f in os.listdir(folder) + if f.endswith(".nii.gz") + ] + + train_data = tf.data.Dataset.from_tensor_slices( + train_files + ) + + train_files = train_data.map(load_image_to_tensor) + + return train_files + +def get_variance(dataset): + """ + Compute variance of all elements in a tf.data.Dataset. + Assumes dataset yields numeric tensors (scalars or arrays). + """ + # First pass: compute mean + count = 0 + total = 0.0 + for x in dataset: + total += tf.reduce_sum(tf.cast(x, tf.float32)) + count += tf.size(x).numpy() + mean = total / count + + # Second pass: compute squared differences + sq_diff_sum = 0.0 + for x in dataset: + sq_diff_sum += tf.reduce_sum((tf.cast(x, tf.float32) - mean) ** 2) + + variance = sq_diff_sum / count + return variance.numpy() + + +def get_image_shape(): + """ + returns the shape of an image in the train dataset + """ + # fetch the shape of the output + for batch in get_dataset(TRAIN_FOLDER): + img_shape = batch.shape + return img_shape + + +def plot_reconstruction(original, reconstruction): + """ + Plots side by side the two greyscale tensors + """ + fig, axes = plt.subplots(1, 2, figsize=(10, 5)) + + axes[0].imshow(original) + axes[1].imshow(reconstruction) + + plt.tight_layout() + plt.savefig("reconstruction.jpg") + + +def main(): + + train_variance = get_variance( + get_dataset(TRAIN_FOLDER) + ) + + train_dataset = get_dataset(TRAIN_FOLDER).batch(128) + + data_augmentation = keras.Sequential([ + layers.RandomRotation(0.05), # 10% rotation + layers.RandomZoom(0.1), # zoom in/out + layers.RandomTranslation(0.05, 0.05), # shift + layers.RandomContrast(0.1), + ]) + + train_dataset.map(lambda x: data_augmentation(x, training=True)) + + img_shape = get_image_shape() + print(f"Image shape: {img_shape}") + + # actuall train the model + + vq_trainer = trainer( + train_variance, LATENT_DIM, CODEBOOK_SIZE, img_shape + ) + + vq_trainer.compile( + optimizer=keras.optimizers.Adam(learning_rate=0.001), + ) + + history = vq_trainer.fit( + train_dataset, + epochs=1, + + ) + + model = vq_trainer.vqvae + + ### Test save/load + weights_path = "trainer.weights.h5" + model.save_weights(weights_path) + model = load_model(weights_path) + + + ####### PLOT RECONSTRUCTION + + for batch in get_dataset(TRAIN_FOLDER): + img = batch # just fetch one image + break + + img_batched = tf.expand_dims(img, axis=0) # add batch dim + img_batched = tf.expand_dims(img_batched, axis=-1) # add channel dim + reconstruction = tf.squeeze(model(img_batched), axis=0) + + plot_reconstruction( + img, reconstruction + ) + + # save loss + with open(HISTORY_PATH, 'w+') as f: + json.dump(history.history['loss'], f) + +def load_model(path): + """ + loads the vqvae weights stored at the path into a new vqvae model + + to save weights for use by this helper. trainer.vqvae.save_weights(path) + """ + + new_vq_vae = vq_vae( + get_image_shape(), + LATENT_DIM, + CODEBOOK_SIZE + ) + + new_vq_vae.compile(optimizer="adam") + new_vq_vae.build(get_image_shape()) + new_vq_vae.load_weights(path) + + return new_vq_vae + +def test_load(): + model = load_model("trained_models/trainer.weights.h5") + model.summary() + +if __name__ == "__main__": + # main() + ####### PLOT RECONSTRUCTION + + model = load_model("trainer.weights.h5") + + i = 0 + for batch in get_dataset(TRAIN_FOLDER): + img = batch # just fetch one image + if i > 25: + break + i += 1 + + img_batched = tf.expand_dims(img, axis=0) # add batch dim + img_batched = tf.expand_dims(img_batched, axis=-1) # add channel dim + reconstruction = tf.squeeze(model(img_batched), axis=0) + + plot_reconstruction( + img, reconstruction + ) \ No newline at end of file