This commit is contained in:
Jordon Brooks 2023-08-23 21:01:01 +01:00
parent db43239b3d
commit 98df94b180
3 changed files with 29 additions and 11 deletions

View file

@ -32,11 +32,11 @@ def load_video_metadata(list_path):
- list: List of dictionaries, each containing video details. - list: List of dictionaries, each containing video details.
""" """
LOGGER.trace(f"Entering: load_video_metadata({list_path})") #LOGGER.trace(f"Entering: load_video_metadata({list_path})")
try: try:
with open(list_path, "r") as json_file: with open(list_path, "r") as json_file:
file = json.load(json_file) file = json.load(json_file)
LOGGER.trace(f"load_video_metadata returning: {file}") #LOGGER.trace(f"load_video_metadata returning: {file}")
return file return file
except FileNotFoundError: except FileNotFoundError:
LOGGER.error(f"Metadata file {list_path} not found.") LOGGER.error(f"Metadata file {list_path} not found.")

View file

@ -66,14 +66,21 @@ class ImageLoggingCallback(Callback):
return np.stack(converted, axis=0) return np.stack(converted, axis=0)
def on_epoch_end(self, epoch, logs=None): def on_epoch_end(self, epoch, logs=None):
itter = iter(self.validation_dataset) random_idx = np.random.randint(0, MAX_FRAMES - 1)
random_idx = np.random.randint(0, BATCH_SIZE)
validation_data = None
dataset_size = 0 # to keep track of the dataset size
# Loop through the dataset until the chosen index # Loop through the dataset until the chosen index
for i, data in enumerate(self.validation_dataset): for i, data in enumerate(self.validation_dataset):
if i == random_idx: if i == random_idx:
validation_data = data validation_data = data
break break
dataset_size += 1
if validation_data is None:
print(f"Random index exceeds validation dataset size: {dataset_size}. Using last available data.")
validation_data = data # assigning the last data seen in the loop to validation_data
batch_input_images, batch_gt_labels = validation_data batch_input_images, batch_gt_labels = validation_data
@ -83,6 +90,10 @@ class ImageLoggingCallback(Callback):
reconstructed_frame = MODEL.predict(validation_data[0]) reconstructed_frame = MODEL.predict(validation_data[0])
reconstructed_frame = np.clip(reconstructed_frame * 255.0, 0, 255).astype(np.uint8) reconstructed_frame = np.clip(reconstructed_frame * 255.0, 0, 255).astype(np.uint8)
# Save the reconstructed frame to the specified folder
reconstructed_path = os.path.join(self.log_dir, f"epoch_{epoch}.png")
cv2.imwrite(reconstructed_path, reconstructed_frame[0]) # Saving only the first image as an example
batch_input_images = self.convert_images(batch_input_images) batch_input_images = self.convert_images(batch_input_images)
batch_gt_labels = self.convert_images(batch_gt_labels) batch_gt_labels = self.convert_images(batch_gt_labels)
reconstructed_frame = self.convert_images(reconstructed_frame) reconstructed_frame = self.convert_images(reconstructed_frame)

View file

@ -7,7 +7,7 @@ import numpy as np
import tensorflow as tf import tensorflow as tf
from tensorflow.keras import layers from tensorflow.keras import layers
from featureExtraction import preprocess_frame, scale_crf, scale_speed_preset from featureExtraction import preprocess_frame, scale_crf, scale_speed_preset
from globalVars import HEIGHT, LOGGER, NUM_COLOUR_CHANNELS, NUM_PRESET_SPEEDS, PRESET_SPEED_CATEGORIES, WIDTH from globalVars import LOGGER, NUM_COLOUR_CHANNELS, PRESET_SPEED_CATEGORIES
#from tensorflow.keras.mixed_precision import Policy #from tensorflow.keras.mixed_precision import Policy
@ -107,13 +107,20 @@ class VideoCompressionModel(tf.keras.Model):
layers.Conv2DTranspose(64, (3, 3), dilation_rate=2, padding='same'), # Using Dilated Convolution layers.Conv2DTranspose(64, (3, 3), dilation_rate=2, padding='same'), # Using Dilated Convolution
#layers.BatchNormalization(), #layers.BatchNormalization(),
layers.LeakyReLU(), layers.LeakyReLU(),
# Use Sub-Pixel Convolutional Layer # First Sub-Pixel Convolutional Layer
layers.Conv2DTranspose(NUM_COLOUR_CHANNELS * 16, (3, 3), padding='same'), # 16 times the number of color channels layers.Conv2DTranspose(NUM_COLOUR_CHANNELS * 4, (3, 3), padding='same'), # 4 times the number of color channels for first upscaling by 2
layers.Lambda(lambda x: tf.nn.depth_to_space(x, block_size=4)) # Sub-Pixel Convolutional Layer with block_size=4 layers.Lambda(lambda x: tf.nn.depth_to_space(x, block_size=2)), # Sub-Pixel Convolutional Layer with block_size=2
# Second Sub-Pixel Convolutional Layer
layers.Conv2DTranspose(NUM_COLOUR_CHANNELS * 4, (3, 3), padding='same'), # 4 times the number of color channels for second upscaling by 2
layers.Lambda(lambda x: tf.nn.depth_to_space(x, block_size=2)), # Sub-Pixel Convolutional Layer with block_size=2
layers.Activation('sigmoid')
]) ])
def call(self, inputs): def call(self, inputs):
#print(f"Input: {inputs.shape}")
encoded = self.encoder(inputs) encoded = self.encoder(inputs)
return self.decoder(encoded) #print(f"encoded: {encoded.shape}")
decoded = self.decoder(encoded)
#print(f"decoded: {decoded.shape}")
return decoded