File size: 7,106 Bytes
8b80777
6d18e2a
aee59a3
d0f1574
 
7da121b
8b80777
c6ea80c
8b80777
 
870b63f
8b80777
 
6d18e2a
d0f1574
6d18e2a
aee59a3
 
 
6d18e2a
d0f1574
6d18e2a
aee59a3
6d18e2a
d0f1574
6d18e2a
d0f1574
7da121b
6d18e2a
 
aee59a3
6d18e2a
 
 
 
f3b0d73
2278280
f3b0d73
 
 
 
2278280
aee59a3
576a9f6
e1aaeed
0c1d03a
 
 
 
aee59a3
e1aaeed
0c1d03a
 
 
 
576a9f6
 
 
0c1d03a
576a9f6
7da121b
 
0c1d03a
 
 
 
7da121b
0c1d03a
 
7da121b
 
0c1d03a
 
7da121b
0c1d03a
7da121b
0c1d03a
7da121b
 
576a9f6
 
 
 
f7ec5b9
03937fd
 
 
 
 
 
 
576a9f6
 
d0f1574
f3b0d73
7da121b
e1aaeed
7da121b
6d18e2a
d0f1574
2278280
aee59a3
7da121b
 
 
 
 
 
 
 
 
 
 
 
 
6d18e2a
d0f1574
6d18e2a
aee59a3
6d18e2a
d0f1574
7da121b
 
 
 
 
 
 
 
 
6d18e2a
 
7da121b
aee59a3
 
d0f1574
6d18e2a
 
 
 
 
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
---
title: horizon-metrics
tags:
  - evaluate
  - metric
description: "This huggingface metric calculates horizon evaluation metrics using `seametrics.horizon.HorizonMetrics`."
sdk: gradio
sdk_version: 4.36.0
app_file: app.py
pinned: false
emoji: 🌅
---

## SEA-AI/horizon-metrics

This huggingface metric uses `seametrics.horizon.HorizonMetrics` under the hood to calculate the slope and midpoint errors.

## How to Use

To utilize horizon-metrics effectively, start by installing the necessary dependencies using the provided pip command. Once installed, import the evaluate library into your Python environment. Then, use the SEA-AI/horizon-metrics metric to evaluate your horizon prediction models. Ensure that both ground truth and prediction points are correctly formatted before computing the result. Finally, analyze the computed result to gain insights into the performance of your prediction models.

### Getting Started

To get started with horizon-metrics, make sure you have the necessary dependencies installed. This metric relies on the `evaluate` and `seametrics` libraries.

### Installation

```sh
  pip install evaluate git+https://github.com/SEA-AI/seametrics@develop
```

### Basic Usage

This is how you can quickly evaluate your horizon prediction models using SEA-AI/horizon-metrics:

> [!IMPORTANT]  
> The vertical_fov_degrees and height parameters are required. The default value for roll_threshold is 0.5 and for pitch_threshold it is 0.1.

> [!IMPORTANT]  
> The horizon metric should be calculated per sequence. Make sure that the vertical_fov and height are consistent across the inputs and do not change.

##### Use artificial data for testing

```python
ground_truth_points = [[[0.0, 0.5384765625], [1.0, 0.4931640625]],
                       [[0.0, 0.53796875], [1.0, 0.4928515625]],
                       [[0.0, 0.5374609375], [1.0, 0.4925390625]],
                       [[0.0, 0.536953125], [1.0, 0.4922265625]],
                       [[0.0, 0.5364453125], [1.0, 0.4919140625]]]

prediction_points = [[[0.0, 0.5428930956049597], [1.0, 0.4642497615378973]],
                     [[0.0, 0.5428930956049597], [1.0, 0.4642497615378973]],
                     [[0.0, 0.523573113510805], [1.0, 0.47642688648919496]],
                     [[0.0, 0.5200016849393765], [1.0, 0.4728554579177664]],
                     [[0.0, 0.523573113510805], [1.0, 0.47642688648919496]]]
```

##### Load data from fiftyone

