def _construct_prediction_heads(self, num_classes, num_feature_outputs, class_prediction_bias_init):
    'Constructs the prediction heads based on the specific parameters.\n\n    Args:\n      num_classes: An integer indicating how many classes in total to predict.\n      num_feature_outputs: An integer indicating how many feature outputs to use\n        for calculating the loss. The Objects as Points paper attaches loss\n        functions to multiple (`num_feature_outputs`) feature maps in the the\n        backbone. E.g. for the hourglass backbone, `num_feature_outputs` is 2.\n      class_prediction_bias_init: float, the initial value of bias in the\n        convolutional kernel of the class prediction head. If set to None, the\n        bias is initialized with zeros.\n\n    Returns:\n      A dictionary of keras modules generated by calling make_prediction_net\n      function. It will also create and set a private member of the class when\n      learning the tracking task.\n    '
    prediction_heads = {}
    prediction_heads[OBJECT_CENTER] = [make_prediction_net(num_classes, bias_fill=class_prediction_bias_init) for _ in range(num_feature_outputs)]
    if (self._od_params is not None):
        prediction_heads[BOX_SCALE] = [make_prediction_net(NUM_SIZE_CHANNELS) for _ in range(num_feature_outputs)]
        prediction_heads[BOX_OFFSET] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    if (self._kp_params_dict is not None):
        for (task_name, kp_params) in self._kp_params_dict.items():
            num_keypoints = len(kp_params.keypoint_indices)
            prediction_heads[get_keypoint_name(task_name, KEYPOINT_HEATMAP)] = [make_prediction_net(num_keypoints, bias_fill=kp_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
            prediction_heads[get_keypoint_name(task_name, KEYPOINT_REGRESSION)] = [make_prediction_net((NUM_OFFSET_CHANNELS * num_keypoints)) for _ in range(num_feature_outputs)]
            if kp_params.per_keypoint_offset:
                prediction_heads[get_keypoint_name(task_name, KEYPOINT_OFFSET)] = [make_prediction_net((NUM_OFFSET_CHANNELS * num_keypoints)) for _ in range(num_feature_outputs)]
            else:
                prediction_heads[get_keypoint_name(task_name, KEYPOINT_OFFSET)] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    if (self._mask_params is not None):
        prediction_heads[SEGMENTATION_HEATMAP] = [make_prediction_net(num_classes, bias_fill=self._mask_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
    if (self._densepose_params is not None):
        prediction_heads[DENSEPOSE_HEATMAP] = [make_prediction_net(self._densepose_params.num_parts, bias_fill=self._densepose_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
        prediction_heads[DENSEPOSE_REGRESSION] = [make_prediction_net((2 * self._densepose_params.num_parts)) for _ in range(num_feature_outputs)]
    if (self._track_params is not None):
        prediction_heads[TRACK_REID] = [make_prediction_net(self._track_params.reid_embed_size) for _ in range(num_feature_outputs)]
        self.track_reid_classification_net = tf.keras.Sequential()
        for _ in range((self._track_params.num_fc_layers - 1)):
            self.track_reid_classification_net.add(tf.keras.layers.Dense(self._track_params.reid_embed_size, input_shape=(self._track_params.reid_embed_size,)))
            self.track_reid_classification_net.add(tf.keras.layers.BatchNormalization())
            self.track_reid_classification_net.add(tf.keras.layers.ReLU())
        self.track_reid_classification_net.add(tf.keras.layers.Dense(self._track_params.num_track_ids, input_shape=(self._track_params.reid_embed_size,)))
    if (self._temporal_offset_params is not None):
        prediction_heads[TEMPORAL_OFFSET] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    return prediction_heads
Constructs the prediction heads based on the specific parameters.

Args:
  num_classes: An integer indicating how many classes in total to predict.
  num_feature_outputs: An integer indicating how many feature outputs to use
    for calculating the loss. The Objects as Points paper attaches loss
    functions to multiple (`num_feature_outputs`) feature maps in the the
    backbone. E.g. for the hourglass backbone, `num_feature_outputs` is 2.
  class_prediction_bias_init: float, the initial value of bias in the
    convolutional kernel of the class prediction head. If set to None, the
    bias is initialized with zeros.

Returns:
  A dictionary of keras modules generated by calling make_prediction_net
  function. It will also create and set a private member of the class when
  learning the tracking task.
def _construct_prediction_heads(self, num_classes, num_feature_outputs, class_prediction_bias_init):
    'Constructs the prediction heads based on the specific parameters.\n\n    Args:\n      num_classes: An integer indicating how many classes in total to predict.\n      num_feature_outputs: An integer indicating how many feature outputs to use\n        for calculating the loss. The Objects as Points paper attaches loss\n        functions to multiple (`num_feature_outputs`) feature maps in the the\n        backbone. E.g. for the hourglass backbone, `num_feature_outputs` is 2.\n      class_prediction_bias_init: float, the initial value of bias in the\n        convolutional kernel of the class prediction head. If set to None, the\n        bias is initialized with zeros.\n\n    Returns:\n      A dictionary of keras modules generated by calling make_prediction_net\n      function. It will also create and set a private member of the class when\n      learning the tracking task.\n    '
    prediction_heads = {}
    prediction_heads[OBJECT_CENTER] = [make_prediction_net(num_classes, bias_fill=class_prediction_bias_init) for _ in range(num_feature_outputs)]
    if (self._od_params is not None):
        prediction_heads[BOX_SCALE] = [make_prediction_net(NUM_SIZE_CHANNELS) for _ in range(num_feature_outputs)]
        prediction_heads[BOX_OFFSET] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    if (self._kp_params_dict is not None):
        for (task_name, kp_params) in self._kp_params_dict.items():
            num_keypoints = len(kp_params.keypoint_indices)
            prediction_heads[get_keypoint_name(task_name, KEYPOINT_HEATMAP)] = [make_prediction_net(num_keypoints, bias_fill=kp_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
            prediction_heads[get_keypoint_name(task_name, KEYPOINT_REGRESSION)] = [make_prediction_net((NUM_OFFSET_CHANNELS * num_keypoints)) for _ in range(num_feature_outputs)]
            if kp_params.per_keypoint_offset:
                prediction_heads[get_keypoint_name(task_name, KEYPOINT_OFFSET)] = [make_prediction_net((NUM_OFFSET_CHANNELS * num_keypoints)) for _ in range(num_feature_outputs)]
            else:
                prediction_heads[get_keypoint_name(task_name, KEYPOINT_OFFSET)] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    if (self._mask_params is not None):
        prediction_heads[SEGMENTATION_HEATMAP] = [make_prediction_net(num_classes, bias_fill=self._mask_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
    if (self._densepose_params is not None):
        prediction_heads[DENSEPOSE_HEATMAP] = [make_prediction_net(self._densepose_params.num_parts, bias_fill=self._densepose_params.heatmap_bias_init) for _ in range(num_feature_outputs)]
        prediction_heads[DENSEPOSE_REGRESSION] = [make_prediction_net((2 * self._densepose_params.num_parts)) for _ in range(num_feature_outputs)]
    if (self._track_params is not None):
        prediction_heads[TRACK_REID] = [make_prediction_net(self._track_params.reid_embed_size) for _ in range(num_feature_outputs)]
        self.track_reid_classification_net = tf.keras.Sequential()
        for _ in range((self._track_params.num_fc_layers - 1)):
            self.track_reid_classification_net.add(tf.keras.layers.Dense(self._track_params.reid_embed_size, input_shape=(self._track_params.reid_embed_size,)))
            self.track_reid_classification_net.add(tf.keras.layers.BatchNormalization())
            self.track_reid_classification_net.add(tf.keras.layers.ReLU())
        self.track_reid_classification_net.add(tf.keras.layers.Dense(self._track_params.num_track_ids, input_shape=(self._track_params.reid_embed_size,)))
    if (self._temporal_offset_params is not None):
        prediction_heads[TEMPORAL_OFFSET] = [make_prediction_net(NUM_OFFSET_CHANNELS) for _ in range(num_feature_outputs)]
    return prediction_heads