code: def __create_pyramid_features(
      backbone_layers, pyramid_levels, feature_size=256
  ):
      """Creates the FPN layers on top of the backbone features.
  
      Args
          backbone_layers: a dictionary containing feature stages C3, C4, C5 from the backbone. Also contains C2 if provided.
          pyramid_levels: Pyramid levels in use.
          feature_size : The feature size to use for the resulting feature levels.
  
      Returns
          output_layers : A dict of feature levels. P3, P4, P5, P6 are always included. P2, P6, P7 included if in use.
      """
  
      output_layers = {}
  
      # upsample C5 to get P5 from the FPN paper
      P5 = keras.layers.Conv2D(
          feature_size,
          kernel_size=1,
          strides=1,
          padding="same",
          name="C5_reduced",
      )(backbone_layers["C5"])
      P5_upsampled = layers.UpsampleLike(name="P5_upsampled")(
          [P5, backbone_layers["C4"]]
      )
      P5 = keras.layers.Conv2D(
          feature_size,
          kernel_size=3,
          strides=1,
          padding="same",
          name="P5",
      )(P5)
      output_layers["P5"] = P5
  
      # add P5 elementwise to C4
      P4 = keras.layers.Conv2D(
          feature_size,
          kernel_size=1,
          strides=1,
          padding="same",
          name="C4_reduced",
      )(backbone_layers["C4"])
      P4 = keras.layers.Add(name="P4_merged")([P5_upsampled, P4])
      P4_upsampled = layers.UpsampleLike(name="P4_upsampled")(
          [P4, backbone_layers["C3"]]
      )
      P4 = keras.layers.Conv2D(
          feature_size,
          kernel_size=3,
          strides=1,
          padding="same",
          name="P4",
      )(P4)
      output_layers["P4"] = P4
  
      # add P4 elementwise to C3
      P3 = keras.layers.Conv2D(
          feature_size,
          kernel_size=1,
          strides=1,
          padding="same",
          name="C3_reduced",
      )(backbone_layers["C3"])
      P3 = keras.layers.Add(name="P3_merged")([P4_upsampled, P3])
      if "C2" in backbone_layers and 2 in pyramid_levels:
          P3_upsampled = layers.UpsampleLike(name="P3_upsampled")(
              [P3, backbone_layers["C2"]]
          )
      P3 = keras.layers.Conv2D(
          feature_size,
          kernel_size=3,
          strides=1,
          padding="same",
          name="P3",
      )(P3)
      output_layers["P3"] = P3
  
      if "C2" in backbone_layers and 2 in pyramid_levels:
          P2 = keras.layers.Conv2D(
              feature_size,
              kernel_size=1,
              strides=1,
              padding="same",
              name="C2_reduced",
          )(backbone_layers["C2"])
          P2 = keras.layers.Add(name="P2_merged")([P3_upsampled, P2])
          P2 = keras.layers.Conv2D(
              feature_size,
              kernel_size=3,
              strides=1,
              padding="same",
              name="P2",
          )(P2)
          output_layers["P2"] = P2
  
      # "P6 is obtained via a 3x3 stride-2 conv on C5"
      if 6 in pyramid_levels:
          P6 = keras.layers.Conv2D(
              feature_size,
              kernel_size=3,
              strides=2,
              padding="same",
              name="P6",
          )(backbone_layers["C5"])
          output_layers["P6"] = P6
  
      # "P7 is computed by applying ReLU followed by a 3x3 stride-2 conv on P6"
      if 7 in pyramid_levels:
          if 6 not in pyramid_levels:
              raise ValueError("P6 is required to use P7")
          P7 = keras.layers.Activation("relu", name="C6_relu")(P6)
          P7 = keras.layers.Conv2D(
              feature_size,
              kernel_size=3,
              strides=2,
              padding="same",
              name="P7",
          )(P7)
          output_layers["P7"] = P7
  
      return output_layers
  
file_path: ImageAI/imageai_tf_deprecated/Detection/keras_retinanet/models/retinanet.py
imports: from tensorflow import keras
  from ..None import initializers
  from ..None import layers
  from ..utils.anchors import AnchorParameters
  from .None import assert_training_model
label_desc: Use image node_id 3 for calling a global function with example usage: __create_pyramid_features(backbone_layers, pyramid_levels, feature_size) and returns: output_layers