detectron2.solver

detectron2.solver.build_lr_scheduler(cfg: detectron2.config.CfgNode, optimizer: torch.optim.optimizer.Optimizer) → torch.optim.lr_scheduler._LRScheduler[源代码]

从配置中构建 LR 调度器。

detectron2.solver.build_optimizer(cfg: detectron2.config.CfgNode, model: torch.nn.Module)torch.optim.optimizer.Optimizer[源代码]

从配置中构建优化器。

detectron2.solver.get_default_optimizer_params(model: torch.nn.Module, base_lr: Optional[float] = None, weight_decay: Optional[float] = None, weight_decay_norm: Optional[float] = None, bias_lr_factor: Optional[float] = 1.0, weight_decay_bias: Optional[float] = None, lr_factor_func: Optional[Callable] = None, overrides: Optional[Dict[str, Dict[str, float]]] = None) → List[Dict[str, Any]][源代码]

获取优化器的默认参数列表,支持几种类型的覆盖。如果没有覆盖需要,这相当于 model.parameters()

参数
  • base_lr – 默认情况下每个组的 lr。可以省略以使用优化器中的一个。

  • weight_decay – 默认情况下每个组的权重衰减。可以省略以使用优化器中的一个。

  • weight_decay_norm – 覆盖归一化层参数的权重衰减

  • bias_lr_factor – 偏差参数的 lr 乘数。

  • weight_decay_bias – 覆盖偏差参数的权重衰减。

  • lr_factor_func – 通过将参数名称映射到相应的 lr 衰减率来计算 lr 衰减率的函数。请注意,设置此选项需要同时设置 base_lr

  • overrides – 如果不是 None,则为具有给定名称的模块参数提供优化器超参数(LR、权重衰减)的值;例如 {"embedding": {"lr": 0.01, "weight_decay": 0.1}} 将为所有名为 embedding 的模块参数设置 LR 和权重衰减值。

对于常见的检测模型,weight_decay_norm 是唯一需要设置的选项。bias_lr_factor,weight_decay_bias 是 Detectron1 中的遗留设置,未发现有用。

示例

torch.optim.SGD(get_default_optimizer_params(model, weight_decay_norm=0),
               lr=0.01, weight_decay=1e-4, momentum=0.9)
class detectron2.solver.LRMultiplier(optimizer: torch.optim.optimizer.Optimizer, multiplier: fvcore.common.param_scheduler.ParamScheduler, max_iter: int, last_iter: int = - 1)[源代码]

基类:torch.optim.lr_scheduler._LRScheduler

一个 LRScheduler,它使用 fvcore ParamScheduler 来乘以优化器中每个参数的学习率。每一步,每个参数的学习率都变成其初始值乘以给定 ParamScheduler 的输出。

每个参数的绝对学习率值可能不同。只要它们之间的相对比例在训练期间不改变,就可以使用此调度器。

示例

LRMultiplier(
    opt,
    WarmupParamScheduler(
        MultiStepParamScheduler(
            [1, 0.1, 0.01],
            milestones=[60000, 80000],
            num_updates=90000,
        ), 0.001, 100 / 90000
    ),
    max_iter=90000
)
__init__(optimizer: torch.optim.optimizer.Optimizer, multiplier: fvcore.common.param_scheduler.ParamScheduler, max_iter: int, last_iter: int = - 1)[源代码]
参数
  • optimizer – 见 torch.optim.lr_scheduler.LRSchedulerlast_iterlast_epoch 相同。

  • last_iter – 见 torch.optim.lr_scheduler.LRSchedulerlast_iterlast_epoch 相同。

  • multiplier – 一个 fvcore ParamScheduler,它定义了优化器每个 LR 的乘数

  • max_iter – 训练迭代的总数

state_dict()[源代码]
get_lr() → List[float][源代码]
detectron2.solver.LRScheduler

torch.optim.lr_scheduler._LRScheduler 的别名

class detectron2.solver.WarmupParamScheduler(scheduler: fvcore.common.param_scheduler.ParamScheduler, warmup_factor: float, warmup_length: float, warmup_method: str = 'linear', rescale_interval: bool = False)[源代码]

基类:fvcore.common.param_scheduler.CompositeParamScheduler

为另一个调度器添加初始预热阶段。

__init__(scheduler: fvcore.common.param_scheduler.ParamScheduler, warmup_factor: float, warmup_length: float, warmup_method: str = 'linear', rescale_interval: bool = False)[source]
参数
  • scheduler – 在此调度程序开始之前将添加预热

  • warmup_factor – 相对于 scheduler 的初始值的因子,例如 0.001

  • warmup_length – 预热步骤相对于整个训练的相对长度(在 [0, 1] 中),例如 0.01

  • warmup_method – “linear” 或 “constant” 之一

  • rescale_interval – 是否在预热后重新调整调度程序的间隔