class_docstr: A mask point head use in PointRend.
  
  ``MaskPointHead`` use shared multi-layer perceptron (equivalent to
  nn.Conv1d) to predict the logit of input points. The fine-grained feature
  and coarse feature will be concatenate together for predication.
  
  Args:
      num_fcs (int): Number of fc layers in the head. Defaults to 3.
      in_channels (int): Number of input channels. Defaults to 256.
      fc_channels (int): Number of fc channels. Defaults to 256.
      num_classes (int): Number of classes for logits. Defaults to 80.
      class_agnostic (bool): Whether use class agnostic classification.
          If so, the output channels of logits will be 1. Defaults to False.
      coarse_pred_each_layer (bool): Whether concatenate coarse feature with
          the output of each fc layer. Defaults to True.
      conv_cfg (:obj:`ConfigDict` or dict): Dictionary to construct
          and config conv layer. Defaults to dict(type='Conv1d')).
      norm_cfg (:obj:`ConfigDict` or dict, optional): Dictionary to construct
          and config norm layer. Defaults to None.
      loss_point (:obj:`ConfigDict` or dict): Dictionary to construct and
          config loss layer of point head. Defaults to
          dict(type='CrossEntropyLoss', use_mask=True, loss_weight=1.0).
      init_cfg (:obj:`ConfigDict` or dict or list[:obj:`ConfigDict` or             dict], optional): Initialization config dict.
docstr: Get training target of MaskPointHead for each image.
docstr_tok: ["Get","training","target","of","MaskPointHead","for","each","image","."]
code: def _get_targets_single(
      self,
      rois: Tensor,
      rel_roi_points: Tensor,
      pos_assigned_gt_inds: Tensor,
      gt_instances: InstanceData,
      cfg: ConfigType,
  ) -> Tensor:
      """Get training target of MaskPointHead for each image."""
      num_pos = rois.size(0)
      num_points = cfg.num_points
      if num_pos > 0:
          gt_masks_th = gt_instances.masks.to_tensor(
              rois.dtype, rois.device
          ).index_select(0, pos_assigned_gt_inds)
          gt_masks_th = gt_masks_th.unsqueeze(1)
          rel_img_points = rel_roi_point_to_rel_img_point(
              rois, rel_roi_points, gt_masks_th
          )
          point_targets = point_sample(
              gt_masks_th, rel_img_points
          ).squeeze(1)
      else:
          point_targets = rois.new_zeros((0, num_points))
      return point_targets
  
imports: from typing import List, Tuple
  import torch
  import torch.nn
  from mmcv.cnn import ConvModule
  from mmcv.ops import point_sample, rel_roi_point_to_rel_img_point
  from mmengine.model import BaseModule
  from mmengine.structures import InstanceData
  from torch import Tensor
  from mmdet.models.task_modules.samplers import SamplingResult
  from mmdet.models.utils import get_uncertain_point_coords_with_randomness, get_uncertainty
  from mmdet.registry import MODELS
  from mmdet.structures.bbox import bbox2roi
  from mmdet.utils import ConfigType, InstanceList, MultiConfig, OptConfigType
label_desc: Use image node_id 4 for calling the MaskPointHead obj's underlying member method code with example usage: obj._get_targets_single(rois, rel_roi_points, pos_assigned_gt_inds, gt_instances, cfg) and returns: point_targets