{"record":{"id":"3e0d2298ee9596d9","repo":"open-mmlab/mmdetection","slug":"basesize-ratio-range-0-should-be-either-0-15or-0","errorCode":null,"errorMessage":"basesize_ratio_range[0] should be either 0.15or 0.2 when input_size is 300, got {basesize_ratio_range[0]}.","messagePattern":"basesize_ratio_range\\[0\\] should be either 0\\.15or 0\\.2 when input_size is 300, got (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mmdet/models/task_modules/prior_generators/anchor_generator.py","lineNumber":559,"sourceCode":"            # calculate anchor ratios and sizes\n            min_ratio, max_ratio = basesize_ratio_range\n            min_ratio = int(min_ratio * 100)\n            max_ratio = int(max_ratio * 100)\n            step = int(np.floor(max_ratio - min_ratio) / (self.num_levels - 2))\n            min_sizes = []\n            max_sizes = []\n            for ratio in range(int(min_ratio), int(max_ratio) + 1, step):\n                min_sizes.append(int(self.input_size * ratio / 100))\n                max_sizes.append(int(self.input_size * (ratio + step) / 100))\n            if self.input_size == 300:\n                if basesize_ratio_range[0] == 0.15:  # SSD300 COCO\n                    min_sizes.insert(0, int(self.input_size * 7 / 100))\n                    max_sizes.insert(0, int(self.input_size * 15 / 100))\n                elif basesize_ratio_range[0] == 0.2:  # SSD300 VOC\n                    min_sizes.insert(0, int(self.input_size * 10 / 100))\n                    max_sizes.insert(0, int(self.input_size * 20 / 100))\n                else:\n                    raise ValueError(\n                        'basesize_ratio_range[0] should be either 0.15'\n                        'or 0.2 when input_size is 300, got '\n                        f'{basesize_ratio_range[0]}.')\n            elif self.input_size == 512:\n                if basesize_ratio_range[0] == 0.1:  # SSD512 COCO\n                    min_sizes.insert(0, int(self.input_size * 4 / 100))\n                    max_sizes.insert(0, int(self.input_size * 10 / 100))\n                elif basesize_ratio_range[0] == 0.15:  # SSD512 VOC\n                    min_sizes.insert(0, int(self.input_size * 7 / 100))\n                    max_sizes.insert(0, int(self.input_size * 15 / 100))\n                else:\n                    raise ValueError(\n                        'When not setting min_sizes and max_sizes,'\n                        'basesize_ratio_range[0] should be either 0.1'\n                        'or 0.15 when input_size is 512, got'\n                        f' {basesize_ratio_range[0]}.')\n            else:\n                raise ValueError(","sourceCodeStart":541,"sourceCodeEnd":577,"githubUrl":"https://github.com/open-mmlab/mmdetection/blob/cfd5d3a985b0249de009b67d04f37263e11cdf3d/mmdet/models/task_modules/prior_generators/anchor_generator.py#L541-L577","documentation":"SSDAnchorGenerator auto-computes SSD anchor sizes when min_sizes/max_sizes are not provided. For input_size=300 it only knows two presets selected by the first element of basesize_ratio_range: 0.15 (COCO) or 0.2 (VOC). Any other ratio value has no preset so the constructor rejects it.","triggerScenarios":"Building SSDAnchorGenerator (or an SSD/Retina SSD config) with input_size=300, min_sizes/max_sizes unset, and basesize_ratio_range whose first element is not exactly 0.15 or 0.2 (e.g. 0.1 or 0.25).","commonSituations":"Copying an SSD512 config (ratio 0.1) and changing input_size to 300, or tweaking basesize_ratio_range for experiments without supplying explicit min_sizes/max_sizes.","solutions":["Set basesize_ratio_range to (0.2, 0.95) for SSD300 VOC or (0.15, 0.75) for SSD300 COCO","Or provide explicit min_sizes and max_sizes lists so the auto-computation branch is skipped","If you need a custom ratio at 300, compute your own min/max size lists and pass them directly"],"exampleFix":"# before\nanchor_generator=dict(\n    type='SSDAnchorGenerator',\n    input_size=300,\n    basesize_ratio_range=(0.1, 0.9))\n# after\nanchor_generator=dict(\n    type='SSDAnchorGenerator',\n    input_size=300,\n    basesize_ratio_range=(0.2, 0.95))  # SSD300 VOC","handlingStrategy":"validation","validationCode":"bsrr = cfg['anchor_generator']['basesize_ratio_range'][0]\nassert cfg['anchor_generator'].get('input_size') != 300 or bsrr in (0.15, 0.2) or 'min_sizes' in cfg['anchor_generator']","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep SSD300 preset ratios documented next to configs","Always pass explicit min_sizes/max_sizes when deviating from presets"],"tags":["mmdetection","ssd","anchor-generator","config-validation"],"backgroundTag":"invalid-config-parameter","analyzedSha":"cfd5d3a985b0249de009b67d04f37263e11cdf3d","analyzedAt":"2026-08-27T20:54:20.183Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}