Celeb-FBI body-weight from a single image β best config A(ViT)+C (7.04 kg MAE)
Research artifact β do not use for medical, fitness, or individual assessment. Trained on celebrity images; under-predicts heavier subjects.
Files: vit_b16_best.pt (best backbone), resnet50_best.pt (baseline), branch3d_calib.json (backbone-aware 3D-volume calibration).
Download & run the best model β A(ViT)+C
git clone https://github.com/arkodeepsen/weight-from-image && cd weight-from-image
pip install -r requirements.txt
huggingface-cli download arkodeep/celeb-fbi-weight vit_b16_best.pt --local-dir ckpts
# --height-cm enables the 3D volume refinement; predict.py auto-detects the ViT
# backbone and applies the matching A(ViT)+C meta-learner from reports/branch3d_calib.json
python -m src.predict --ckpt ckpts/vit_b16_best.pt --image photo.jpg --height-cm 175
Model Card β Human Weight Prediction from a Full-Body Image
Project: DeLTA26_041 (IIIT Allahabad research internship) Β· Task: single-image regression β body weight (kg) Β· Status: research prototype.
1. Model details
- Architecture. ResNet-50 (ImageNet-pretrained) trunk + regression head
Linear(2048β256) β ReLU β Dropout(0.3) β Linear(256β1). - Hybrid variants.
- Feature fusion (
FusionRegressor): CNN 2048-d penultimate features concatenated with a small MLP over a 7-d anthropometric vector β shared head. - Late fusion: per-branch predictions (CNN, XGBoost-on-anthro, volume prior) combined by a linear meta-learner β A+B, A+C, A+B+C.
- Feature fusion (
- Branch C β 3D body volume (best config). Estimates a body volume from the
pose landmarks (elliptical-frustum torso, cylinder limbs, ellipsoid head),
anchors it to metres with the subject's height, and calibrates `w = 300.6Β·V
- 43.2
(the practical form ofw β ΟV). The only branch supplying *absolute* scale; an exact SMPL-mesh volume backend is scaffolded. On a ResNet-50 backboneA+Creaches 7.82 kg; on the strongest backbone (ViT-B/16) the same volume fusion β **A(ViT)+C`** β is the best model overall at 7.04 kg (Β§4). Inference auto-detects the checkpoint's backbone and applies the matching A+C meta-learner.
- 43.2
- Anthropometric features (7-d). Six scale-invariant pose features β
shoulder-width/torso, hip-width/torso, shoulder/hip ratio, leg-length/torso,
arm-length/torso, bbox width/height β plus a
pose_validflag. Extracted with MediaPipe PoseLandmarker (Tasks API, 33-point BlazePose). Normalising by torso length makes them invariant to camera distance (a single image has no absolute scale). - Training. Huber (Smooth-L1) loss; AdamW with split LRs (head 1e-4, backbone 1e-5, weight-decay 1e-4); cosine schedule; AMP on CUDA; early stopping on validation MAE (patience 7); batch 64; β€40 epochs; input 224Γ224 with ImageNet normalisation. Targets standardised (mean 65.8, std 16.0 kg); metrics inverted to kg.
- Frameworks. PyTorch / torchvision, MediaPipe, scikit-learn, XGBoost.
2. Intended use
- Intended. Research and education β studying how far appearance + body-shape cues can estimate weight from one image; coursework / IEEE write-up.
- Out of scope (do not use for). Any medical, clinical, insurance, fitness, employment, or individual assessment. Outputs are point estimates with large per-person error (see Β§5) and a known directional bias against heavier bodies.
3. Data
- Source. Celeb-FBI (
alecccdd/celeb-fbi) β 7,208 full-body celebrity photos. - Splits. Provided test split (721) held out untouched. Training pool split 90/10 into train 5,032 / val 559, BMI-stratified and seeded (seed 42); all ablation models share this identical split.
- Labels.
weight(kg, target),height(cm, for BMI),gender,age; missing values use a-1sentinel and are dropped (units confirmed kg/cm in EDA). - Pose coverage. Landmarks detected on 6,480 / 6,487 train (99.9%) and 721 / 721 test images, so the anthropometric branch is real signal, not imputation.
- Leakage. Per-image
idchecked across splits β noidshared. Residual risk remains: a celebrity may appear under multiple ids, so subject-level leakage cannot be fully excluded (documented limitation).
4. Metrics (test set, 721 images)
Evidence ablation (backbone fixed at ResNet-50; isolates each evidence source):
| Model | MAE (kg) | RMSE (kg) | Pearson r | RΒ² |
|---|---|---|---|---|
| A β CNN only | 8.11 | 12.51 | 0.635 | 0.402 |
| B β Anthropometric only (XGBoost) | 9.73 | 13.84 | 0.520 | 0.267 |
| C β 3D volume prior (calibrated) | 10.02 | β | 0.49 | β |
| A+B β feature fusion | 8.01 | 12.49 | 0.641 | 0.403 |
| A+B β late fusion | 8.35 | 12.22 | 0.657 | 0.429 |
| A+C β CNN + volume | 7.82 | 11.93 | 0.676 | 0.455 |
| A+B+C β all three | 8.08 | 11.95 | 0.675 | 0.454 |
Equal-footing backbone study (same pipeline, 100 epochs; only the backbone changes):
| Backbone | Params (M) | MAE | RMSE | r | RΒ² | BMI-acc |
|---|---|---|---|---|---|---|
| ViT-B/16 | 86.0 | 7.12 | 11.32 | 0.715 | 0.510 | 0.644 |
| ResNet-50 (this work / Debnath) | 24.0 | 8.09 | 12.49 | 0.636 | 0.403 | 0.624 |
| EfficientNet-B0 | 4.3 | 8.15 | 12.58 | 0.633 | 0.395 | 0.595 |
| MobileNetV3-L | 3.2 | 8.42 | 13.01 | 0.600 | 0.352 | 0.611 |
| ViT-B/16 + volume β A(ViT)+C (best, deployed) | 86.0 | 7.04 | 10.96 | 0.736 | 0.540 | 0.618 |
Primary metric is MAE. Two orthogonal levers: the volume branch (evidence) improves every backbone (ResNet 8.11β7.82, ViT 7.12β7.04), and a stronger backbone (ViT-B/16) is worth ~1 kg on its own. Combining both, A(ViT)+C = 7.04 kg is the best model overall. 2D anthropometry (Branch B) stays redundant with a strong appearance model; BMI-band accuracy β0.62 across models.
5. Error analysis & limitations
Error by BMI band β CNN (A) vs the volume-fused A+C:
| Band | A (CNN) | A+C | n |
|---|---|---|---|
| underweight | 7.1 | 7.0 | 107 |
| normal | 6.2 | 6.1 | 381 |
| overweight | 13.9 | 12.3 | 66 |
| obese | 14.7 | 14.7 | 66 |
- Dominant failure: heavy subjects are under-predicted. The worst-20 CNN cases
are large/muscular men (true 102β109 kg) predicted
70 kg β 30+ kg under. The model is accurate (6 kg) on the well-represented normal/underweight bands and collapses on the rare overweight/obese bands. - The 3D volume branch is the fix β partially. A+C recovers the overweight band (13.9 β 12.3 kg) by injecting absolute size; but the obese band stays (14.7), because with only 66 obese images the volume map cannot calibrate the heavy tail either. So the bottleneck is both missing absolute scale (architectural, fixed by Branch C) and data coverage (which Branch C cannot fix).
- Why size matters. Weight fundamentally needs size, which a single image lacks; 2D scale-invariant ratios supply shape but not size (hence anthropometric-only is weakest, 9.7 kg). Branch C recovers absolute size by anchoring an estimated body volume to the subject's height β the only branch that does so.
- Other risks. Heavy clothing, unusual poses, occlusion, and extreme framing degrade both the CNN and pose features. Gender/age fairness beyond the gender/BMI breakdowns here was not exhaustively audited.
6. Ethical considerations
Inferring body weight from images is sensitive. Predictions could enable body-shaming, discrimination, or unwanted profiling. The model's directional bias means errors are not evenly distributed β it is least reliable exactly for the heavier individuals most vulnerable to such harms. This artifact must not be deployed against real people or used for any individual judgement. Any downstream use should obtain consent, disclose uncertainty, and re-validate on a representative, weight-balanced dataset.
7. Reproduce the evaluation
pip install -r requirements.txt- Obtain the best checkpoint (
*_best.pt, written to the Drive cache during training) and the cached pose-feature parquets. - Run
notebooks/97_colab_eval.ipynb(or the equivalentsrc.evalcalls) β it regenerates the ablation table, BMI confusion matrices, error-by-group charts, and the worst-k grid intoreports/.