class_docstr: Base head for text detection, build the loss and postprocessor.
  
  1. The ``init_weights`` method is used to initialize head's
  model parameters. After detector initialization, ``init_weights``
  is triggered when ``detector.init_weights()`` is called externally.
  
  2. The ``loss`` method is used to calculate the loss of head,
  which includes two steps: (1) the head model performs forward
  propagation to obtain the feature maps (2) The ``module_loss`` method
  is called based on the feature maps to calculate the loss.
  
  .. code:: text
  
      loss(): forward() -> module_loss()
  
  3. The ``predict`` method is used to predict detection results,
  which includes two steps: (1) the head model performs forward
  propagation to obtain the feature maps (2) The ``postprocessor`` method
  is called based on the feature maps to predict detection results including
  post-processing.
  
  .. code:: text
  
      predict(): forward() -> postprocessor()
  
  4. The ``loss_and_predict`` method is used to return loss and detection
  results at the same time. It will call head's ``forward``,
  ``module_loss`` and ``postprocessor`` methods in order.
  
  .. code:: text
  
      loss_and_predict(): forward() -> module_loss() -> postprocessor()
  
  
  Args:
      loss (dict, optional): Config to build loss. Defaults to None.
      postprocessor (dict, optional): Config to build postprocessor. Defaults
          to None.
      init_cfg (dict or list[dict], optional): Initialization configs.
          Defaults to None.
code: def __init__(
      self,
      module_loss: Optional[Dict] = None,
      postprocessor: Optional[Dict] = None,
      init_cfg: Optional[Union[Dict, List[Dict]]] = None,
  ) -> None:
      super().__init__(init_cfg=init_cfg)
      if module_loss is not None:
          assert isinstance(module_loss, dict)
          self.module_loss = MODELS.build(module_loss)
      else:
          self.module_loss = module_loss
      if postprocessor is not None:
          assert isinstance(postprocessor, dict)
          self.postprocessor = MODELS.build(postprocessor)
      else:
          self.postprocessor = postprocessor
  
file_path: mmocr/mmocr/models/textdet/heads/base.py
imports: from typing import Dict, List, Optional, Tuple, Union
  import torch
  from mmengine.model import BaseModule
  from torch import Tensor
  from mmocr.registry import MODELS
  from mmocr.utils.typing_utils import DetSampleList
label_desc: Use image node_id 1 to create a new BaseTextDetHead object from inherited base classes: BaseModule with example: obj = BaseTextDetHead(module_loss, postprocessor, init_cfg)