class_docstr: DUC layer
  
  Parameters
  ----------
  planes : int
      Number of output channels.
  inplanes : int
      Number of input channels.
  upscale_factor : int
      Upscaling factor for input->output spatially.
class_docstr_tok: ["DUC","layer","Parameters","--","--","--","--","--","planes",":","int","Number","of","output","channels",".","inplanes",":","int","Number","of","input","channels",".","upscale_factor",":","int","Upscaling","factor","for","input-",">","output","spatially","."]
code: def __init__(
      self,
      planes,
      inplanes,
      upscale_factor=2,
      norm_layer=nn.BatchNorm,
      **kwargs,
  ):
      super(DUC, self).__init__()
      with self.name_scope():
          self.conv = nn.Conv2D(
              planes,
              in_channels=inplanes,
              kernel_size=3,
              padding=1,
              use_bias=False,
              weight_initializer=initializer.Uniform(
                  scale=math.sqrt(1 / (inplanes * 3 * 3))
              ),
              bias_initializer=initializer.Uniform(
                  scale=math.sqrt(1 / (inplanes * 3 * 3))
              ),
          )
          self.bn = norm_layer(
              gamma_initializer=ZeroUniform(), **kwargs
          )
          self.relu = nn.Activation("relu")
          self.pixel_shuffle = PixelShuffle(upscale_factor)
  
imports: import math
  import os
  import mxnet
  from mxnet import initializer
  from mxnet.gluon import nn
  from mxnet.gluon.block import HybridBlock
  from .utils import ZeroUniform, _try_load_parameters
label_desc: Use image node_id 1 to create a new DUC object from inherited base classes: HybridBlock with example: obj = DUC(planes, inplanes, upscale_factor, norm_layer)