class_docstr: Coarse mask head used in PointRend.
  
  Compared with standard ``FCNMaskHead``, ``CoarseMaskHead`` will downsample
  the input feature map instead of upsample it.
  
  Args:
      num_convs (int): Number of conv layers in the head. Default: 0.
      num_fcs (int): Number of fc layers in the head. Default: 2.
      fc_out_channels (int): Number of output channels of fc layer.
          Default: 1024.
      downsample_factor (int): The factor that feature map is downsampled by.
          Default: 2.
code: def forward(self, x):
      for conv in self.convs:
          x = conv(x)
  
      if self.downsample_conv is not None:
          x = self.downsample_conv(x)
  
      x = x.flatten(1)
      for fc in self.fcs:
          x = self.relu(fc(x))
      mask_pred = self.fc_logits(x).view(
          x.size(0), self.num_classes, *self.output_size
      )
      return mask_pred
  
file_path: insightface/detection/scrfd/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py
imports: import torch.nn
  from mmcv.cnn import ConvModule, Linear, constant_init, xavier_init
  from mmcv.runner import auto_fp16
  from mmdet.models.builder import HEADS
  from .fcn_mask_head import FCNMaskHead
label_desc: Use image node_id 3 for calling the CoarseMaskHead obj's underlying member method code with example usage: obj.forward(x) and returns: mask_pred