Spaces:
Sleeping
Sleeping
realization of metrics
Browse files- user-friendly-metrics.py +33 -16
user-friendly-metrics.py
CHANGED
@@ -190,10 +190,19 @@ def calculate_from_payload(payload: dict,
|
|
190 |
print("models: ", models)
|
191 |
print("sequence_list: ", sequence_list)
|
192 |
|
193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
|
195 |
for sequence in sequence_list:
|
196 |
-
|
197 |
frames = payload['sequences'][sequence][gt_field_name]
|
198 |
|
199 |
all_formated_references = {"all": []}
|
@@ -216,7 +225,6 @@ def calculate_from_payload(payload: dict,
|
|
216 |
if filter_value >= filter_range_limits[0] and filter_value <= filter_range_limits[1]:
|
217 |
all_formated_references[filter][filter_range_name].append([frame_id+1, index, x, y, w, h])
|
218 |
|
219 |
-
|
220 |
for model in models:
|
221 |
frames = payload['sequences'][sequence][model]
|
222 |
formated_predictions = []
|
@@ -233,24 +241,33 @@ def calculate_from_payload(payload: dict,
|
|
233 |
print("formated_predictions: ", formated_predictions)
|
234 |
print("formated_references: ", all_formated_references)
|
235 |
if len(formated_predictions) == 0:
|
236 |
-
|
237 |
elif len(all_formated_references["all"]) == 0:
|
238 |
-
|
239 |
else:
|
240 |
-
|
241 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
for filter, filter_ranges in filters.items():
|
243 |
-
|
244 |
for filter_range in filter_ranges:
|
|
|
245 |
filter_range_name = filter_range[0]
|
246 |
-
|
|
|
|
|
247 |
|
248 |
-
|
249 |
-
|
250 |
-
global_and_per_sequence_output["per_sequence"] = output
|
251 |
|
252 |
-
return
|
253 |
-
|
254 |
def sum_dicts(dict1, dict2):
|
255 |
"""
|
256 |
Recursively sums the numerical values in two nested dictionaries.
|
@@ -272,13 +289,13 @@ def sum_dicts(dict1, dict2):
|
|
272 |
|
273 |
def realize_metrics(metrics_dict,
|
274 |
recognition_thresholds):
|
275 |
-
|
276 |
metrics_dict["precision"] = metrics_dict["tp"]/(metrics_dict["tp"]+metrics_dict["fp"])
|
277 |
metrics_dict["recall"] = metrics_dict["tp"]/(metrics_dict["tp"]+metrics_dict["fn"])
|
278 |
metrics_dict["f1"] = 2*metrics_dict["precision"]*metrics_dict["recall"]/(metrics_dict["precision"]+metrics_dict["recall"])
|
279 |
|
280 |
for th in recognition_thresholds:
|
281 |
-
metrics_dict[f"recognition_{th}"] = metrics_dict[f"recognized_{th}"]/metrics_dict["
|
282 |
|
283 |
return metrics_dict
|
284 |
|
|
|
190 |
print("models: ", models)
|
191 |
print("sequence_list: ", sequence_list)
|
192 |
|
193 |
+
metrics_per_sequence = {}
|
194 |
+
metrics_global = {}
|
195 |
+
for model in models:
|
196 |
+
metrics_global[model] = {}
|
197 |
+
metrics_global[model]["all"] = {}
|
198 |
+
for filter, filter_ranges in filters.items():
|
199 |
+
metrics_global[model][filter] = {}
|
200 |
+
for filter_range in filter_ranges:
|
201 |
+
filter_range_name = filter_range[0]
|
202 |
+
metrics_global[model][filter][filter_range_name] = {}
|
203 |
|
204 |
for sequence in sequence_list:
|
205 |
+
metrics_per_sequence[sequence] = {}
|
206 |
frames = payload['sequences'][sequence][gt_field_name]
|
207 |
|
208 |
all_formated_references = {"all": []}
|
|
|
225 |
if filter_value >= filter_range_limits[0] and filter_value <= filter_range_limits[1]:
|
226 |
all_formated_references[filter][filter_range_name].append([frame_id+1, index, x, y, w, h])
|
227 |
|
|
|
228 |
for model in models:
|
229 |
frames = payload['sequences'][sequence][model]
|
230 |
formated_predictions = []
|
|
|
241 |
print("formated_predictions: ", formated_predictions)
|
242 |
print("formated_references: ", all_formated_references)
|
243 |
if len(formated_predictions) == 0:
|
244 |
+
metrics_per_sequence[sequence][model] = "Model had no predictions."
|
245 |
elif len(all_formated_references["all"]) == 0:
|
246 |
+
metrics_per_sequence[sequence][model] = "No ground truth."
|
247 |
else:
|
248 |
+
metrics_per_sequence[sequence][model] = {}
|
249 |
+
|
250 |
+
sequence_metrics = calculate(formated_predictions, all_formated_references["all"], max_iou=max_iou, recognition_thresholds = recognition_thresholds)
|
251 |
+
sequence_metrics = realize_metrics(sequence_metrics, recognition_thresholds)
|
252 |
+
metrics_per_sequence[sequence][model]["all"] = sequence_metrics
|
253 |
+
|
254 |
+
metrics_global[model]["all"] = sum_dicts(metrics_global[model], sequence_metrics)
|
255 |
+
metrics_global[model]["all"] = realize_metrics(metrics_global[model]["all"], recognition_thresholds)
|
256 |
+
|
257 |
for filter, filter_ranges in filters.items():
|
258 |
+
metrics_per_sequence[sequence][model][filter] = {}
|
259 |
for filter_range in filter_ranges:
|
260 |
+
|
261 |
filter_range_name = filter_range[0]
|
262 |
+
sequence_metrics = calculate(formated_predictions, all_formated_references[filter][filter_range_name], max_iou=max_iou, recognition_thresholds = recognition_thresholds)
|
263 |
+
sequence_metrics = realize_metrics(sequence_metrics, recognition_thresholds)
|
264 |
+
metrics_per_sequence[sequence][model][filter][filter_range_name] = sequence_metrics
|
265 |
|
266 |
+
metrics_global[model][filter][filter_range_name] = sum_dicts(metrics_global[model][filter][filter_range_name], sequence_metrics)
|
267 |
+
metrics_global[model][filter][filter_range_name] = realize_metrics(metrics_global[model][filter][filter_range_name], recognition_thresholds)
|
|
|
268 |
|
269 |
+
return metrics_per_sequence
|
270 |
+
|
271 |
def sum_dicts(dict1, dict2):
|
272 |
"""
|
273 |
Recursively sums the numerical values in two nested dictionaries.
|
|
|
289 |
|
290 |
def realize_metrics(metrics_dict,
|
291 |
recognition_thresholds):
|
292 |
+
|
293 |
metrics_dict["precision"] = metrics_dict["tp"]/(metrics_dict["tp"]+metrics_dict["fp"])
|
294 |
metrics_dict["recall"] = metrics_dict["tp"]/(metrics_dict["tp"]+metrics_dict["fn"])
|
295 |
metrics_dict["f1"] = 2*metrics_dict["precision"]*metrics_dict["recall"]/(metrics_dict["precision"]+metrics_dict["recall"])
|
296 |
|
297 |
for th in recognition_thresholds:
|
298 |
+
metrics_dict[f"recognition_{th}"] = metrics_dict[f"recognized_{th}"]/metrics_dict["unique_gt_ids"]
|
299 |
|
300 |
return metrics_dict
|
301 |
|