From 0fa470a0f8604c904db8a85e8a9c35b2c3d98123 Mon Sep 17 00:00:00 2001 From: Fahmid Arman Date: Tue, 16 Jun 2026 22:43:48 +0600 Subject: [PATCH] fix: prevent NaN propagation in MOT17 tracking metrics Signed-off-by: Fahmid Arman --- .../pedestrian_tracking/testenv/tracking/idf1.py | 10 +++++++++- .../pedestrian_tracking/testenv/tracking/mota.py | 10 +++++++++- .../pedestrian_tracking/testenv/tracking/motp.py | 10 +++++++++- .../pedestrian_tracking/testenv/tracking/precision.py | 10 +++++++++- .../pedestrian_tracking/testenv/tracking/recall.py | 10 +++++++++- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/idf1.py b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/idf1.py index ea4c3ed62..7c165fd24 100644 --- a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/idf1.py +++ b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/idf1.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from collections import OrderedDict from pathlib import Path @@ -46,4 +47,11 @@ def metric(y_true, y_pred): summary = mh.compute_many(accs, names=names, metrics=metrics_name, generate_overall=True) logger.info('Completed') - return round(float(summary.iloc[-1][metrics_name]), 4) + value = float(summary.iloc[-1][metrics_name]) + if math.isnan(value) or math.isinf(value): + logger.warning( + "Metric '{}' returned {} (no valid detections?). Recording 0.0.", + metrics_name[0], value + ) + return 0.0 + return round(value, 4) diff --git a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/mota.py b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/mota.py index 86d2cc4f8..102c8dc51 100644 --- a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/mota.py +++ b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/mota.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from collections import OrderedDict from pathlib import Path @@ -46,4 +47,11 @@ def metric(y_true, y_pred): summary = mh.compute_many(accs, names=names, metrics=metrics_name, generate_overall=True) logger.info('Completed') - return round(float(summary.iloc[-1][metrics_name]), 4) + value = float(summary.iloc[-1][metrics_name]) + if math.isnan(value) or math.isinf(value): + logger.warning( + "Metric '{}' returned {} (no valid detections?). Recording 0.0.", + metrics_name[0], value + ) + return 0.0 + return round(value, 4) diff --git a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/motp.py b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/motp.py index e1b0e3aff..30111461d 100644 --- a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/motp.py +++ b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/motp.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from collections import OrderedDict from pathlib import Path @@ -46,4 +47,11 @@ def metric(y_true, y_pred): summary = mh.compute_many(accs, names=names, metrics=metrics_name, generate_overall=True) logger.info('Completed') - return round(float(summary.iloc[-1][metrics_name]), 4) + value = float(summary.iloc[-1][metrics_name]) + if math.isnan(value) or math.isinf(value): + logger.warning( + "Metric '{}' returned {} (no valid detections?). Recording 0.0.", + metrics_name[0], value + ) + return 0.0 + return round(value, 4) diff --git a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/precision.py b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/precision.py index 5718eddb8..9a72373d0 100644 --- a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/precision.py +++ b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/precision.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from collections import OrderedDict from pathlib import Path @@ -46,4 +47,11 @@ def metric(y_true, y_pred): summary = mh.compute_many(accs, names=names, metrics=metrics_name, generate_overall=True) logger.info('Completed') - return round(float(summary.iloc[-1][metrics_name]), 4) + value = float(summary.iloc[-1][metrics_name]) + if math.isnan(value) or math.isinf(value): + logger.warning( + "Metric '{}' returned {} (no valid detections?). Recording 0.0.", + metrics_name[0], value + ) + return 0.0 + return round(value, 4) diff --git a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/recall.py b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/recall.py index 97752bb24..1dea84b40 100644 --- a/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/recall.py +++ b/examples/MOT17/multiedge_inference_bench/pedestrian_tracking/testenv/tracking/recall.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from collections import OrderedDict from pathlib import Path @@ -46,4 +47,11 @@ def metric(y_true, y_pred): summary = mh.compute_many(accs, names=names, metrics=metrics_name, generate_overall=True) logger.info('Completed') - return round(float(summary.iloc[-1][metrics_name]), 4) + value = float(summary.iloc[-1][metrics_name]) + if math.isnan(value) or math.isinf(value): + logger.warning( + "Metric '{}' returned {} (no valid detections?). Recording 0.0.", + metrics_name[0], value + ) + return 0.0 + return round(value, 4)