# CenterNet meta-architecture from the "Objects as Points" [2] paper with the
# hourglass[1] backbone. This config achieves an mAP of 42.8/64.5 +/- 0.16 on
# COCO 17 (averaged over 5 runs). This config is TPU compatible.
# [1]: https://arxiv.org/abs/1603.06937
# [2]: https://arxiv.org/abs/1904.07850

model {
  center_net {
    num_classes: 90
    feature_extractor {
      type: "hourglass_104"
      channel_means: 104.01361846923828
      channel_means: 114.03422546386719
      channel_means: 119.91659545898438
      channel_stds: 73.60276794433594
      channel_stds: 69.89082336425781
      channel_stds: 70.91507720947266
      bgr_ordering: true
    }
    image_resizer {
      keep_aspect_ratio_resizer {
        min_dimension: 1024
        max_dimension: 1024
        pad_to_max_dimension: true
      }
    }
    object_detection_task {
      task_loss_weight: 1.0
      offset_loss_weight: 1.0
      scale_loss_weight: 0.10000000149011612
      localization_loss {
        l1_localization_loss {
        }
      }
    }
    object_center_params {
      object_center_loss_weight: 1.0
      classification_loss {
        penalty_reduced_logistic_focal_loss {
          alpha: 2.0
          beta: 4.0
        }
      }
      min_box_overlap_iou: 0.699999988079071
      max_box_predictions: 100
    }
    keypoint_label_map_path: "PATH_TO_BE_CONFIGURED"
    keypoint_estimation_task {
      task_name: "human_pose"
      task_loss_weight: 1.0
      loss {
        localization_loss {
          l1_localization_loss {
          }
        }
        classification_loss {
          penalty_reduced_logistic_focal_loss {
            alpha: 2.0
            beta: 4.0
          }
        }
      }
      keypoint_class_name: "/m/01g317"
      keypoint_label_to_std {
        key: "left_ankle"
        value: 0.8899999856948853
      }
      keypoint_label_to_std {
        key: "left_ear"
        value: 0.3499999940395355
      }
      keypoint_label_to_std {
        key: "left_elbow"
        value: 0.7200000286102295
      }
      keypoint_label_to_std {
        key: "left_eye"
        value: 0.25
      }
      keypoint_label_to_std {
        key: "left_hip"
        value: 1.0700000524520874
      }
      keypoint_label_to_std {
        key: "left_knee"
        value: 0.8899999856948853
      }
      keypoint_label_to_std {
        key: "left_shoulder"
        value: 0.7900000214576721
      }
      keypoint_label_to_std {
        key: "left_wrist"
        value: 0.6200000047683716
      }
      keypoint_label_to_std {
        key: "nose"
        value: 0.25999999046325684
      }
      keypoint_label_to_std {
        key: "right_ankle"
        value: 0.8899999856948853
      }
      keypoint_label_to_std {
        key: "right_ear"
        value: 0.3499999940395355
      }
      keypoint_label_to_std {
        key: "right_elbow"
        value: 0.7200000286102295
      }
      keypoint_label_to_std {
        key: "right_eye"
        value: 0.25
      }
      keypoint_label_to_std {
        key: "right_hip"
        value: 1.0700000524520874
      }
      keypoint_label_to_std {
        key: "right_knee"
        value: 0.8899999856948853
      }
      keypoint_label_to_std {
        key: "right_shoulder"
        value: 0.7900000214576721
      }
      keypoint_label_to_std {
        key: "right_wrist"
        value: 0.6200000047683716
      }
      keypoint_regression_loss_weight: 0.10000000149011612
      keypoint_heatmap_loss_weight: 1.0
      keypoint_offset_loss_weight: 1.0
      offset_peak_radius: 3
      per_keypoint_offset: true
    }
  }
}
train_config {
  batch_size: 128
  data_augmentation_options {
    random_horizontal_flip {
      keypoint_flip_permutation: 0
      keypoint_flip_permutation: 2
      keypoint_flip_permutation: 1
      keypoint_flip_permutation: 4
      keypoint_flip_permutation: 3
      keypoint_flip_permutation: 6
      keypoint_flip_permutation: 5
      keypoint_flip_permutation: 8
      keypoint_flip_permutation: 7
      keypoint_flip_permutation: 10
      keypoint_flip_permutation: 9
      keypoint_flip_permutation: 12
      keypoint_flip_permutation: 11
      keypoint_flip_permutation: 14
      keypoint_flip_permutation: 13
      keypoint_flip_permutation: 16
      keypoint_flip_permutation: 15
    }
  }
  data_augmentation_options {
    random_adjust_hue {
    }
  }
  data_augmentation_options {
    random_adjust_contrast {
    }
  }
  data_augmentation_options {
    random_adjust_saturation {
    }
  }
  data_augmentation_options {
    random_adjust_brightness {
    }
  }
  data_augmentation_options {
    random_square_crop_by_scale {
      scale_min: 0.6000000238418579
      scale_max: 1.2999999523162842
    }
  }
  optimizer {
    adam_optimizer {
      learning_rate {
        cosine_decay_learning_rate {
          learning_rate_base: 0.0010000000474974513
          total_steps: 250000
          warmup_learning_rate: 0.0002500000118743628
          warmup_steps: 5000
        }
      }
      epsilon: 1.0000000116860974e-07
    }
    use_moving_average: false
  }
  fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED"
  num_steps: 250000
  max_number_of_boxes: 100
  unpad_groundtruth_tensors: false
  fine_tune_checkpoint_type: "detection"
  fine_tune_checkpoint_version: V2
}
train_input_reader: {
  label_map_path: "PATH_TO_BE_CONFIGURED/label_map.txt"
  tf_record_input_reader {
    input_path: "PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
  }
  num_keypoints: 17
}
eval_config {
  num_visualizations: 10
  metrics_set: "coco_detection_metrics"
  use_moving_averages: false
  min_score_threshold: 0.20000000298023224
  max_num_boxes_to_visualize: 20
  batch_size: 1
  parameterized_metric {
    coco_keypoint_metrics {
      class_label: "person"
      keypoint_label_to_sigmas {
        key: "left_ankle"
        value: 0.08900000154972076
      }
      keypoint_label_to_sigmas {
        key: "left_ear"
        value: 0.03500000014901161
      }
      keypoint_label_to_sigmas {
        key: "left_elbow"
        value: 0.07199999690055847
      }
      keypoint_label_to_sigmas {
        key: "left_eye"
        value: 0.02500000037252903
      }
      keypoint_label_to_sigmas {
        key: "left_hip"
        value: 0.10700000077486038
      }
      keypoint_label_to_sigmas {
        key: "left_knee"
        value: 0.08699999749660492
      }
      keypoint_label_to_sigmas {
        key: "left_shoulder"
        value: 0.07900000363588333
      }
      keypoint_label_to_sigmas {
        key: "left_wrist"
        value: 0.06199999898672104
      }
      keypoint_label_to_sigmas {
        key: "nose"
        value: 0.026000000536441803
      }
      keypoint_label_to_sigmas {
        key: "right_ankle"
        value: 0.08900000154972076
      }
      keypoint_label_to_sigmas {
        key: "right_ear"
        value: 0.03500000014901161
      }
      keypoint_label_to_sigmas {
        key: "right_elbow"
        value: 0.07199999690055847
      }
      keypoint_label_to_sigmas {
        key: "right_eye"
        value: 0.02500000037252903
      }
      keypoint_label_to_sigmas {
        key: "right_hip"
        value: 0.10700000077486038
      }
      keypoint_label_to_sigmas {
        key: "right_knee"
        value: 0.08699999749660492
      }
      keypoint_label_to_sigmas {
        key: "right_shoulder"
        value: 0.07900000363588333
      }
      keypoint_label_to_sigmas {
        key: "right_wrist"
        value: 0.06199999898672104
      }
    }
  }
  keypoint_edge {
    start: 0
    end: 1
  }
  keypoint_edge {
    start: 0
    end: 2
  }
  keypoint_edge {
    start: 1
    end: 3
  }
  keypoint_edge {
    start: 2
    end: 4
  }
  keypoint_edge {
    start: 0
    end: 5
  }
  keypoint_edge {
    start: 0
    end: 6
  }
  keypoint_edge {
    start: 5
    end: 7
  }
  keypoint_edge {
    start: 7
    end: 9
  }
  keypoint_edge {
    start: 6
    end: 8
  }
  keypoint_edge {
    start: 8
    end: 10
  }
  keypoint_edge {
    start: 5
    end: 6
  }
  keypoint_edge {
    start: 5
    end: 11
  }
  keypoint_edge {
    start: 6
    end: 12
  }
  keypoint_edge {
    start: 11
    end: 12
  }
  keypoint_edge {
    start: 11
    end: 13
  }
  keypoint_edge {
    start: 13
    end: 15
  }
  keypoint_edge {
    start: 12
    end: 14
  }
  keypoint_edge {
    start: 14
    end: 16
  }
}
eval_input_reader: {
  label_map_path: "PATH_TO_BE_CONFIGURED/label_map.txt"
  shuffle: false
  num_epochs: 1
  tf_record_input_reader {
    input_path: "PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
  }
  num_keypoints: 17
}
