class_docstr: Base class for semi-supervised detectors.
  
  Semi-supervised detectors typically consisting of a teacher model
  updated by exponential moving average and a student model updated
  by gradient descent.
  
  Args:
      detector (:obj:`ConfigDict` or dict): The detector config.
      semi_train_cfg (:obj:`ConfigDict` or dict, optional):
          The semi-supervised training config.
      semi_test_cfg (:obj:`ConfigDict` or dict, optional):
          The semi-supervised testing config.
      data_preprocessor (:obj:`ConfigDict` or dict, optional): Config of
          :class:`DetDataPreprocessor` to process the input data.
          Defaults to None.
      init_cfg (:obj:`ConfigDict` or list[:obj:`ConfigDict`] or dict or
          list[dict], optional): Initialization config dict.
          Defaults to None.
docstr: Network forward process. Usually includes backbone, neck and head
  forward without any post-processing.
  
  Args:
      batch_inputs (Tensor): Inputs with shape (N, C, H, W).
  
  Returns:
      tuple: A tuple of features from ``rpn_head`` and ``roi_head``
      forward.
docstr_tok: ["Network","forward","process",".","Usually","includes","backbone",",","neck","and","head","forward","without","any","post-processing",".","Args",":","batch_inputs","(","Tensor",")",":","Inputs","with","shape","(","N",",","C",",","H",",","W",")",".","Returns",":","tuple",":","A","tuple","of","features","from","``","rpn_head","``","and","``","roi_head","``","forward","."]
code: def _forward(
      self, batch_inputs: Tensor, batch_data_samples: SampleList
  ) -> SampleList:
      """Network forward process. Usually includes backbone, neck and head
      forward without any post-processing.
  
      Args:
          batch_inputs (Tensor): Inputs with shape (N, C, H, W).
  
      Returns:
          tuple: A tuple of features from ``rpn_head`` and ``roi_head``
          forward.
      """
      if self.semi_test_cfg.get("forward_on", "teacher") == "teacher":
          return self.teacher(
              batch_inputs, batch_data_samples, mode="tensor"
          )
      else:
          return self.student(
              batch_inputs, batch_data_samples, mode="tensor"
          )
  
imports: import copy
  from typing import Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn
  from torch import Tensor
  from mmdet.models.utils import filter_gt_instances, rename_loss_dict, reweight_loss_dict
  from mmdet.registry import MODELS
  from mmdet.structures import SampleList
  from mmdet.structures.bbox import bbox_project
  from mmdet.utils import ConfigType, OptConfigType, OptMultiConfig
  from .base import BaseDetector
label_desc: Use image node_id 9 for calling the SemiBaseDetector obj's underlying member method code with example usage: obj._forward(batch_inputs, batch_data_samples) and returns: self, self