def METHOD_NAME(self, x: List[Tensor],
                           batch_data_samples: SampleList) -> InstanceList:
    """Decode init_proposal_bboxes according to the size of images and
    expand dimension of init_proposal_features to batch_size.
    Args:
        x (list[Tensor]): List of FPN features.
        batch_data_samples (List[:obj:`DetDataSample`]): The Data
            Samples. It usually includes information such as
            `gt_instance`, `gt_panoptic_seg` and `gt_sem_seg`.
    Returns:
        List[:obj:`InstanceData`:] Detection results of each image.
        Each item usually contains following keys.
        - proposals: Decoded proposal bboxes,
          has shape (num_proposals, 4).
        - features: init_proposal_features, expanded proposal
          features, has shape
          (num_proposals, proposal_feature_channel).
        - imgs_whwh: Tensor with shape
          (num_proposals, 4), the dimension means
          [img_width, img_height, img_width, img_height].
    """
    batch_img_metas = []
    for data_sample in batch_data_samples:
        batch_img_metas.append(data_sample.metainfo)
    proposals = self.init_proposal_bboxes.weight.clone()
    proposals = bbox_cxcywh_to_xyxy(proposals)
    imgs_whwh = []
    for meta in batch_img_metas:
        h, w = meta['img_shape'][:2]
        imgs_whwh.append(x[0].new_tensor([[w, h, w, h]]))
    imgs_whwh = torch.cat(imgs_whwh, dim=0)
    imgs_whwh = imgs_whwh[:, None, :]
    proposals = proposals * imgs_whwh
    rpn_results_list = []
    for idx in range(len(batch_img_metas)):
        rpn_results = InstanceData()
        rpn_results.bboxes = proposals[idx]
        rpn_results.imgs_whwh = imgs_whwh[idx].repeat(
            self.num_proposals, 1)
        rpn_results.features = self.init_proposal_features.weight.clone()
        rpn_results_list.append(rpn_results)
    return rpn_results_list