```python
# Load data from fiftyone
sequence = "Sentry_2022_11_PROACT_CELADON_7.5M_MOB_2022_11_25_12_29_48"
dataset_name = "SENTRY_VIDEOS_DATASET_QA"
sequence_view = fo.load_dataset(dataset_name).match(F("sequence") == sequence)
sequence_view = sequence_view.select_group_slices("thermal_wide")

# Get the ground truth points
polylines_gt = sequence_view.values("frames.ground_truth_pl")
ground_truth_points = [
    line["polylines"][0]["points"][0] if line is not None else None
    for line in polylines_gt[0]
]

# Get the predicted points
polylines_pred = sequence_view.values(
    "frames.ahoy-IR-b2-whales__XAVIER-AGX-JP46_pl_TnFoV")
prediction_points = [
    line["polylines"][0]["points"][0] if line is not None else None
    for line in polylines_pred[0]
```

##### Calculate horizon metrics

**Input parameters**

- **vertical_fov_degrees (in degrees)**: vertical field of view
- **height (in pixels)**: height of the images
- **roll_threshold (in degrees)**: This value is internally converted to a slope threshold. It is used to determine the number of slope error jumps. A slope error jump is counted if the difference in slope error between two successive frames exceeds this threshold.

- **pitch_threshold (in degrees)**: This value is internally converted to the midpoint. It is used as a threshold to determine the number of midpoint error jumps. A midpoint error jump is counted if the difference in midpoint error between two successive frames exceeds this threshold.

```python
import evaluate

module = evaluate.load("SEA-AI/horizon-metrics", vertical_fov_degrees=25.6, height=512, roll_threshold=0.5, pitch_threshold=0.1)
module.add(predictions=prediction_points, references=ground_truth_points)
module.compute()

```

This is output the evaluation metrics for your horizon prediction model:

```console
{'average_slope_error': 0.39394822776758726,
 'average_midpoint_error': 0.0935801366906932,
 'average_midpoint_error_px': 1.871602733813864,
 'stddev_slope_error': 0.3809031270343266,
 'stddev_midpoint_error': 0.23003871087476538,
 'stddev_midpoint_error_px': 4.6007742174953075,
 'max_slope_error': 3.5549008029526132,
 'max_midpoint_error': 2.515424321301225,
 'max_midpoint_error_px': 50.3084864260245,
 'num_slope_error_jumps': 173,
 'num_midpoint_error_jumps': 205,
 'detection_rate': 0.2606486908948808}
```

### Output Values

SEA-AI/horizon-metrics provides the following performance metrics for horizon prediction:

- **average_slope_error**: Measures the average difference in slope between the predicted and ground truth horizon in degree.
- **average_midpoint_error**: Represents the average difference in midpoint position between the predicted and ground truth horizon.
- **average_midpoint_error_px**: Represents the average difference in midpoint position between the predicted and ground truth horizon, measured in pixels.
- **stddev_slope_error**: Indicates the variability of errors in slope between the predicted and ground truth horizon in degree.
- **stddev_midpoint_error**: Quantifies the variability of errors in midpoint position between the predicted and ground truth horizon in degree.
- **stddev_midpoint_error_px**: Quantifies the variability of errors in midpoint position between the predicted and ground truth horizon, measured in pixels.
- **max_slope_error**: Represents the maximum difference in slope between the predicted and ground truth horizon in degree.
- **max_midpoint_error**: Indicates the maximum difference in midpoint position between the predicted and ground truth horizon in degree.
- **max_midpoint_error_px**: Indicates the maximum difference in midpoint position between the predicted and ground truth horizon, measured in pixels.
- **num_slope_error_jumps**: Calculates the differences between errors in successive frames for the slope. It then counts the number of jumps in these errors by comparing the absolute differences to a specified threshold.
- **num_midpoint_error_jumps**: Calculates the differences between errors in successive frames for the midpoint. It then counts the number of jumps in these errors by comparing the absolute differences to a specified threshold.
- **detection_rate**: Measures the proportion of frames in which the horizon is successfully detected out of the total number of frames.

## Further References

Explore the [seametrics GitHub repository](https://github.com/SEA-AI/seametrics/tree/main) for more details on the underlying library.

## Contribution

Your contributions are welcome! If you'd like to improve SEA-AI/horizon-metrics or add new features, please feel free to fork the repository, make your changes, and submit a pull request.