Ejemplo n.º 1
0
 def __init__(self, config: dict) -> None:
     logger.debug("Initializing %s", self.__class__.__name__)
     self._config = config
     self._loss_dict = dict(gmsd=losses.GMSDLoss(),
                            l_inf_norm=losses.LInfNorm(),
                            laploss=losses.LaplacianPyramidLoss(),
                            logcosh=k_losses.logcosh,
                            ms_ssim=losses.MSSIMLoss(),
                            mae=k_losses.mean_absolute_error,
                            mse=k_losses.mean_squared_error,
                            pixel_gradient_diff=losses.GradientLoss(),
                            ssim=losses.DSSIMObjective(),
                            smooth_loss=losses.GeneralizedLoss(),)
     self._mask_channels = self._get_mask_channels()
     self._inputs: List[keras.layers.Layer] = []
     self._names: List[str] = []
     self._funcs: Dict[str, Callable] = {}
     logger.debug("Initialized: %s", self.__class__.__name__)
Ejemplo n.º 2
0
from keras import backend as K
from keras import losses as k_losses
from keras.layers import Conv2D
from keras.models import Sequential
from keras.optimizers import Adam

from lib.model import losses
from lib.utils import get_backend

_PARAMS = [
    (losses.GeneralizedLoss(), (2, 16, 16)),
    (losses.GradientLoss(), (2, 16, 16)),
    # TODO Make sure these output dimensions are correct
    (losses.GMSDLoss(), (2, 1, 1)),
    # TODO Make sure these output dimensions are correct
    (losses.LInfNorm(), (2, 1, 1))
]
_IDS = ["GeneralizedLoss", "GradientLoss", "GMSDLoss", "LInfNorm"]
_IDS = ["{}[{}]".format(loss, get_backend().upper()) for loss in _IDS]


@pytest.mark.parametrize(["loss_func", "output_shape"], _PARAMS, ids=_IDS)
def test_loss_output(loss_func, output_shape):
    """ Basic shape tests for loss functions. """
    if get_backend() == "amd" and isinstance(loss_func, losses.GMSDLoss):
        pytest.skip("GMSD Loss is not currently compatible with PlaidML")
    y_a = K.variable(np.random.random((2, 16, 16, 3)))
    y_b = K.variable(np.random.random((2, 16, 16, 3)))
    objective_output = loss_func(y_a, y_b)
    if get_backend() == "amd":
        assert K.eval(objective_output).shape == output_shape
Ejemplo n.º 3
0
from lib.model import losses
from lib.utils import get_backend

if get_backend() == "amd":
    from keras import backend as K, losses as k_losses
else:
    # Ignore linting errors from Tensorflow's thoroughly broken import system
    from tensorflow.keras import backend as K, losses as k_losses  # pylint:disable=import-error

_PARAMS = [(losses.GeneralizedLoss(), (2, 16, 16)),
           (losses.GradientLoss(), (2, 16, 16)),
           # TODO Make sure these output dimensions are correct
           (losses.GMSDLoss(), (2, 1, 1)),
           # TODO Make sure these output dimensions are correct
           (losses.LInfNorm(), (2, 1, 1))]
_IDS = ["GeneralizedLoss", "GradientLoss", "GMSDLoss", "LInfNorm"]
_IDS = [f"{loss}[{get_backend().upper()}]" for loss in _IDS]


@pytest.mark.parametrize(["loss_func", "output_shape"], _PARAMS, ids=_IDS)
def test_loss_output(loss_func, output_shape):
    """ Basic shape tests for loss functions. """
    if get_backend() == "amd" and isinstance(loss_func, losses.GMSDLoss):
        pytest.skip("GMSD Loss is not currently compatible with PlaidML")
    y_a = K.variable(np.random.random((2, 16, 16, 3)))
    y_b = K.variable(np.random.random((2, 16, 16, 3)))
    objective_output = loss_func(y_a, y_b)
    if get_backend() == "amd":
        assert K.eval(objective_output).shape == output_shape
    else:
Ejemplo n.º 4
0
from keras import backend as K
from keras import losses as k_losses
from keras.layers import Conv2D
from keras.models import Sequential
from keras.optimizers import Adam

from lib.model import losses
from lib.utils import get_backend

_PARAMS = [
    (losses.GeneralizedLoss(), (2, 16, 16)),
    (losses.GradientLoss(), (2, 16, 16)),
    # TODO Make sure these output dimensions are correct
    (losses.GMSDLoss(), (2, 1, 1)),
    # TODO Make sure these output dimensions are correct
    (losses.LInfNorm(), (2, 1, 1))
]
_IDS = ["GeneralizedLoss", "GradientLoss", "GMSDLoss", "LInfNorm"]
_IDS = ["{}[{}]".format(loss, get_backend().upper()) for loss in _IDS]


@pytest.mark.parametrize(["loss_func", "output_shape"], _PARAMS, ids=_IDS)
def test_loss_output(loss_func, output_shape):
    """ Basic shape tests for loss functions. """
    if get_backend() == "amd" and isinstance(loss_func, losses.GMSDLoss):
        pytest.skip("GMSD Loss is not currently compatible with PlaidML")
    y_a = K.variable(np.random.random((2, 16, 16, 3)))
    y_b = K.variable(np.random.random((2, 16, 16, 3)))
    objective_output = loss_func(y_a, y_b)
    if get_backend() == "amd":
        assert K.eval(objective_output).shape == output_shape