{"record":{"id":"1a40f518d8d5887f","repo":"WZMIAOMIAO/deep-learning-for-image-processing","slug":"mask-roi-pool-should-be-of-type-multiscaleroialign","errorCode":null,"errorMessage":"mask_roi_pool should be of type MultiScaleRoIAlign or None instead of {}","messagePattern":"mask_roi_pool should be of type MultiScaleRoIAlign or None instead of (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pytorch_object_detection/mask_rcnn/network_files/mask_rcnn.py","lineNumber":138,"sourceCode":"            box_roi_pool=None,\n            box_head=None,\n            box_predictor=None,\n            box_score_thresh=0.05,\n            box_nms_thresh=0.5,\n            box_detections_per_img=100,\n            box_fg_iou_thresh=0.5,\n            box_bg_iou_thresh=0.5,\n            box_batch_size_per_image=512,\n            box_positive_fraction=0.25,\n            bbox_reg_weights=None,\n            # Mask parameters\n            mask_roi_pool=None,\n            mask_head=None,\n            mask_predictor=None,\n    ):\n\n        if not isinstance(mask_roi_pool, (MultiScaleRoIAlign, type(None))):\n            raise TypeError(\n                f\"mask_roi_pool should be of type MultiScaleRoIAlign or None instead of {type(mask_roi_pool)}\"\n            )\n\n        if num_classes is not None:\n            if mask_predictor is not None:\n                raise ValueError(\"num_classes should be None when mask_predictor is specified\")\n\n        out_channels = backbone.out_channels\n\n        if mask_roi_pool is None:\n            mask_roi_pool = MultiScaleRoIAlign(featmap_names=[\"0\", \"1\", \"2\", \"3\"], output_size=14, sampling_ratio=2)\n\n        if mask_head is None:\n            mask_layers = (256, 256, 256, 256)\n            mask_dilation = 1\n            mask_head = MaskRCNNHeads(out_channels, mask_layers, mask_dilation)\n\n        if mask_predictor is None:","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/blob/1ec3fe6f374fc9969973a61f819de25658595afa/pytorch_object_detection/mask_rcnn/network_files/mask_rcnn.py#L120-L156","documentation":"MaskRCNN.__init__ type-checks mask_roi_pool: it must be a MultiScaleRoIAlign instance or None (to use the default). Any other object raises this TypeError reporting the actual type received.","triggerScenarios":"Passing a custom ROI-pooling module (e.g. RoIAlign from torchvision.ops, an nn.AdaptiveAvgPool2d, or a differently-parameterized pooling layer) as the mask_roi_pool argument of MaskRCNN(...).","commonSituations":"Confusing torchvision.ops.RoIAlign with MultiScaleRoIAlign; copying a box_roi_pool instance into mask_roi_pool from the wrong class hierarchy; older/newer torchvision versions where the expected class moved modules.","solutions":["Use torchvision.ops.MultiScaleRoIAlign(featmap_names=['0','1','2','3'], output_size=14, sampling_ratio=2) for mask_roi_pool","Pass None to let the model build the default MultiScaleRoIAlign","If you need custom pooling, subclass or wrap it so the argument is a genuine MultiScaleRoIAlign, or patch the check consciously"],"exampleFix":"// before\nfrom torchvision.ops import RoIAlign\nmodel = MaskRCNN(backbone, num_classes=91, mask_roi_pool=RoIAlign((14,14), 2, 0))\n// after\nfrom torchvision.ops import MultiScaleRoIAlign\nmodel = MaskRCNN(backbone, num_classes=91,\n                 mask_roi_pool=MultiScaleRoIAlign(featmap_names=['0','1','2','3'], output_size=14, sampling_ratio=2))","handlingStrategy":"type-guard","validationCode":"if mask_roi_pool is not None and not isinstance(mask_roi_pool, MultiScaleRoIAlign):\n    raise TypeError(f'mask_roi_pool must be MultiScaleRoIAlign or None, got {type(mask_roi_pool)}')","typeGuard":"def is_valid_mask_roi_pool(x):\n    return x is None or isinstance(x, MultiScaleRoIAlign)","tryCatchPattern":"try:\n    model = MaskRCNN(backbone, num_classes=num_classes, mask_roi_pool=mask_roi_pool)\nexcept TypeError as e:\n    if 'mask_roi_pool' in str(e):\n        model = MaskRCNN(backbone, num_classes=num_classes, mask_roi_pool=None)\n    else:\n        raise","preventionTips":["Import MultiScaleRoIAlign from torchvision.ops (not RoIAlign) for mask_roi_pool arguments","Pass None to use defaults unless you specifically need custom featmap_names/output_size","Type-hint parameters as Optional[MultiScaleRoIAlign] in wrapper code"],"tags":["pytorch","types","api-misuse"],"backgroundTag":"wrong-argument-type","analyzedSha":"1ec3fe6f374fc9969973a61f819de25658595afa","analyzedAt":"2026-08-30T09:19:11.901Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}