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: Classify each point base on fine grained and coarse feats.
  
  Args:
      fine_grained_feats (Tensor): Fine grained feature sampled from FPN,
          shape (num_rois, in_channels, num_points).
      coarse_feats (Tensor): Coarse feature sampled from CoarseMaskHead,
          shape (num_rois, num_classes, num_points).
  
  Returns:
      Tensor: Point classification results,
      shape (num_rois, num_class, num_points).
docstr_tok: ["Classify","each","point","base","on","fine","grained","and","coarse","feats",".","Args",":","fine_grained_feats","(","Tensor",")",":","Fine","grained","feature","sampled","from","FPN",",","shape","(","num_rois",",","in_channels",",","num_points",")",".","coarse_feats","(","Tensor",")",":","Coarse","feature","sampled","from","CoarseMaskHead",",","shape","(","num_rois",",","num_classes",",","num_points",")",".","Returns",":","Tensor",":","Point","classification","results",",","shape","(","num_rois",",","num_class",",","num_points",")","."]
code: def forward(
      self, fine_grained_feats: Tensor, coarse_feats: Tensor
  ) -> Tensor:
      """Classify each point base on fine grained and coarse feats.
  
      Args:
          fine_grained_feats (Tensor): Fine grained feature sampled from FPN,
              shape (num_rois, in_channels, num_points).
          coarse_feats (Tensor): Coarse feature sampled from CoarseMaskHead,
              shape (num_rois, num_classes, num_points).
  
      Returns:
          Tensor: Point classification results,
          shape (num_rois, num_class, num_points).
      """
  
      x = torch.cat([fine_grained_feats, coarse_feats], dim=1)
      for fc in self.fcs:
          x = fc(x)
          if self.coarse_pred_each_layer:
              x = torch.cat((x, coarse_feats), dim=1)
      return self.fc_logits(x)
  
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 2 for calling the MaskPointHead obj's underlying member method code with example usage: obj.forward(fine_grained_feats, coarse_feats) and returns: self