class_docstr: "RetinaHead with separate BN.
  
  In RetinaHead, conv/norm layers are shared across different FPN levels,
  while in RetinaSepBNHead, conv layers are shared across different FPN
  levels, but BN layers are separated.
class_docstr_tok: ["``","RetinaHead","with","separate","BN",".","In","RetinaHead",",","conv\/norm","layers","are","shared","across","different","FPN","levels",",","while","in","RetinaSepBNHead",",","conv","layers","are","shared","across","different","FPN","levels",",","but","BN","layers","are","separated","."]
code: def __init__(
      self,
      num_classes: int,
      num_ins: int,
      in_channels: int,
      stacked_convs: int = 4,
      conv_cfg: OptConfigType = None,
      norm_cfg: OptConfigType = None,
      init_cfg: OptMultiConfig = None,
      **kwargs,
  ) -> None:
      assert init_cfg is None, (
          "To prevent abnormal initialization "
          "behavior, init_cfg is not allowed to be set"
      )
      self.stacked_convs = stacked_convs
      self.conv_cfg = conv_cfg
      self.norm_cfg = norm_cfg
      self.num_ins = num_ins
      super().__init__(
          num_classes=num_classes,
          in_channels=in_channels,
          init_cfg=init_cfg,
          **kwargs,
      )
  
file_path: mmdetection/mmdet/models/dense_heads/retina_sepbn_head.py
imports: from typing import Tuple
  import torch.nn
  from mmcv.cnn import ConvModule
  from mmengine.model import bias_init_with_prob, normal_init
  from torch import Tensor
  from mmdet.registry import MODELS
  from mmdet.utils import OptConfigType, OptMultiConfig
  from .anchor_head import AnchorHead
label_desc: Use image node_id 1 to create a new RetinaSepBNHead object from inherited base classes: AnchorHead with example: obj = RetinaSepBNHead(num_classes, num_ins, in_channels, stacked_convs, conv_cfg, norm_cfg, init_cfg)