basicsr.losses.loss_util

basicsr.losses.loss_util.get_local_weights(residual, ksize)[source]

Get local weights for generating the artifact map of LDL.

It is only called by the get_refined_artifact_map function.

Parameters:
  • residual (Tensor) – Residual between predicted and ground truth images.

  • ksize (Int) – size of the local window.

Returns:

weight for each pixel to be discriminated as an artifact pixel

Return type:

Tensor

basicsr.losses.loss_util.get_refined_artifact_map(img_gt, img_output, img_ema, ksize)[source]

Calculate the artifact map of LDL (Details or Artifacts: A Locally Discriminative Learning Approach to Realistic Image Super-Resolution. In CVPR 2022)

Parameters:
  • img_gt (Tensor) – ground truth images.

  • img_output (Tensor) – output images given by the optimizing model.

  • img_ema (Tensor) – output images given by the ema model.

  • ksize (Int) – size of the local window.

Returns:

weight for each pixel to be discriminated as an artifact pixel (calculated based on both local and global observations).

Return type:

overall_weight

basicsr.losses.loss_util.reduce_loss(loss, reduction)[source]

Reduce loss as specified.

Parameters:
  • loss (Tensor) – Elementwise loss tensor.

  • reduction (str) – Options are ‘none’, ‘mean’ and ‘sum’.

Returns:

Reduced loss tensor.

Return type:

Tensor

basicsr.losses.loss_util.weight_reduce_loss(loss, weight=None, reduction='mean')[source]

Apply element-wise weight and reduce loss.

Parameters:
  • loss (Tensor) – Element-wise loss.

  • weight (Tensor) – Element-wise weights. Default: None.

  • reduction (str) – Same as built-in losses of PyTorch. Options are ‘none’, ‘mean’ and ‘sum’. Default: ‘mean’.

Returns:

Loss values.

Return type:

Tensor

basicsr.losses.loss_util.weighted_loss(loss_func)[source]

Create a weighted version of a given loss function.

To use this decorator, the loss function must have the signature like loss_func(pred, target, **kwargs). The function only needs to compute element-wise loss without any reduction. This decorator will add weight and reduction arguments to the function. The decorated function will have the signature like loss_func(pred, target, weight=None, reduction=’mean’, **kwargs).

Example:

>>> import torch
>>> @weighted_loss
>>> def l1_loss(pred, target):
>>>     return (pred - target).abs()
>>> pred = torch.Tensor([0, 2, 3])
>>> target = torch.Tensor([1, 1, 1])
>>> weight = torch.Tensor([1, 0, 1])
>>> l1_loss(pred, target)
tensor(1.3333)
>>> l1_loss(pred, target, weight)
tensor(1.5000)
>>> l1_loss(pred, target, reduction='none')
tensor([1., 1., 2.])
>>> l1_loss(pred, target, weight, reduction='sum')
tensor(3.)