code: def __call__(self, head_inputs, rois, spatial_scale, is_mask=False):
      """
      Adopt RoI align onto several level of feature maps to get RoI features.
      Distribute RoIs to different levels by area and get a list of RoI
      features by distributed RoIs and their corresponding feature maps.
  
      Returns:
          roi_feat(Variable): RoI features with shape of [M, C, R, R],
              where M is the number of RoIs and R is RoI resolution
  
      """
      k_min = self.min_level
      k_max = self.max_level
      num_roi_lvls = k_max - k_min + 1
      name_list = list(head_inputs.keys())
      input_name_list = name_list[-num_roi_lvls:]
      spatial_scale = spatial_scale[-num_roi_lvls:]
      rois_dist, restore_index = fluid.layers.distribute_fpn_proposals(
          rois, k_min, k_max, self.canconical_level, self.canonical_size
      )
      # rois_dist is in ascend order
      roi_out_list = []
      resolution = (
          is_mask and self.mask_resolution or self.box_resolution
      )
      for lvl in range(num_roi_lvls):
          name_index = num_roi_lvls - lvl - 1
          rois_input = rois_dist[lvl]
          head_input = head_inputs[input_name_list[name_index]]
          sc = spatial_scale[name_index]
          roi_out = fluid.layers.roi_align(
              input=head_input,
              rois=rois_input,
              pooled_height=resolution,
              pooled_width=resolution,
              spatial_scale=sc,
              sampling_ratio=self.sampling_ratio,
          )
          roi_out_list.append(roi_out)
      roi_feat_shuffle = fluid.layers.concat(roi_out_list)
      roi_feat_ = fluid.layers.gather(roi_feat_shuffle, restore_index)
      roi_feat = fluid.layers.lod_reset(roi_feat_, rois)
  
      return roi_feat
  
imports: import paddle.fluid
label_desc: Use image node_id 2 for calling the FPNRoIAlign obj's underlying member method code with example usage: obj.__call__(head_inputs, rois, spatial_scale, is_mask) and returns: roi_feat