class_docstr: Bottleneck for the ResNet backbone in `DetectoRS
  <https://arxiv.org/pdf/2006.02334.pdf>`_.
  
  This bottleneck allows the users to specify whether to use
  SAC (Switchable Atrous Convolution) and RFP (Recursive Feature Pyramid).
  
  Args:
       inplanes (int): The number of input channels.
       planes (int): The number of output channels before expansion.
       rfp_inplanes (int, optional): The number of channels from RFP.
           Default: None. If specified, an additional conv layer will be
           added for ``rfp_feat``. Otherwise, the structure is the same as
           base class.
       sac (dict, optional): Dictionary to construct SAC. Default: None.
class_docstr_tok: ["Bottleneck","for","the","ResNet","backbone","in","`","DetectoRS","<","https",":","\/\/arxiv.org\/pdf\/2006.02334.pdf",">","`","_",".","This","bottleneck","allows","the","users","to","specify","whether","to","use","SAC","(","Switchable","Atrous","Convolution",")","and","RFP","(","Recursive","Feature","Pyramid",")",".","Args",":","inplanes","(","int",")",":","The","number","of","input","channels",".","planes","(","int",")",":","The","number","of","output","channels","before","expansion",".","rfp_inplanes","(","int",",","optional",")",":","The","number","of","channels","from","RFP",".","Default",":","None",".","If","specified",",","an","additional","conv","layer","will","be","added","for","``","rfp_feat","``",".","Otherwise",",","the","structure","is","the","same","as","base","class",".","sac","(","dict",",","optional",")",":","Dictionary","to","construct","SAC",".","Default",":","None","."]
code: def __init__(
      self, inplanes, planes, rfp_inplanes=None, sac=None, **kwargs
  ):
      super(Bottleneck, self).__init__(inplanes, planes, **kwargs)
  
      assert sac is None or isinstance(sac, dict)
      self.sac = sac
      self.with_sac = sac is not None
      if self.with_sac:
          self.conv2 = build_conv_layer(
              self.sac,
              planes,
              planes,
              kernel_size=3,
              stride=self.conv2_stride,
              padding=self.dilation,
              dilation=self.dilation,
              bias=False,
          )
  
      self.rfp_inplanes = rfp_inplanes
      if self.rfp_inplanes:
          self.rfp_conv = build_conv_layer(
              None,
              self.rfp_inplanes,
              planes * self.expansion,
              1,
              stride=1,
              bias=True,
          )
      self.init_weights()
  
file_path: insightface/detection/scrfd/mmdet/models/backbones/detectors_resnet.py
imports: import torch.nn
  import torch.utils.checkpoint
  from mmcv.cnn import build_conv_layer, build_norm_layer, constant_init
  from ..builder import BACKBONES
  from .resnet import Bottleneck
  from .resnet import ResNet
label_desc: Use image node_id 1 to create a new Bottleneck object from inherited base classes: _Bottleneck with example: obj = Bottleneck(inplanes, planes, rfp_inplanes, sac)