{"record":{"id":"81c1de0e67ad4028","repo":"open-mmlab/mmdetection","slug":"there-is-not-post-norm-in-name","errorCode":null,"errorMessage":"There is not post_norm in {name}","messagePattern":"There is not post_norm in (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mmdet/models/layers/transformer/deformable_detr_layers.py","lineNumber":132,"sourceCode":"            reference_points_list.append(ref)\n        reference_points = torch.cat(reference_points_list, 1)\n        # [bs, sum(hw), num_level, 2]\n        reference_points = reference_points[:, :, None] * valid_ratios[:, None]\n        return reference_points\n\n\nclass DeformableDetrTransformerDecoder(DetrTransformerDecoder):\n    \"\"\"Transformer Decoder of Deformable DETR.\"\"\"\n\n    def _init_layers(self) -> None:\n        \"\"\"Initialize decoder layers.\"\"\"\n        self.layers = ModuleList([\n            DeformableDetrTransformerDecoderLayer(**self.layer_cfg)\n            for _ in range(self.num_layers)\n        ])\n        self.embed_dims = self.layers[0].embed_dims\n        if self.post_norm_cfg is not None:\n            raise ValueError('There is not post_norm in '\n                             f'{self._get_name()}')\n\n    def forward(self,\n                query: Tensor,\n                query_pos: Tensor,\n                value: Tensor,\n                key_padding_mask: Tensor,\n                reference_points: Tensor,\n                spatial_shapes: Tensor,\n                level_start_index: Tensor,\n                valid_ratios: Tensor,\n                reg_branches: Optional[nn.Module] = None,\n                **kwargs) -> Tuple[Tensor]:\n        \"\"\"Forward function of Transformer decoder.\n\n        Args:\n            query (Tensor): The input queries, has shape (bs, num_queries,\n                dim).","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/open-mmlab/mmdetection/blob/cfd5d3a985b0249de009b67d04f37263e11cdf3d/mmdet/models/layers/transformer/deformable_detr_layers.py#L114-L150","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Set post_norm_cfg=None in the deformable decoder transformer config","Check config inheritance (_base_) for a post_norm_cfg key that leaks in and override it"],"exampleFix":"# before\npost_norm_cfg=dict(type='LN')\n# after\npost_norm_cfg=None","handlingStrategy":"validation","validationCode":"assert cfg.get('post_norm_cfg', None) is None, 'DeformableDetr decoder forbids post_norm_cfg'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Diff inherited config dicts for post_norm_cfg before building","Use print_cfg to inspect the resolved config"],"tags":["mmdet","deformable-detr","transformer","config"],"backgroundTag":"invalid-config-value","analyzedSha":"cfd5d3a985b0249de009b67d04f37263e11cdf3d","analyzedAt":"2026-08-27T20:54:20.183Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}