{"record":{"id":"390d5acdc92d2dc6","repo":"open-mmlab/mmdetection","slug":"only-square-rois-are-supporeted-in-grid-r-cnn","errorCode":null,"errorMessage":"Only square RoIs are supporeted in Grid R-CNN","messagePattern":"Only square RoIs are supporeted in Grid R-CNN","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mmdet/models/roi_heads/mask_heads/grid_head.py","lineNumber":92,"sourceCode":"        self.roi_feat_size = roi_feat_size\n        self.in_channels = in_channels\n        self.conv_kernel_size = conv_kernel_size\n        self.point_feat_channels = point_feat_channels\n        self.conv_out_channels = self.point_feat_channels * self.grid_points\n        self.class_agnostic = class_agnostic\n        self.conv_cfg = conv_cfg\n        self.norm_cfg = norm_cfg\n        if isinstance(norm_cfg, dict) and norm_cfg['type'] == 'GN':\n            assert self.conv_out_channels % norm_cfg['num_groups'] == 0\n\n        assert self.grid_points >= 4\n        self.grid_size = int(np.sqrt(self.grid_points))\n        if self.grid_size * self.grid_size != self.grid_points:\n            raise ValueError('grid_points must be a square number')\n\n        # the predicted heatmap is half of whole_map_size\n        if not isinstance(self.roi_feat_size, int):\n            raise ValueError('Only square RoIs are supporeted in Grid R-CNN')\n        self.whole_map_size = self.roi_feat_size * 4\n\n        # compute point-wise sub-regions\n        self.sub_regions = self.calc_sub_regions()\n\n        self.convs = []\n        for i in range(self.num_convs):\n            in_channels = (\n                self.in_channels if i == 0 else self.conv_out_channels)\n            stride = 2 if i == 0 else 1\n            padding = (self.conv_kernel_size - 1) // 2\n            self.convs.append(\n                ConvModule(\n                    in_channels,\n                    self.conv_out_channels,\n                    self.conv_kernel_size,\n                    stride=stride,\n                    padding=padding,","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/open-mmlab/mmdetection/blob/cfd5d3a985b0249de009b67d04f37263e11cdf3d/mmdet/models/roi_heads/mask_heads/grid_head.py#L74-L110","documentation":"Grid R-CNN's GridHead only supports square RoI feature sizes, so roi_feat_size must be an int (interpreted as both H and W). Passing a tuple like (7, 7) raises ValueError in __init__.","triggerScenarios":"grid_head=dict(type='GridHead', roi_feat_size=(7, 7)) — supplying a rectangular size tuple as done in some other heads.","commonSituations":"Reusing bbox_head-style roi_feat_size tuples in a Grid R-CNN config; following generic docs that show tuple roi sizes.","solutions":["Pass roi_feat_size as an int: roi_feat_size=7 (default)","Keep the underlying RoIAlign output square (aligned H==W)"],"exampleFix":"# before\nroi_feat_size=(7, 7)\n# after\nroi_feat_size=7","handlingStrategy":"type-guard","validationCode":"assert isinstance(cfg.get('roi_feat_size', 7), int), 'GridHead roi_feat_size must be int'","typeGuard":"def is_int_roi_size(v) -> bool: return isinstance(v, int) and not isinstance(v, bool)","tryCatchPattern":null,"preventionTips":["Pass roi_feat_size=7 (int) to GridHead","Resist tuple sizes from other heads' docs"],"tags":["mmdetection","grid-head","config"],"backgroundTag":"invalid-config-value","analyzedSha":"cfd5d3a985b0249de009b67d04f37263e11cdf3d","analyzedAt":"2026-08-27T20:54:20.183Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}