Adding the metrics file.
This commit is contained in:
51
src/facebias/metrics.py
Normal file
51
src/facebias/metrics.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from facebias.estimators import Capability
|
||||||
|
|
||||||
|
|
||||||
|
def find_common_capabilities(
|
||||||
|
gt: dict[str, dict[Capability, Any]],
|
||||||
|
preds: dict[str, dict[Capability, Any]]
|
||||||
|
) -> list[str]:
|
||||||
|
"""Iterates on `preds` and `gt`, finding common model capabilities.
|
||||||
|
|
||||||
|
Some models predict different features of face images. Some predict sex,
|
||||||
|
age and skin color, while others may predict only one of these features, or
|
||||||
|
others beyond them. This function finds the common capabilities, returning
|
||||||
|
them as a list.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
gt: dict[str, dict[Capability, Any]]
|
||||||
|
Ground-truth data indexed by element ID, and values are a
|
||||||
|
feature -> prediction dictionary.
|
||||||
|
|
||||||
|
preds: dict[str, dict[Capability, Any]]
|
||||||
|
Predictions data in the same format as `gt`.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
common_keys: list[Capability]
|
||||||
|
The common features between `gt` and `preds`. If no common features are
|
||||||
|
found, returns an empty list.
|
||||||
|
"""
|
||||||
|
# Find the first common element between the `gt` and `preds`.
|
||||||
|
it = iter(gt)
|
||||||
|
common_elem = ""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
common_elem = next(it)
|
||||||
|
except StopIteration:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if common_elem in preds:
|
||||||
|
break
|
||||||
|
|
||||||
|
if not common_elem:
|
||||||
|
return []
|
||||||
|
|
||||||
|
gt_keys = set(gt[common_elem].keys())
|
||||||
|
preds_keys = set(preds[common_elem].keys())
|
||||||
|
return list(gt_keys & preds_keys)
|
||||||
Reference in New Issue
Block a user