open-mmlab/mmdetection · error · NotImplementedError

Unknown query_scale_type: {}

Error message

Unknown query_scale_type: {}

What it means

DABDetrTransformerDecoder's _init_layers only supports query_scale_type values 'cond_elewise', 'cond_scalar', and 'fix_elewise'. Any other value raises NotImplementedError at construction time, before any training occurs.

Source

Thrown at mmdet/models/layers/transformer/dab_detr_layers.py:150

        ]

        self.layers = ModuleList([
            DABDetrTransformerDecoderLayer(**self.layer_cfg)
            for _ in range(self.num_layers)
        ])

        embed_dims = self.layers[0].embed_dims
        self.embed_dims = embed_dims

        self.post_norm = build_norm_layer(self.post_norm_cfg, embed_dims)[1]
        if self.query_scale_type == 'cond_elewise':
            self.query_scale = MLP(embed_dims, embed_dims, embed_dims, 2)
        elif self.query_scale_type == 'cond_scalar':
            self.query_scale = MLP(embed_dims, embed_dims, 1, 2)
        elif self.query_scale_type == 'fix_elewise':
            self.query_scale = nn.Embedding(self.num_layers, embed_dims)
        else:
            raise NotImplementedError('Unknown query_scale_type: {}'.format(
                self.query_scale_type))

        self.ref_point_head = MLP(self.query_dim // 2 * embed_dims, embed_dims,
                                  embed_dims, 2)

        if self.with_modulated_hw_attn and self.query_dim == 4:
            self.ref_anchor_head = MLP(embed_dims, embed_dims, 2, 2)

        self.keep_query_pos = self.layers[0].keep_query_pos
        if not self.keep_query_pos:
            for layer_id in range(self.num_layers - 1):
                self.layers[layer_id + 1].cross_attn.qpos_proj = None

    def forward(self,
                query: Tensor,
                key: Tensor,
                query_pos: Tensor,
                key_pos: Tensor,

View on GitHub (pinned to cfd5d3a985)

Solutions

  1. Set query_scale_type to one of 'cond_elewise' (default), 'cond_scalar', or 'fix_elewise'
  2. Check for typos in the key/value in the model config dict

Example fix

// before
query_scale_type='fix_scalar'
// after
query_scale_type='cond_elewise'
Defensive patterns

Strategy: validation

Validate before calling

assert query_scale_type in ('cond_elewise', 'cond_scalar', 'fix_elewise'), query_scale_type

Prevention

When it happens

Trigger: Building a DAB-DETR model (DABDetrTransformerDecoder) with query_scale_type set to something like 'fix_scalar', 'constant', '', or omitted but with a typo in the config key.

Common situations: Adapting DAB-DETR configs from papers or other repos where the query_scale_type naming differs; hand-editing transformer decoder configs and guessing valid values.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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