code: def __init__(
      self,
      num_channels,
      num_filters,
      has_se,
      stride=1,
      downsample=False,
      name=None,
      padding_same=True,
  ):
      super(BottleneckBlock, self).__init__()
  
      self.has_se = has_se
      self.downsample = downsample
  
      self.conv1 = layers.ConvBNReLU(
          in_channels=num_channels,
          out_channels=num_filters,
          kernel_size=1,
          bias_attr=False,
      )
  
      self.conv2 = layers.ConvBNReLU(
          in_channels=num_filters,
          out_channels=num_filters,
          kernel_size=3,
          stride=stride,
          padding=1 if not padding_same else "same",
          bias_attr=False,
      )
  
      self.conv3 = layers.ConvBN(
          in_channels=num_filters,
          out_channels=num_filters * 4,
          kernel_size=1,
          bias_attr=False,
      )
  
      if self.downsample:
          self.conv_down = layers.ConvBN(
              in_channels=num_channels,
              out_channels=num_filters * 4,
              kernel_size=1,
              bias_attr=False,
          )
  
      if self.has_se:
          self.se = SELayer(
              num_channels=num_filters * 4,
              num_filters=num_filters * 4,
              reduction_ratio=16,
              name=name + "_fc",
          )
  
      self.add = layers.Add()
      self.relu = layers.Activation("relu")
  
imports: import math
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddleseg.cvlibs import manager, param_init
  from paddleseg.models import layers
  import ppmatting
label_desc: Use image node_id 1 to create a new BottleneckBlock object from inherited base classes: nn with example: obj = BottleneckBlock(num_channels, num_filters, has_se, stride, downsample, name, padding_same)