File size: 5,993 Bytes
0b8359d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
syntax = "proto2";

package object_detection.protos;

// Message for configuring DetectionModel evaluation jobs (eval.py).
// Next id - 33
message EvalConfig {
  optional uint32 batch_size = 25 [default = 1];
  // Number of visualization images to generate.
  optional uint32 num_visualizations = 1 [default = 10];

  // Number of examples to process of evaluation.
  optional uint32 num_examples = 2 [default = 5000, deprecated = true];

  // How often to run evaluation.
  optional uint32 eval_interval_secs = 3 [default = 300];

  // Maximum number of times to run evaluation. If set to 0, will run forever.
  optional uint32 max_evals = 4 [default = 0, deprecated = true];

  // Whether the TensorFlow graph used for evaluation should be saved to disk.
  optional bool save_graph = 5 [default = false];

  // Path to directory to store visualizations in. If empty, visualization
  // images are not exported (only shown on Tensorboard).
  optional string visualization_export_dir = 6 [default = ""];

  // BNS name of the TensorFlow master.
  optional string eval_master = 7 [default = ""];

  // Type of metrics to use for evaluation.
  repeated string metrics_set = 8;

  // Type of metrics to use for evaluation. Unlike `metrics_set` above, this
  // field allows configuring evaluation metric through config files.
  repeated ParameterizedMetric parameterized_metric = 31;

  // Path to export detections to COCO compatible JSON format.
  optional string export_path = 9 [default =''];

  // Option to not read groundtruth labels and only export detections to
  // COCO-compatible JSON file.
  optional bool ignore_groundtruth = 10 [default = false];

  // Use exponential moving averages of variables for evaluation.
  // TODO(rathodv): When this is false make sure the model is constructed
  // without moving averages in restore_fn.
  optional bool use_moving_averages = 11 [default = false];

  // Whether to evaluate instance masks.
  // Note that since there is no evaluation code currently for instance
  // segmentation this option is unused.
  optional bool eval_instance_masks = 12 [default = false];

  // Minimum score threshold for a detected object box to be visualized
  optional float min_score_threshold = 13 [default = 0.5];

  // Maximum number of detections to visualize
  optional int32 max_num_boxes_to_visualize = 14 [default = 20];

  // When drawing a single detection, each label is by default visualized as
  // <label name> : <label score>. One can skip the name or/and score using the
  // following fields:
  optional bool skip_scores = 15 [default = false];
  optional bool skip_labels = 16 [default = false];

  // Whether to show groundtruth boxes in addition to detected boxes in
  // visualizations.
  optional bool visualize_groundtruth_boxes = 17 [default = false];

  // Box color for visualizing groundtruth boxes.
  optional string groundtruth_box_visualization_color = 18 [default = "black"];

  // Whether to keep image identifier in filename when exported to
  // visualization_export_dir.
  optional bool keep_image_id_for_visualization_export = 19 [default = false];

  // Whether to retain original images (i.e. not pre-processed) in the tensor
  // dictionary, so that they can be displayed in Tensorboard.
  optional bool retain_original_images = 23 [default = true];

  // If True, additionally include per-category metrics.
  optional bool include_metrics_per_category = 24 [default = false];

  // Recall range within which precision should be computed.
  optional float recall_lower_bound = 26 [default = 0.0];
  optional float recall_upper_bound = 27 [default = 1.0];

  // Whether to retain additional channels (i.e. not pre-processed) in the
  // tensor dictionary, so that they can be displayed in Tensorboard.
  optional bool retain_original_image_additional_channels = 28
      [default = false];

  // When this flag is set, images are not resized during evaluation.
  // When this flag is not set (default case), image are resized according
  // to the image_resizer config in the model during evaluation.
  optional bool force_no_resize = 29 [default = false];

  // Whether to use a dummy loss in eval so model.loss() is not executed.
  optional bool use_dummy_loss_in_eval = 30 [default = false];

  // Specifies which keypoints should be connected by an edge, which may improve
  // visualization. An example would be human pose estimation where certain
  // joints can be connected.
  repeated KeypointEdge keypoint_edge = 32;
}

// A message to configure parameterized evaluation metric.
message ParameterizedMetric {
  oneof parameterized_metric {
    CocoKeypointMetrics coco_keypoint_metrics = 1;
  }
}

// A message to evaluate COCO keypoint metrics for a specific class.
message CocoKeypointMetrics {
  // Identifies the class of object to which keypoints belong. By default this
  // should use the class's "display_name" in the label map.
  optional string class_label = 1;
  // Keypoint specific standard deviations for COCO keypoint metrics, which
  // controls how OKS is computed.
  // See http://cocodataset.org/#keypoints-eval for details.
  // If your keypoints are similar to the COCO keypoints use the precomputed
  // standard deviations below:
  // "nose": 0.026
  // "left_eye": 0.025
  // "right_eye": 0.025
  // "left_ear": 0.035
  // "right_ear": 0.035
  // "left_shoulder": 0.079
  // "right_shoulder": 0.079
  // "left_elbow": 0.072
  // "right_elbow": 0.072
  // "left_wrist": 0.062
  // "right_wrist": 0.062
  // "left_hip": 0.107
  // "right_hip": 0.107
  // "left_knee": 0.087
  // "right_knee": 0.087
  // "left_ankle": 0.089
  // "right_ankle": 0.089
  map<string, float> keypoint_label_to_sigmas = 2;
}

// Defines an edge that should be drawn between two keypoints.
message KeypointEdge {
  // Index of the keypoint where the edge starts from. Index starts at 0.
  optional int32 start = 1;

  // Index of the keypoint where the edge ends. Index starts at 0.
  optional int32 end = 2;
}