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: Project pseudo instances.
docstr_tok: ["Project","pseudo","instances","."]
code: def project_pseudo_instances(
      self,
      batch_pseudo_instances: SampleList,
      batch_data_samples: SampleList,
  ) -> SampleList:
      """Project pseudo instances."""
      for pseudo_instances, data_samples in zip(
          batch_pseudo_instances, batch_data_samples
      ):
          data_samples.gt_instances = copy.deepcopy(
              pseudo_instances.gt_instances
          )
          data_samples.gt_instances.bboxes = bbox_project(
              data_samples.gt_instances.bboxes,
              torch.tensor(data_samples.homography_matrix).to(
                  self.data_preprocessor.device
              ),
              data_samples.img_shape,
          )
      wh_thr = self.semi_train_cfg.get(
          "min_pseudo_bbox_wh", (1e-2, 1e-2)
      )
      return filter_gt_instances(batch_data_samples, wh_thr=wh_thr)
  
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 7 for calling the SemiBaseDetector obj's underlying member method code with example usage: obj.project_pseudo_instances(batch_pseudo_instances, batch_data_samples) and returns: filter_gt_instances