# How to Upload FoundationPose Weights to Hugging Face This guide shows you how to host FoundationPose model weights in a Hugging Face model repository, which is much better than using git-lfs in your Space. ## Why Use a Model Repository? ✅ **Benefits:** - Designed for large files (GB+) - Fast CDN downloads - Version control for weights - Share weights across multiple Spaces - No need for git-lfs in Space repo - Better download performance ## Step-by-Step Guide ### 1. Download Official Weights First, get the official FoundationPose weights from Google Drive: **Download Link:** https://drive.google.com/drive/folders/1GCyGE-LbFGgRC-FuGsF3a1zeBuzsQ1Da Download these two folders: - `2023-10-28-18-33-37/` (refiner weights, ~900MB) - `2024-01-11-20-02-45/` (scorer weights, ~900MB) Save them locally in a directory structure like: ``` foundationpose-weights/ ├── 2023-10-28-18-33-37/ │ ├── model.pth │ └── ... └── 2024-01-11-20-02-45/ ├── model.pth └── ... ``` ### 2. Create Hugging Face Model Repository **Option A: Using the Web Interface** 1. Go to https://huggingface.co/new 2. Choose "Model" (not Space or Dataset) 3. Set owner to your username (e.g., `gpue`) 4. Set name: `foundationpose-weights` 5. Make it **Public** (so your Space can download it) or Private (requires token) 6. Click "Create model" **Option B: Using the CLI** ```bash pip install huggingface_hub huggingface-cli login # Enter your token # Create repo huggingface-cli repo create foundationpose-weights --type model ``` ### 3. Upload Weights to Model Repository **Option A: Using the Web Interface** 1. Go to your model repo: `https://huggingface.co/YOUR_USERNAME/foundationpose-weights` 2. Click "Files" → "Add file" → "Upload files" 3. Drag and drop the two weight folders 4. Click "Commit changes" ⚠️ **Note:** Web upload may be slow for large files. Use CLI for better experience. **Option B: Using the CLI (Recommended)** ```bash # From the directory containing your weight folders huggingface-cli upload YOUR_USERNAME/foundationpose-weights ./2023-10-28-18-33-37 2023-10-28-18-33-37 huggingface-cli upload YOUR_USERNAME/foundationpose-weights ./2024-01-11-20-02-45 2024-01-11-20-02-45 ``` **Option C: Using Python Script** ```python from huggingface_hub import HfApi from pathlib import Path api = HfApi() repo_id = "YOUR_USERNAME/foundationpose-weights" weights_dir = Path("./foundationpose-weights") print("Uploading weights to Hugging Face...") # Upload entire directory api.upload_folder( folder_path=str(weights_dir), repo_id=repo_id, repo_type="model" ) print("✓ Upload complete!") ``` ### 4. Add Model Card (README) Create a `README.md` in your model repo to document the weights: ```markdown --- license: cc-by-nc-4.0 tags: - computer-vision - 6d-pose-estimation - object-detection - robotics --- # FoundationPose Model Weights Pre-trained weights for [FoundationPose](https://github.com/NVlabs/FoundationPose) 6D object pose estimation model. ## Model Details - **Refiner weights:** `2023-10-28-18-33-37/` - **Scorer weights:** `2024-01-11-20-02-45/` - **Source:** [Official FoundationPose release](https://github.com/NVlabs/FoundationPose) ## Usage ```python from huggingface_hub import snapshot_download # Download all weights snapshot_download( repo_id="YOUR_USERNAME/foundationpose-weights", local_dir="./weights" ) ``` ## Citation ```bibtex @inproceedings{wen2023foundationpose, title={FoundationPose: Unified 6D Pose Estimation and Tracking of Novel Objects}, author={Wen, Bowen and Yang, Wei and Kautz, Jan and Birchfield, Stan}, booktitle={CVPR}, year={2024} } ``` ## License These weights are from the official FoundationPose release and subject to NVIDIA's license terms. ``` ### 5. Configure Your Space to Use the Model Repo Update your Space's environment variables (Settings → Variables and secrets): ``` FOUNDATIONPOSE_MODEL_REPO=YOUR_USERNAME/foundationpose-weights USE_HF_WEIGHTS=true USE_REAL_MODEL=true ``` Or set in your Space's Dockerfile/code: ```python import os os.environ["FOUNDATIONPOSE_MODEL_REPO"] = "gpue/foundationpose-weights" os.environ["USE_HF_WEIGHTS"] = "true" ``` ### 6. Test the Setup **Test locally:** ```bash cd foundationpose # Set environment variables export FOUNDATIONPOSE_MODEL_REPO="YOUR_USERNAME/foundationpose-weights" export USE_HF_WEIGHTS="true" # Download weights python download_weights.py # Should see: # ✓ Download complete! # ✓ Model weights found locally! ``` **Test in Space:** After pushing to HF Spaces, check the build logs: 1. Go to your Space → Logs 2. Look for "Downloading from Hugging Face Model Repository" 3. Should see "✓ Download complete!" ### 7. Verify Weights Are Correct Check that the downloaded structure matches: ```bash ls -R weights/ # Should show: # weights/2023-10-28-18-33-37/ # weights/2024-01-11-20-02-45/ ``` ## Troubleshooting ### "Repository not found" - Check repo name matches exactly: `YOUR_USERNAME/foundationpose-weights` - Make sure repo is Public, or provide HF token for private repos - Verify you're logged in: `huggingface-cli whoami` ### "Upload failed" - Check your internet connection - Try uploading smaller chunks - Use CLI instead of web interface for large files ### "Out of storage" - HF free tier has storage limits (~50GB) - Request more storage or use smaller model variants - Host on your own S3/CDN as alternative ### Private Repository Access If your model repo is private, set HF token in Space secrets: 1. Get token from https://huggingface.co/settings/tokens 2. Add to Space: Settings → Repository secrets → `HF_TOKEN` 3. Code will automatically use it: ```python from huggingface_hub import snapshot_download import os snapshot_download( repo_id="YOUR_USERNAME/foundationpose-weights", local_dir="./weights", token=os.environ.get("HF_TOKEN") # Uses secret ) ``` ## Example: Complete Workflow ```bash # 1. Download from Google Drive (manual) # Save to: ~/Downloads/foundationpose-weights/ # 2. Install HF CLI pip install huggingface_hub huggingface-cli login # 3. Create model repo huggingface-cli repo create foundationpose-weights --type model # 4. Upload weights cd ~/Downloads/foundationpose-weights huggingface-cli upload gpue/foundationpose-weights . . # 5. Update your Space cd /path/to/foundationpose git add . git commit -m "Use HF model repo for weights" git push # 6. Set Space secrets # Go to: https://huggingface.co/spaces/gpue/foundationpose/settings # Add: FOUNDATIONPOSE_MODEL_REPO=gpue/foundationpose-weights # Add: USE_HF_WEIGHTS=true # Add: USE_REAL_MODEL=true # 7. Check Space logs # Visit: https://huggingface.co/spaces/gpue/foundationpose/logs # Should see weights downloading automatically ``` ## Alternative: Public Model Repos If someone else has already uploaded the weights, you can use their repo: ```bash # Example (if available) export FOUNDATIONPOSE_MODEL_REPO="some-user/foundationpose-weights" ``` Common public repos (check if they exist): - `nvidia/foundationpose` (official, if available) - Community uploads (search on HF) ## Cost ✅ **Free tier:** - Unlimited model repos - ~50GB storage per repo - Unlimited downloads (public repos) - No bandwidth costs 📈 **Pro tier ($9/month):** - More storage - Private repos with teams - Priority support --- **Quick Reference:** ```bash # Create repo huggingface-cli repo create foundationpose-weights --type model # Upload huggingface-cli upload YOUR_USERNAME/foundationpose-weights ./weights . # Download in Space (automatic) python download_weights.py # Or download manually from huggingface_hub import snapshot_download snapshot_download("YOUR_USERNAME/foundationpose-weights", local_dir="./weights") ``` --- You're all set! Your FoundationPose Space will now automatically download weights from your model repository on first run. 🎉