Spaces:
Runtime error
Runtime error
| import cv2 | |
| from apex.optimizers import FusedAdam, FusedSGD | |
| from timm.optim import AdamW | |
| from torch import optim | |
| from torch.optim import lr_scheduler | |
| from torch.optim.rmsprop import RMSprop | |
| from torch.optim.adamw import AdamW | |
| from torch.optim.lr_scheduler import MultiStepLR, CyclicLR | |
| from training.tools.schedulers import ExponentialLRScheduler, PolyLR, LRStepScheduler | |
| cv2.ocl.setUseOpenCL(False) | |
| cv2.setNumThreads(0) | |
| class AverageMeter(object): | |
| """Computes and stores the average and current value""" | |
| def __init__(self): | |
| self.reset() | |
| def reset(self): | |
| self.val = 0 | |
| self.avg = 0 | |
| self.sum = 0 | |
| self.count = 0 | |
| def update(self, val, n=1): | |
| self.val = val | |
| self.sum += val * n | |
| self.count += n | |
| self.avg = self.sum / self.count | |
| def create_optimizer(optimizer_config, model, master_params=None): | |
| """Creates optimizer and schedule from configuration | |
| Parameters | |
| ---------- | |
| optimizer_config : dict | |
| Dictionary containing the configuration options for the optimizer. | |
| model : Model | |
| The network model. | |
| Returns | |
| ------- | |
| optimizer : Optimizer | |
| The optimizer. | |
| scheduler : LRScheduler | |
| The learning rate scheduler. | |
| """ | |
| if optimizer_config.get("classifier_lr", -1) != -1: | |
| # Separate classifier parameters from all others | |
| net_params = [] | |
| classifier_params = [] | |
| for k, v in model.named_parameters(): | |
| if not v.requires_grad: | |
| continue | |
| if k.find("encoder") != -1: | |
| net_params.append(v) | |
| else: | |
| classifier_params.append(v) | |
| params = [ | |
| {"params": net_params}, | |
| {"params": classifier_params, "lr": optimizer_config["classifier_lr"]}, | |
| ] | |
| else: | |
| if master_params: | |
| params = master_params | |
| else: | |
| params = model.parameters() | |
| if optimizer_config["type"] == "SGD": | |
| optimizer = optim.SGD(params, | |
| lr=optimizer_config["learning_rate"], | |
| momentum=optimizer_config["momentum"], | |
| weight_decay=optimizer_config["weight_decay"], | |
| nesterov=optimizer_config["nesterov"]) | |
| elif optimizer_config["type"] == "FusedSGD": | |
| optimizer = FusedSGD(params, | |
| lr=optimizer_config["learning_rate"], | |
| momentum=optimizer_config["momentum"], | |
| weight_decay=optimizer_config["weight_decay"], | |
| nesterov=optimizer_config["nesterov"]) | |
| elif optimizer_config["type"] == "Adam": | |
| optimizer = optim.Adam(params, | |
| lr=optimizer_config["learning_rate"], | |
| weight_decay=optimizer_config["weight_decay"]) | |
| elif optimizer_config["type"] == "FusedAdam": | |
| optimizer = FusedAdam(params, | |
| lr=optimizer_config["learning_rate"], | |
| weight_decay=optimizer_config["weight_decay"]) | |
| elif optimizer_config["type"] == "AdamW": | |
| optimizer = AdamW(params, | |
| lr=optimizer_config["learning_rate"], | |
| weight_decay=optimizer_config["weight_decay"]) | |
| elif optimizer_config["type"] == "RmsProp": | |
| optimizer = RMSprop(params, | |
| lr=optimizer_config["learning_rate"], | |
| weight_decay=optimizer_config["weight_decay"]) | |
| else: | |
| raise KeyError("unrecognized optimizer {}".format(optimizer_config["type"])) | |
| if optimizer_config["schedule"]["type"] == "step": | |
| scheduler = LRStepScheduler(optimizer, **optimizer_config["schedule"]["params"]) | |
| elif optimizer_config["schedule"]["type"] == "clr": | |
| scheduler = CyclicLR(optimizer, **optimizer_config["schedule"]["params"]) | |
| elif optimizer_config["schedule"]["type"] == "multistep": | |
| scheduler = MultiStepLR(optimizer, **optimizer_config["schedule"]["params"]) | |
| elif optimizer_config["schedule"]["type"] == "exponential": | |
| scheduler = ExponentialLRScheduler(optimizer, **optimizer_config["schedule"]["params"]) | |
| elif optimizer_config["schedule"]["type"] == "poly": | |
| scheduler = PolyLR(optimizer, **optimizer_config["schedule"]["params"]) | |
| elif optimizer_config["schedule"]["type"] == "constant": | |
| scheduler = lr_scheduler.LambdaLR(optimizer, lambda epoch: 1.0) | |
| elif optimizer_config["schedule"]["type"] == "linear": | |
| def linear_lr(it): | |
| return it * optimizer_config["schedule"]["params"]["alpha"] + optimizer_config["schedule"]["params"]["beta"] | |
| scheduler = lr_scheduler.LambdaLR(optimizer, linear_lr) | |
| return optimizer, scheduler | |