code: def fastrcnn_Xconv1fc_head(feature, num_convs, norm=None):
      """
      Args:
          feature (NCHW):
          num_classes(int): num_category + 1
          num_convs (int): number of conv layers
          norm (str or None): either None or 'GN'
  
      Returns:
          2D head feature
      """
      assert norm in [None, "GN"], norm
      l = feature
      with argscope(
          Conv2D,
          data_format="channels_first",
          kernel_initializer=tfv1.variance_scaling_initializer(
              scale=2.0,
              mode="fan_out",
              distribution="untruncated_normal",
          ),
      ):
          for k in range(num_convs):
              l = Conv2D(
                  "conv{}".format(k),
                  l,
                  cfg.FPN.FRCNN_CONV_HEAD_DIM,
                  3,
                  activation=tf.nn.relu,
              )
              if norm is not None:
                  l = GroupNorm("gn{}".format(k), l)
          l = FullyConnected(
              "fc",
              l,
              cfg.FPN.FRCNN_FC_HEAD_DIM,
              kernel_initializer=tfv1.variance_scaling_initializer(),
              activation=tf.nn.relu,
          )
      return l
  
imports: import tensorflow
  from tensorpack import tfv1
  from tensorpack.models import Conv2D, FullyConnected, layer_register
  from tensorpack.tfutils.argscope import argscope
  from tensorpack.tfutils.scope_utils import under_name_scope
  from tensorpack.tfutils.summary import add_moving_summary
  from tensorpack.utils.argtools import memoized_method
  from config import config
  from utils.box_ops import pairwise_iou
  from .model_box import decode_bbox_target, encode_bbox_target
  from .backbone import GroupNorm
label_desc: Use image node_id 7 for calling a global function with example usage: fastrcnn_Xconv1fc_head(feature, num_convs, norm) and returns: l