AgeRaceGenderNet

AgeRaceGenderNet is a lightweight, multi-task face classification model capable of predicting age, gender, and race from facial images. It is built with a Swin Transformer V2 (Tiny) backbone and designed for fast inference (~5.94 GFLOPs).
Tasks & Outputs
This model simultaneously predicts:
[age]: Integer from
0
to116
, representing estimated age.[gender]:
0
for male,1
for female.[race]: Integer from
0
to4
representing:0
: White1
: Black2
: Asian3
: Indian4
: Others (e.g., Hispanic, Latino, Middle Eastern)
Model Architecture
- Backbone: Swin V2 Tiny (pretrained and fine-tuned)
- Head: Multi-task architecture with dedicated classification heads for each demographic task.
- Criterion: Custom
MultiTaskLoss
function - Total Parameters: 28.4M
- Trainable: 25.7M
- Non-trainable: 2.7M
- Model Size: ~113.7 MB
- Inference Cost: ~5.94 GFLOPs
Training Dataset
The model is trained on UTKFace Dataset
Usage example
NOTE: The input image is assumed to be cropped and aligned to contain only the face
import onnxruntime as ort
from PIL import Image
from torchvision import transforms
import numpy as np
# Load ONNX model
session = ort.InferenceSession("AgeRaceGenderNet_v1.onnx")
# Get input and output names
input_name = session.get_inputs()[0].name
output_names = [out.name for out in session.get_outputs()]
# Preprocessing: Load and transform image
# NOTE: The input image is assumed to be cropped and aligned to contain only the face
transform = transforms.Compose([
transforms.Resize((256, 256)), # Resize to model input size
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
img = Image.open("path_to_image.jpg").convert("RGB")
img_tensor = transform(img).unsqueeze(0).numpy() # Shape: (1, 3, 256, 256)
# Run inference
age_logits, gender_logits, race_logits = session.run(output_names, {input_name: img_tensor})
# Postprocessing: Get predictions
age_pred = int(np.argmax(age_logits, axis=1)[0])
gender_pred = int(np.argmax(gender_logits, axis=1)[0])
race_pred = int(np.argmax(race_logits, axis=1)[0])
# Convert predictions to labels
def get_gender_text(gender_idx):
return 'Male' if gender_idx == 0 else 'Female'
def get_race_text(race_idx):
race_map = {
0: 'White',
1: 'Black',
2: 'Asian',
3: 'Indian',
4: 'Other'
}
return race_map.get(race_idx, 'Unknown')
# Display results
print(f"Predicted Age: {age_pred}")
print(f"Predicted Gender: {get_gender_text(gender_pred)}")
print(f"Predicted Race: {get_race_text(race_pred)}")
- Downloads last month
- 24
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
๐
1
Ask for provider support