docs: def forward_for_single_feature_map(self, anchors, objectness, box_regression):
          """
          Arguments:
              anchors: list[BoxList]
              objectness: tensor of size N, A, H, W
              box_regression: tensor of size N, A * 4, H, W
          """
          device = objectness.device
          N, A, H, W = objectness.shape
  
          # put in the same format as anchors
          objectness = permute_and_flatten(objectness, N, A, 1, H, W).view(N, -1)
          objectness = objectness.sigmoid()
  
          box_regression = permute_and_flatten(box_regression, N, A, 4, H, W)
  
          num_anchors = A * H * W
  
          pre_nms_top_n = min(self.pre_nms_top_n, num_anchors)
          objectness, topk_idx = objectness.topk(pre_nms_top_n, dim=1, sorted=True)
  
          batch_idx = torch.arange(N, device=device)[:, None]
          box_regression = box_regression[batch_idx, topk_idx]
  
          image_shapes = [box.size for box in anchors]
          concat_anchors = torch.cat([a.bbox for a in anchors], dim=0)
          concat_anchors = concat_anchors.reshape(N, -1, 4)[batch_idx, topk_idx]
  
          proposals = self.box_coder.decode(
              box_regression.view(-1, 4), concat_anchors.view(-1, 4)
          )
  
          proposals = proposals.view(N, -1, 4)
  
          result = []
          for proposal, score, im_shape in zip(proposals, objectness, image_shapes):
              boxlist = BoxList(proposal, im_shape, mode="xyxy")
              boxlist.add_field("objectness", score)
              boxlist = boxlist.clip_to_image(remove_empty=False)
              boxlist = remove_small_boxes(boxlist, self.min_size)
              boxlist = boxlist_nms(
                  boxlist,
                  self.nms_thresh,
                  max_proposals=self.post_nms_top_n,
                  score_field="objectness",
              )
              result.append(boxlist)
          return result