Tijmen
Age, gender and race prediction models with benchmark
8a7c723 verified
Raw
History Blame Contribute Delete
1.34 kB
"""Quickstart: predict, then correct aggregate shares for classifier error."""
from collections import Counter
import numpy as np, pandas as pd
from huggingface_hub import hf_hub_download
from predict import DemographicPredictor
from correction import correct_proportions
REPO = "Tijmen/age-gender-race-prediction"
# --- 1. per-image prediction -------------------------------------------------
p = DemographicPredictor()
print(p.predict("example.jpg"))
# --- 2. corpus shares --------------------------------------------------------
paths = ["a.jpg", "b.jpg", "c.jpg"] # your corpus
results = p.predict_batch(paths)
labels = ["White", "Black", "Asian", "Hispanic"]
counts = Counter(r["race_four"] for r in results)
n = sum(counts[l] for l in labels)
p_obs = np.array([counts[l] / n for l in labels]) if n else np.zeros(4)
print("observed :", dict(zip(labels, (p_obs * 100).round(2))))
# --- 3. correct for classifier error ----------------------------------------
# Photographic corpus -> the real-domain matrix. For AI-generated images use
# confusion_race_flux_ipw.csv instead; the error profiles differ.
M = pd.read_csv(hf_hub_download(REPO, "benchmark/confusion_race_real_ipw.csv"),
index_col=0).values
print("corrected:", dict(zip(labels, (correct_proportions(p_obs, M) * 100).round(2))))