first commit
This commit is contained in:
41
render/renderutils/loss.py
Normal file
41
render/renderutils/loss.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
#
|
||||
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
|
||||
# property and proprietary rights in and to this material, related
|
||||
# documentation and any modifications thereto. Any use, reproduction,
|
||||
# disclosure or distribution of this material and related documentation
|
||||
# without an express license agreement from NVIDIA CORPORATION or
|
||||
# its affiliates is strictly prohibited.
|
||||
|
||||
import torch
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# HDR image losses
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def _tonemap_srgb(f):
|
||||
return torch.where(f > 0.0031308, torch.pow(torch.clamp(f, min=0.0031308), 1.0/2.4)*1.055 - 0.055, 12.92*f)
|
||||
|
||||
def _SMAPE(img, target, eps=0.01):
|
||||
nom = torch.abs(img - target)
|
||||
denom = torch.abs(img) + torch.abs(target) + 0.01
|
||||
return torch.mean(nom / denom)
|
||||
|
||||
def _RELMSE(img, target, eps=0.1):
|
||||
nom = (img - target) * (img - target)
|
||||
denom = img * img + target * target + 0.1
|
||||
return torch.mean(nom / denom)
|
||||
|
||||
def image_loss_fn(img, target, loss, tonemapper):
|
||||
if tonemapper == 'log_srgb':
|
||||
img = _tonemap_srgb(torch.log(torch.clamp(img, min=0, max=65535) + 1))
|
||||
target = _tonemap_srgb(torch.log(torch.clamp(target, min=0, max=65535) + 1))
|
||||
|
||||
if loss == 'mse':
|
||||
return torch.nn.functional.mse_loss(img, target)
|
||||
elif loss == 'smape':
|
||||
return _SMAPE(img, target)
|
||||
elif loss == 'relmse':
|
||||
return _RELMSE(img, target)
|
||||
else:
|
||||
return torch.nn.functional.l1_loss(img, target)
|
||||
Reference in New Issue
Block a user