code: def __init__(
      self,
      ch_in,
      ch_out,
      stride,
      shortcut,
      variant="b",
      groups=1,
      base_width=4,
      lr=1.0,
      norm_type="bn",
      norm_decay=0.0,
      freeze_norm=True,
      dcn_v2=False,
      std_senet=False,
  ):
      super(BottleNeck, self).__init__()
      if variant == "a":
          stride1, stride2 = stride, 1
      else:
          stride1, stride2 = 1, stride
  
      # ResNeXt
      width = int(ch_out * (base_width / 64.0)) * groups
  
      self.branch2a = ConvNormLayer(
          ch_in=ch_in,
          ch_out=width,
          filter_size=1,
          stride=stride1,
          groups=1,
          act="relu",
          norm_type=norm_type,
          norm_decay=norm_decay,
          freeze_norm=freeze_norm,
          lr=lr,
      )
  
      self.branch2b = ConvNormLayer(
          ch_in=width,
          ch_out=width,
          filter_size=3,
          stride=stride2,
          groups=groups,
          act="relu",
          norm_type=norm_type,
          norm_decay=norm_decay,
          freeze_norm=freeze_norm,
          lr=lr,
          dcn_v2=dcn_v2,
      )
  
      self.branch2c = ConvNormLayer(
          ch_in=width,
          ch_out=ch_out * self.expansion,
          filter_size=1,
          stride=1,
          groups=1,
          norm_type=norm_type,
          norm_decay=norm_decay,
          freeze_norm=freeze_norm,
          lr=lr,
      )
  
      self.shortcut = shortcut
      if not shortcut:
          if variant == "d" and stride == 2:
              self.short = nn.Sequential()
              self.short.add_sublayer(
                  "pool",
                  nn.AvgPool2D(
                      kernel_size=2, stride=2, padding=0, ceil_mode=True
                  ),
              )
              self.short.add_sublayer(
                  "conv",
                  ConvNormLayer(
                      ch_in=ch_in,
                      ch_out=ch_out * self.expansion,
                      filter_size=1,
                      stride=1,
                      norm_type=norm_type,
                      norm_decay=norm_decay,
                      freeze_norm=freeze_norm,
                      lr=lr,
                  ),
              )
          else:
              self.short = ConvNormLayer(
                  ch_in=ch_in,
                  ch_out=ch_out * self.expansion,
                  filter_size=1,
                  stride=stride,
                  norm_type=norm_type,
                  norm_decay=norm_decay,
                  freeze_norm=freeze_norm,
                  lr=lr,
              )
  
      self.std_senet = std_senet
      if self.std_senet:
          self.se = SELayer(ch_out * self.expansion)
  
imports: import math
  from numbers import Integral
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from ppdet.core.workspace import register, serializable
  from paddle.regularizer import L2Decay
  from paddle.nn.initializer import Uniform
  from paddle import ParamAttr
  from paddle.nn.initializer import Constant
  from paddle.vision.ops import DeformConv2D
  from .name_adapter import NameAdapter
  from ..shape_spec import ShapeSpec
label_desc: Use image node_id 1 to create a new BottleNeck object from inherited base classes: nn with example: obj = BottleNeck(ch_in, ch_out, stride, shortcut, variant, groups, base_width, lr, norm_type, norm_decay, freeze_norm, dcn_v2, std_senet)