Computes difference between two sets of metrics. Raises exception if the metrics are inconsistent.
(
metrics_a: MetricsByDatasetByCatByScene,
metrics_b: MetricsByDatasetByCatByScene,
)
| 1198 | |
| 1199 | |
| 1200 | def diff_metrics( |
| 1201 | metrics_a: MetricsByDatasetByCatByScene, |
| 1202 | metrics_b: MetricsByDatasetByCatByScene, |
| 1203 | ): |
| 1204 | """Computes difference between two sets of metrics. |
| 1205 | |
| 1206 | Raises exception if the metrics are inconsistent. |
| 1207 | """ |
| 1208 | metrics_diff = copy.deepcopy(metrics_a) |
| 1209 | for dataset, category_metrics_a in metrics_a.items(): |
| 1210 | if dataset not in metrics_b: |
| 1211 | raise ValueError(f"Dataset {dataset} not found in metrics_b") |
| 1212 | category_metrics_b = metrics_b[dataset] |
| 1213 | for category, scene_metrics_a in category_metrics_a.items(): |
| 1214 | if category not in category_metrics_b: |
| 1215 | raise ValueError(f"Category {category} not found in metrics_b") |
| 1216 | scene_metrics_b = category_metrics_b[category] |
| 1217 | for scene, metrics_a_item in scene_metrics_a.items(): |
| 1218 | if scene not in scene_metrics_b: |
| 1219 | raise ValueError(f"Scene {scene} not found in metrics_b") |
| 1220 | metrics_b_item = scene_metrics_b[scene] |
| 1221 | if ( |
| 1222 | metrics_a_item.error_type != metrics_b_item.error_type |
| 1223 | or not np.all( |
| 1224 | metrics_a_item.error_thresholds |
| 1225 | == metrics_b_item.error_thresholds |
| 1226 | ) |
| 1227 | ): |
| 1228 | raise ValueError("Inconsistent error thresholds or types") |
| 1229 | metrics_diff[dataset][category][scene] = Metrics( |
| 1230 | aucs=metrics_a_item.aucs - metrics_b_item.aucs, |
| 1231 | recalls=metrics_a_item.recalls - metrics_b_item.recalls, |
| 1232 | error_thresholds=metrics_a_item.error_thresholds, |
| 1233 | error_type=metrics_a_item.error_type, |
| 1234 | num_images=metrics_a_item.num_images |
| 1235 | - metrics_b_item.num_images, |
| 1236 | num_reg_images=metrics_a_item.num_reg_images |
| 1237 | - metrics_b_item.num_reg_images, |
| 1238 | num_components=metrics_a_item.num_components |
| 1239 | - metrics_b_item.num_components, |
| 1240 | largest_component=metrics_a_item.largest_component |
| 1241 | - metrics_b_item.largest_component, |
| 1242 | ) |
| 1243 | return metrics_diff |
| 1244 | |
| 1245 | |
| 1246 | def create_result_table( |