code: def shufflenet_unit_v2(l, out_channel, stride):
      if stride == 1:
          shortcut, l = tf.split(l, 2, axis=1)
      else:
          shortcut, l = l, l
      shortcut_channel = int(shortcut.shape[1])
  
      l = Conv2D("conv1", l, out_channel // 2, 1, activation=BNReLU)
      l = DepthConv("dconv", l, out_channel // 2, 3, stride=stride)
      l = BatchNorm("dconv_bn", l)
      l = Conv2D(
          "conv2",
          l,
          out_channel - shortcut_channel,
          1,
          activation=BNReLU,
      )
  
      if stride == 2:
          shortcut = DepthConv(
              "shortcut_dconv", shortcut, shortcut_channel, 3, stride=2
          )
          shortcut = BatchNorm("shortcut_dconv_bn", shortcut)
          shortcut = Conv2D(
              "shortcut_conv",
              shortcut,
              shortcut_channel,
              1,
              activation=BNReLU,
          )
      output = tf.concat([shortcut, l], axis=1)
      output = channel_shuffle(output, 2)
      return output
  
imports: import argparse
  import math
  import numpy
  import os
  import cv2
  from tensorpack import tfv1
  from tensorpack import *
  from tensorpack.dataflow import imgaug
  from tensorpack.tfutils import argscope, SmartInit, model_utils
  from tensorpack.tfutils.scope_utils import under_name_scope
  from tensorpack.utils import logger
  from tensorpack.utils.gpu import get_num_gpu
  from imagenet_utils import ImageNetModel, eval_classification, get_imagenet_dataflow
label_desc: Use image node_id 4 for calling a global function with example usage: shufflenet_unit_v2(l, out_channel, stride) and returns: output