facebookresearch/detectron2 · error · ValueError

Conflicting overrides for 'bias'

Error message

Conflicting overrides for 'bias'

What it means

get_default_optimizer_params already derives bias overrides from bias_lr_factor/weight_decay_bias; passing an explicit 'bias' entry in overrides conflicts with the computed one, so the function refuses to guess which wins.

Solutions

  1. Remove the 'bias' key from overrides and let bias_lr_factor/weight_decay_bias control it
  2. Or set bias_lr_factor=None and weight_decay_bias=None and keep the explicit overrides['bias']

Example fix

# before
build_optimizer(cfg, model, overrides={'bias': {'lr': 0.02}}, bias_lr_factor=2.0)
# after
build_optimizer(cfg, model, overrides={'bias': {'lr': 0.02}}, bias_lr_factor=None)
Defensive patterns

Strategy: validation

Validate before calling

if 'bias' in overrides:
    assert bias_lr_factor in (None, 1.0) and weight_decay_bias is None, "Conflicting overrides for 'bias'"

Prevention

When it happens

Trigger: Calling build_optimizer with both an overrides dict containing key 'bias' and a non-default bias_lr_factor or weight_decay_bias.

Common situations: Custom build_optimizer that adds overrides={'bias': {...}} while bias_lr_factor/weight_decay_bias are still active from config.

Related errors


AI-assisted analysis of facebookresearch/detectron2@a2f4a8771a (2026-08-27). Data as JSON: /api/errors/6b4a8d3882937a76. Report an issue: GitHub.

Appendix: source

Thrown at detectron2/solver/build.py:198

    if overrides is None:
        overrides = {}
    defaults = {}
    if base_lr is not None:
        defaults["lr"] = base_lr
    if weight_decay is not None:
        defaults["weight_decay"] = weight_decay
    bias_overrides = {}
    if bias_lr_factor is not None and bias_lr_factor != 1.0:
        # NOTE: unlike Detectron v1, we now by default make bias hyperparameters
        # exactly the same as regular weights.
        if base_lr is None:
            raise ValueError("bias_lr_factor requires base_lr")
        bias_overrides["lr"] = base_lr * bias_lr_factor
    if weight_decay_bias is not None:
        bias_overrides["weight_decay"] = weight_decay_bias
    if len(bias_overrides):
        if "bias" in overrides:
            raise ValueError("Conflicting overrides for 'bias'")
        overrides["bias"] = bias_overrides
    if lr_factor_func is not None:
        if base_lr is None:
            raise ValueError("lr_factor_func requires base_lr")
    norm_module_types = (
        torch.nn.BatchNorm1d,
        torch.nn.BatchNorm2d,
        torch.nn.BatchNorm3d,
        torch.nn.SyncBatchNorm,
        # NaiveSyncBatchNorm inherits from BatchNorm2d
        torch.nn.GroupNorm,
        torch.nn.InstanceNorm1d,
        torch.nn.InstanceNorm2d,
        torch.nn.InstanceNorm3d,
        torch.nn.LayerNorm,
        torch.nn.LocalResponseNorm,
    )
    params: List[Dict[str, Any]] = []

View on GitHub (pinned to a2f4a8771a)