code: def get_rpn_anchor_input(im, boxes, is_crowd):
      
      boxes = boxes.copy()
      all_anchors = np.copy(get_all_anchors())
      # fHxfWxAx4 -> (-1, 4)
      featuremap_anchors_flatten = all_anchors.reshape((-1, 4))
  
      # only use anchors inside the image
      inside_ind, inside_anchors = filter_boxes_inside_shape(featuremap_anchors_flatten, im.shape[:2])
      # obtain anchor labels and their corresponding gt boxes
      anchor_labels, anchor_gt_boxes = get_anchor_labels(inside_anchors, boxes[is_crowd == 0], boxes[is_crowd == 1])
  
      # Fill them back to original size: fHxfWx1, fHxfWx4
      anchorH, anchorW = all_anchors.shape[:2]
      featuremap_labels = -np.ones((anchorH * anchorW * cfg.RPN.NUM_ANCHOR, ), dtype='int32')
      featuremap_labels[inside_ind] = anchor_labels
      featuremap_labels = featuremap_labels.reshape((anchorH, anchorW, cfg.RPN.NUM_ANCHOR))
      featuremap_boxes = np.zeros((anchorH * anchorW * cfg.RPN.NUM_ANCHOR, 4), dtype='float32')
      featuremap_boxes[inside_ind, :] = anchor_gt_boxes
      featuremap_boxes = featuremap_boxes.reshape((anchorH, anchorW, cfg.RPN.NUM_ANCHOR, 4))
      return featuremap_labels, featuremap_boxes
docs: Args:
          im: an image
          boxes: nx4, floatbox, gt. shoudn't be changed
          is_crowd: n,
  
      Returns:
          The anchor labels and target boxes for each pixel in the featuremap.
          fm_labels: fHxfWxNA
          fm_boxes: fHxfWxNAx4
          NA will be NUM_ANCHOR_SIZES x NUM_ANCHOR_RATIOS