code: def resnet_c4_backbone(image, num_blocks):
      assert len(num_blocks) == 3
      freeze_at = cfg.BACKBONE.FREEZE_AT
      with backbone_scope(freeze=freeze_at > 0):
          l = tf.pad(
              image,
              [
                  [0, 0],
                  [0, 0],
                  maybe_reverse_pad(2, 3),
                  maybe_reverse_pad(2, 3),
              ],
          )
          l = Conv2D("conv0", l, 64, 7, strides=2, padding="VALID")
          l = tf.pad(
              l,
              [
                  [0, 0],
                  [0, 0],
                  maybe_reverse_pad(0, 1),
                  maybe_reverse_pad(0, 1),
              ],
          )
          l = MaxPooling("pool0", l, 3, strides=2, padding="VALID")
  
      with backbone_scope(freeze=freeze_at > 1):
          c2 = resnet_group(
              "group0", l, resnet_bottleneck, 64, num_blocks[0], 1
          )
      with backbone_scope(freeze=False):
          c3 = resnet_group(
              "group1", c2, resnet_bottleneck, 128, num_blocks[1], 2
          )
          c4 = resnet_group(
              "group2", c3, resnet_bottleneck, 256, num_blocks[2], 2
          )
      # 16x downsampling up to now
      return c4
  
imports: import numpy
  import tensorflow
  from contextlib import ExitStack, contextmanager
  from tensorpack import tfv1
  from tensorpack.models import BatchNorm, Conv2D, MaxPooling, layer_register
  from tensorpack.tfutils import argscope
  from tensorpack.tfutils.scope_utils import auto_reuse_variable_scope
  from tensorpack.tfutils.varreplace import custom_getter_scope, freeze_variables
  from config import config
label_desc: Use image node_id 10 for calling a global function with example usage: resnet_c4_backbone(image, num_blocks) and returns: c4