code: def __init__(
      self,
      in_channel,
      out_channel,
      stride,
      norm_type="bn",
      freeze_norm=False,
      norm_decay=0.0,
  ):
      super(ShuffleUnit, self).__init__()
      branch_channel = out_channel // 2
      self.stride = stride
      if self.stride == 1:
          assert (
              in_channel == branch_channel * 2
          ), "when stride=1, in_channel {} should equal to branch_channel*2 {}".format(
              in_channel, branch_channel * 2
          )
      if stride > 1:
          self.branch1 = nn.Sequential(
              ConvNormLayer(
                  ch_in=in_channel,
                  ch_out=in_channel,
                  filter_size=3,
                  stride=self.stride,
                  groups=in_channel,
                  norm_type=norm_type,
                  freeze_norm=freeze_norm,
                  norm_decay=norm_decay,
              ),
              ConvNormLayer(
                  ch_in=in_channel,
                  ch_out=branch_channel,
                  filter_size=1,
                  stride=1,
                  norm_type=norm_type,
                  act="relu",
                  freeze_norm=freeze_norm,
                  norm_decay=norm_decay,
              ),
          )
      self.branch2 = nn.Sequential(
          ConvNormLayer(
              ch_in=branch_channel if stride == 1 else in_channel,
              ch_out=branch_channel,
              filter_size=1,
              stride=1,
              norm_type=norm_type,
              act="relu",
              freeze_norm=freeze_norm,
              norm_decay=norm_decay,
          ),
          ConvNormLayer(
              ch_in=branch_channel,
              ch_out=branch_channel,
              filter_size=3,
              stride=self.stride,
              groups=branch_channel,
              norm_type=norm_type,
              freeze_norm=freeze_norm,
              norm_decay=norm_decay,
          ),
          ConvNormLayer(
              ch_in=branch_channel,
              ch_out=branch_channel,
              filter_size=1,
              stride=1,
              norm_type=norm_type,
              act="relu",
              freeze_norm=freeze_norm,
              norm_decay=norm_decay,
          ),
      )
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from numbers import Integral
  from paddle import ParamAttr
  from paddle.regularizer import L2Decay
  from paddle.nn.initializer import Normal, Constant
  from ppdet.core.workspace import register
  from ppdet.modeling.shape_spec import ShapeSpec
  from ppdet.modeling.ops import channel_shuffle
  from ..None import layers
label_desc: Use image node_id 1 to create a new ShuffleUnit object from inherited base classes: nn with example: obj = ShuffleUnit(in_channel, out_channel, stride, norm_type, freeze_norm, norm_decay)