code: def maskrcnn_upXconv_head(feature, num_category, num_convs, norm=None):
      
      assert norm in [None, 'GN'], norm
      l = feature
      with argscope([Conv2D, Conv2DTranspose], data_format='channels_first',
                    kernel_initializer=tf.variance_scaling_initializer(
                        scale=2.0, mode='fan_out',
                        distribution='untruncated_normal' if get_tf_version_tuple() >= (1, 12) else 'normal')):
          # c2's MSRAFill is fan_out
          for k in range(num_convs):
              l = Conv2D('fcn{}'.format(k), l, cfg.MRCNN.HEAD_DIM, 3, activation=tf.nn.relu)
              if norm is not None:
                  l = GroupNorm('gn{}'.format(k), l)
          l = Conv2DTranspose('deconv', l, cfg.MRCNN.HEAD_DIM, 2, strides=2, activation=tf.nn.relu)
          l = Conv2D('conv', l, num_category, 1)
      return l
docs: Args:
          feature (NxCx s x s): size is 7 in C4 models and 14 in FPN models.
          num_category(int):
          num_convs (int): number of convolution layers
          norm (str or None): either None or 'GN'
  
      Returns:
          mask_logits (N x num_category x 2s x 2s):