BasicSR
1import importlib
2from copy import deepcopy
3from os import path as osp
4
5from basicsr.utils import get_root_logger, scandir
6from basicsr.utils.registry import LOSS_REGISTRY
7from .gan_loss import g_path_regularize, gradient_penalty_loss, r1_penalty
8
9__all__ = ['build_loss', 'gradient_penalty_loss', 'r1_penalty', 'g_path_regularize']
10
11# automatically scan and import loss modules for registry
12# scan all the files under the 'losses' folder and collect files ending with '_loss.py'
13loss_folder = osp.dirname(osp.abspath(__file__))
14loss_filenames = [osp.splitext(osp.basename(v))[0] for v in scandir(loss_folder) if v.endswith('_loss.py')]
15# import all the loss modules
16_model_modules = [importlib.import_module(f'basicsr.losses.{file_name}') for file_name in loss_filenames]
17
18
19def build_loss(opt):
20"""Build loss from options.
21
22Args:
23opt (dict): Configuration. It must contain:
24type (str): Model type.
25"""
26opt = deepcopy(opt)
27loss_type = opt.pop('type')
28loss = LOSS_REGISTRY.get(loss_type)(**opt)
29logger = get_root_logger()
30logger.info(f'Loss [{loss.__class__.__name__}] is created.')
31return loss
32