open-mmlab/mmdetection · error · ValueError

There is not post_norm in {name}

Error message

There is not post_norm in {name}

What it means

DeformableDetrTransformerDecoder raises ValueError if post_norm_cfg is not None. Deformable DETR's decoder applies norm per-layer and does not support an extra post-norm, so the config explicitly forbids it.

Source

Thrown at mmdet/models/layers/transformer/deformable_detr_layers.py:132

            reference_points_list.append(ref)
        reference_points = torch.cat(reference_points_list, 1)
        # [bs, sum(hw), num_level, 2]
        reference_points = reference_points[:, :, None] * valid_ratios[:, None]
        return reference_points


class DeformableDetrTransformerDecoder(DetrTransformerDecoder):
    """Transformer Decoder of Deformable DETR."""

    def _init_layers(self) -> None:
        """Initialize decoder layers."""
        self.layers = ModuleList([
            DeformableDetrTransformerDecoderLayer(**self.layer_cfg)
            for _ in range(self.num_layers)
        ])
        self.embed_dims = self.layers[0].embed_dims
        if self.post_norm_cfg is not None:
            raise ValueError('There is not post_norm in '
                             f'{self._get_name()}')

    def forward(self,
                query: Tensor,
                query_pos: Tensor,
                value: Tensor,
                key_padding_mask: Tensor,
                reference_points: Tensor,
                spatial_shapes: Tensor,
                level_start_index: Tensor,
                valid_ratios: Tensor,
                reg_branches: Optional[nn.Module] = None,
                **kwargs) -> Tuple[Tensor]:
        """Forward function of Transformer decoder.

        Args:
            query (Tensor): The input queries, has shape (bs, num_queries,
                dim).

View on GitHub (pinned to cfd5d3a985)

Solutions

  1. Set post_norm_cfg=None in the deformable decoder transformer config
  2. Check config inheritance (_base_) for a post_norm_cfg key that leaks in and override it

Example fix

# before
post_norm_cfg=dict(type='LN')
# after
post_norm_cfg=None
Defensive patterns

Strategy: validation

Validate before calling

assert cfg.get('post_norm_cfg', None) is None, 'DeformableDetr decoder forbids post_norm_cfg'

Prevention

When it happens

Trigger: Building a DeformableDetrTransformerDecoder with a config that includes a post_norm_cfg entry (e.g. dict(type='LN')) instead of None/setting it to None.

Common situations: Porting DETR or DAB-DETR configs (which do use post_norm) into a Deformable DETR pipeline; config inheritance that leaves post_norm_cfg set from a base config.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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