Dan Vancea
Added architectures
b63f3bc
Raw
History Blame Contribute Delete
1.14 kB
import keras
import tensorflow as tf
from keras import layers
from .average import Upscaler
@keras.saving.register_keras_serializable()
class CNNUpscaler(keras.Model):
"""Convolutional Neural Network for image upscaling. It's just a simple model: upscales first, then applies convolution corrections."""
def __init__(self, up_ratio: float, name="cnnupscaler", **kwargs):
super().__init__(name=name, **kwargs)
self.up_ratio = up_ratio
self.upscaler = Upscaler(up_ratio)
self.conv1 = layers.Conv2D(64, (3, 3), activation="relu", padding="same")
self.conv2 = layers.Conv2D(32, (3, 3), activation="relu", padding="same")
self.conv3 = layers.Conv2D(3, (3, 3), padding="same")
def call(self, inputs):
# Upscale first
x_up = self.upscaler(inputs)
# Calculate the correction factor
x = self.conv1(x_up)
x = self.conv2(x)
correction = self.conv3(x)
return x_up + correction
def get_config(self):
config = super().get_config()
config.update({"up_ratio": self.up_ratio})
return config