Sapiens2: Surface Normal Estimation

May 15, 2026 · View on GitHub

Per-pixel surface normal estimation. Predictions are 3-channel (x, y, z) unit vectors in the camera coordinate frame.

Model Zoo

Download checkpoints from HuggingFace and place them under $SAPIENS_CHECKPOINT_ROOT (default: ~/sapiens2_host).

ModelCheckpoint Path
Sapiens2-0.4B$SAPIENS_CHECKPOINT_ROOT/normal/sapiens2_0.4b_normal.safetensors
Sapiens2-0.8B$SAPIENS_CHECKPOINT_ROOT/normal/sapiens2_0.8b_normal.safetensors
Sapiens2-1B$SAPIENS_CHECKPOINT_ROOT/normal/sapiens2_1b_normal.safetensors
Sapiens2-5B$SAPIENS_CHECKPOINT_ROOT/normal/sapiens2_5b_normal.safetensors

Inference Guide

Runs on demo set (demo/data, 100 frames) by default:

cd $SAPIENS_ROOT/sapiens/dense
./scripts/demo/normal.sh

Open the script and adjust:

  • INPUT — path to your image directory (default: ../../demo/data)
  • OUTPUT — where to save visualizations
  • MODEL_NAME — uncomment the model size you want to use
  • JOBS_PER_GPU, GPU_IDS — parallelism (defaults: 3 jobs/GPU on GPUs 0–7)

For best results, run body-part segmentation first and pass the foreground mask .npy to filter background pixels from the visualization.

Resources