code: def __init__(
      self,
      channels,
      kernel_size,
      strides=(1, 1),
      padding=(0, 0),
      dilation=(1, 1),
      groups=1,
      radix=2,
      in_channels=None,
      r=2,
      norm_layer=BatchNorm,
      norm_kwargs=None,
      drop_ratio=0,
      *args,
      **kwargs,
  ):
      super(SplitAttentionConv, self).__init__()
      norm_kwargs = norm_kwargs if norm_kwargs is not None else {}
      inter_channels = max(in_channels * radix // 2 // r, 32)
      self.radix = radix
      self.cardinality = groups
      self.conv = Conv2D(
          channels * radix,
          kernel_size,
          strides,
          padding,
          dilation,
          groups=groups * radix,
          *args,
          in_channels=in_channels,
          **kwargs,
      )
      self.use_bn = norm_layer is not None
      if self.use_bn:
          self.bn = norm_layer(
              in_channels=channels * radix, **norm_kwargs
          )
      self.relu = Activation("relu")
      self.fc1 = Conv2D(
          inter_channels,
          1,
          in_channels=channels,
          groups=self.cardinality,
      )
      if self.use_bn:
          self.bn1 = norm_layer(
              in_channels=inter_channels, **norm_kwargs
          )
      self.relu1 = Activation("relu")
      if drop_ratio > 0:
          self.drop = nn.Dropout(drop_ratio)
      else:
          self.drop = None
      self.fc2 = Conv2D(
          channels * radix,
          1,
          in_channels=inter_channels,
          groups=self.cardinality,
      )
      self.channels = channels
  
imports: from mxnet.gluon import nn
  from mxnet.gluon.nn import Conv2D, HybridBlock, BatchNorm, Activation
label_desc: Use image node_id 1 to create a new SplitAttentionConv object from inherited base classes: HybridBlock with example: obj = SplitAttentionConv(channels, kernel_size, strides, padding, dilation, groups, radix, in_channels, r, norm_layer, norm_kwargs, drop_ratio)