{"record":{"id":"1474a87220295fc5","repo":"open-mmlab/mmdetection","slug":"frozen-stages-must-be-in-range-0-len-self-layer","errorCode":null,"errorMessage":"frozen_stages must be in range(0, {len(self.layer_setting) + 1}). But received {frozen_stages}","messagePattern":"frozen_stages must be in range\\(0, (.+?)\\)\\. But received (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mmdet/models/backbones/efficientnet.py","lineNumber":285,"sourceCode":"                     dict(\n                         type='Constant',\n                         layer=['_BatchNorm', 'GroupNorm'],\n                         val=1)\n                 ]):\n        super(EfficientNet, self).__init__(init_cfg)\n        assert arch in self.arch_settings, \\\n            f'\"{arch}\" is not one of the arch_settings ' \\\n            f'({\", \".join(self.arch_settings.keys())})'\n        self.arch_setting = self.arch_settings[arch]\n        self.layer_setting = self.layer_settings[arch[:1]]\n        for index in out_indices:\n            if index not in range(0, len(self.layer_setting)):\n                raise ValueError('the item in out_indices must in '\n                                 f'range(0, {len(self.layer_setting)}). '\n                                 f'But received {index}')\n\n        if frozen_stages not in range(len(self.layer_setting) + 1):\n            raise ValueError('frozen_stages must be in range(0, '\n                             f'{len(self.layer_setting) + 1}). '\n                             f'But received {frozen_stages}')\n        self.drop_path_rate = drop_path_rate\n        self.out_indices = out_indices\n        self.frozen_stages = frozen_stages\n        self.conv_cfg = conv_cfg\n        self.norm_cfg = norm_cfg\n        self.act_cfg = act_cfg\n        self.norm_eval = norm_eval\n        self.with_cp = with_cp\n\n        self.layer_setting = model_scaling(self.layer_setting,\n                                           self.arch_setting)\n        block_cfg_0 = self.layer_setting[0][0]\n        block_cfg_last = self.layer_setting[-1][0]\n        self.in_channels = make_divisible(block_cfg_0[1], 8)\n        self.out_channels = block_cfg_last[1]\n        self.layers = nn.ModuleList()","sourceCodeStart":267,"sourceCodeEnd":303,"githubUrl":"https://github.com/open-mmlab/mmdetection/blob/cfd5d3a985b0249de009b67d04f37263e11cdf3d/mmdet/models/backbones/efficientnet.py#L267-L303","documentation":"EfficientNet validates frozen_stages is an integer in [0, len(layer_setting)] (note: unlike CSPDarknet there is no -1 sentinel documented in this check, since range(len+1) starts at 0). Out-of-range values raise this ValueError at construction.","triggerScenarios":"Setting frozen_stages=-1 on EfficientNet (not in range(0, len+1) here, so it raises); setting frozen_stages greater than the number of stages; non-integer values.","commonSituations":"Copy-pasting frozen_stages=-1 from ResNet/CSPDarknet configs; counting stages of a different arch variant when tuning fine-tuning depth.","solutions":["Use frozen_stages in 0..num_stages (check len(layer_settings[arch]) in efficientnet.py); do not use -1 for EfficientNet","Lower the value until construction succeeds","If no freezing is desired, set frozen_stages=0"],"exampleFix":"# before\nbackbone=dict(type='EfficientNet', arch='b0', frozen_stages=-1)\n# after\nbackbone=dict(type='EfficientNet', arch='b0', frozen_stages=0)","handlingStrategy":"validation","validationCode":"n = len(backbone.layer_setting)\nassert isinstance(frozen_stages, int) and 0 <= frozen_stages <= n, 'EfficientNet frozen_stages must be in [0, n_stages]'","typeGuard":"def valid_effnet_fs(v, n: int) -> bool:\n    return isinstance(v, int) and 0 <= v <= n","tryCatchPattern":null,"preventionTips":["EfficientNet here does not accept -1; use 0 for no freezing","Keep frozen_stages <= number of stages","Validate before constructing in scripted config tools"],"tags":["mmdet","efficientnet","frozen-stages","backbone","config"],"backgroundTag":null,"analyzedSha":"cfd5d3a985b0249de009b67d04f37263e11cdf3d","analyzedAt":"2026-08-27T20:54:20.183Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}