open-mmlab/mmdetection · info

DeprecationWarning: anchor_generator is deprecated, please u

Error message

DeprecationWarning: anchor_generator is deprecated, please use "prior_generator" instead

What it means

The AnchorHead.anchor_generator property is a deprecated alias for prior_generator. mmdet renamed AnchorGenerator usage to the generic PriorGenerator API; accessing the old property warns.

Source

Thrown at mmdet/models/dense_heads/anchor_head.py:115

        self.prior_generator = TASK_UTILS.build(anchor_generator)

        # Usually the numbers of anchors for each level are the same
        # except SSD detectors. So it is an int in the most dense
        # heads but a list of int in SSDHead
        self.num_base_priors = self.prior_generator.num_base_priors[0]
        self._init_layers()

    @property
    def num_anchors(self) -> int:
        warnings.warn('DeprecationWarning: `num_anchors` is deprecated, '
                      'for consistency or also use '
                      '`num_base_priors` instead')
        return self.prior_generator.num_base_priors[0]

    @property
    def anchor_generator(self) -> AnchorGenerator:
        warnings.warn('DeprecationWarning: anchor_generator is deprecated, '
                      'please use "prior_generator" instead')
        return self.prior_generator

    def _init_layers(self) -> None:
        """Initialize layers of the head."""
        self.conv_cls = nn.Conv2d(self.in_channels,
                                  self.num_base_priors * self.cls_out_channels,
                                  1)
        reg_dim = self.bbox_coder.encode_size
        self.conv_reg = nn.Conv2d(self.in_channels,
                                  self.num_base_priors * reg_dim, 1)

    def forward_single(self, x: Tensor) -> Tuple[Tensor, Tensor]:
        """Forward feature of a single scale level.

        Args:
            x (Tensor): Features of a single scale level.

View on GitHub (pinned to cfd5d3a985)

Solutions

  1. Replace head.anchor_generator with head.prior_generator
  2. Suppress the warning if the access comes from an unmodified third-party module

Example fix

# before
gen = self.rpn_head.anchor_generator
# after
gen = self.rpn_head.prior_generator
Defensive patterns

Strategy: validation

Validate before calling

gen = head.prior_generator if hasattr(head, 'prior_generator') else head.anchor_generator

Type guard

def get_prior_generator(head):
    return getattr(head, 'prior_generator', None) or head.anchor_generator

Prevention

When it happens

Trigger: Accessing head.anchor_generator in custom code, e.g. to get anchors per level or grid shapes.

Common situations: Custom test pipelines or hooks ported from mmdet 2.x that call anchor_generator; external repos like old YOLO/SSD extensions.

Related errors


AI-assisted analysis of open-mmlab/mmdetection@cfd5d3a985 (2026-08-27). Data as JSON: /api/errors/b48f206da743a8df. Report an issue: GitHub.