Hello everyone,
I’m trying to use the weights of a pre-trained Mask RCNN with a FPN and ResNet101 as backbone. However, it uses a different RPN Head structure than the one provided by torchvision. While the one provided by torchvision has the following structure (256 is an input)
self.conv = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1)
self.cls_logits = nn.Conv2d(256, num_anchors, kernel_size=1, stride=1)
self.bbox_pred = nn.Conv2d(256, num_anchors * 4, kernel_size=1, stride=1)

the one which I’m trying to use has the following structure
self.conv = nn.Conv2d(256, 512, kernel_size=3, stride=anchor_stride, padding=1)
self.cls_logits = nn.Conv2d(512, 2 * anchors_per_location, kernel_size=1, stride=1)
self.bbox_pred = nn.Conv2d(512, 4 * anchors_per_location, kernel_size=1, stride=1)

After I manually replace the RPN Head, I get an error due to the filter_proposals method (error bellow). How could I circumvent this situation, since, as it appears, the method is defined to a specific structure? Or am I missing something?
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-14-6ae18adb1800> in <module>
      1 mask_rcnn.to(device)
      2 mask_rcnn.eval()
----> 3 _ = mask_rcnn([img_torch])

/opt/conda/lib/python3.7/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    530             result = self._slow_forward(*input, **kwargs)
    531         else:
--> 532             result = self.forward(*input, **kwargs)
    533         for hook in self._forward_hooks.values():
    534             hook_result = hook(self, input, result)

/opt/conda/lib/python3.7/site-packages/torchvision/models/detection/generalized_rcnn.py in forward(self, images, targets)
     68         if isinstance(features, torch.Tensor):
     69             features = OrderedDict([('0', features)])
---> 70         proposals, proposal_losses = self.rpn(images, features, targets)
     71         detections, detector_losses = self.roi_heads(features, proposals, images.image_sizes, targets)
     72         detections = self.transform.postprocess(detections, images.image_sizes, original_image_sizes)

/opt/conda/lib/python3.7/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    530             result = self._slow_forward(*input, **kwargs)
    531         else:
--> 532             result = self.forward(*input, **kwargs)
    533         for hook in self._forward_hooks.values():
    534             hook_result = hook(self, input, result)

/opt/conda/lib/python3.7/site-packages/torchvision/models/detection/rpn.py in forward(self, images, features, targets)
    470         proposals = self.box_coder.decode(pred_bbox_deltas.detach(), anchors)
    471         proposals = proposals.view(num_images, -1, 4)
--> 472         boxes, scores = self.filter_proposals(proposals, objectness, images.image_sizes, num_anchors_per_level)
    473 
    474         losses = {}

/opt/conda/lib/python3.7/site-packages/torchvision/models/detection/rpn.py in filter_proposals(self, proposals, objectness, image_shapes, num_anchors_per_level)
    384         objectness = objectness[batch_idx, top_n_idx]
    385         levels = levels[batch_idx, top_n_idx]
--> 386         proposals = proposals[batch_idx, top_n_idx]
    387 
    388         final_boxes = []

IndexError: index 361016 is out of bounds for dimension 1 with size 242991