Skip to main content

DeFM: Learning Foundation Representations from Depth for Robotics

Python 3.11+ PyTorch 2.4+ uv Managed Hugging Face License: Apache 2.0 Arxiv Webpage GitHub


DeFM (Depth Foundation Model) is a vision backbone trained on 60M depth images via self-distillation. It is engineered for robotic perception, providing metric-aware representations that excel in sim-to-real transfer and cross-sensor generalization.

TL;DR - A DINO-style encoder, but for depth image inputs.

🌟 Key Features

  • Large-Scale Pretraining: We pretrain on our curated dataset of 60 M depth images using self-distillation.
  • Semantic Awareness: DeFM learns not only robust geometric priors but also semantically rich features from just depth images.
  • Metric-Aware Normalization: Our novel three channel input normalization preserves metric depth across multiple scales.
  • Compact efficient models: We distill our DeFM-ViT-L into a family of smaller efficient CNNs as small as 3M params for robot policy learning.
  • Robotics Proven: Our encoder is proven effective for diverse robotic tasks such as navigation, manipulation and locomotion without task-specific fine-tuning.

🛠️ Installation

To use DeFM as a backbone in your own projects, install the package from PyPI:

pip install defm

and directly jump to Quick Start. Loading through TorchHub only needs torch torchvision numpy huggingface_hub omegaconf. Otherwise, below you can find instructions to install the DeFM module for using the notebooks or for local development.

git clone https://github.com/leggedrobotics/defm && cd defm

Using uv (Fastest)

# Create and activate environment
uv venv --python 3.11
source .venv/bin/activate

# Install dependencies and DeFM in editable mode (with the notebook dependencies)
uv pip install -e ".[notebooks]"

Using standard pip

pip install -e ".[notebooks]"

🚀 Quick Start

1. Loading the Model

Load via TorchHub for easy integration:

import torch

# Load the 304M-parameter foundation model
model = torch.hub.load('leggedrobotics/defm:main', 'defm_vit_l14', pretrained=True)
model.eval().to("cuda")

or, with the defm package installed:

from defm.model_factory import create_defm_model

model = create_defm_model("defm_vit_l14", pretrained=True)  # weights from the Hugging Face Hub

2. Preprocessing

DeFM requires depth maps to be processed into our metric-aware 3-channel format.

from defm import preprocess_depth_image

# Depth in meters: (H, W) numpy array, tensor or PIL image. target_size is an int (square) or (H, W).
normalized_depth = preprocess_depth_image(metric_depth, target_size=518, patch_size=14).to("cuda")

3. Inference

with torch.no_grad():
    output = model.get_intermediate_layers(
        normalized_depth, n=1, reshape=True, return_class_token=True)

spatial_tokens = output[0][0] # (B, C, H', W')
class_token = output[0][1] # (B, C)

The CNN models (defm_resnet50, defm_efficientnet_b0, ...) return a dict instead, and their input height and width must be multiples of 32:

model = torch.hub.load('leggedrobotics/defm:main', 'defm_resnet50', pretrained=True).eval().to("cuda")
normalized_depth = preprocess_depth_image(metric_depth, target_size=(224, 320)).to("cuda")

with torch.no_grad():
    output = model(normalized_depth)

class_token = output["global_backbone"]  # (B, C)
spatial_tokens = output["dense_bifpn"]["P4"]  # (B, C, H/16, W/16), the features distilled from the ViT

See scripts/notebooks/ for more examples.


📂 Project Structure

  • defm/: Main package containing model factory, architectures, and utils.
  • scripts/notebooks/: Demo notebooks for Semantic PCA Visualization and Inference Scripts for CNNs and ViTs.
  • benchmarks/: Classification and segmentation benchmarks for DeFM and the baselines (see Benchmarks).
  • scripts/datasets/: Scripts to build the benchmark datasets from their official releases.
  • tests/: Smoke tests (pytest tests).

📊 Model Zoo

The following table provides a comprehensive overview of the DeFM model family, including architectural parameters, inference latency across training and deployment hardware (224x224), and performance on the ImageNet-1k-Depth benchmark.

Model Params (M) RTX 4090 BS-128 (ms) Jetson Orin (ms) Top-5 KNN (%) Linear Prob (%) Checkpoint
DeFM ViT-L/14 303.7 624.91 72.82 85.42 72.76 Download
DeFM ViT-S/14 21.6 63.76 11.92 79.37 62.74 Download
DeFM ResNet-50 26.2 69.39 17.79 78.93 62.56 Download
DeFM ResNet-34 23.3 33.08 13.54 73.84 54.78 Download
DeFM ResNet-18 11.7 21.06 8.67 70.93 51.57 Download
DeFM EfficientNet-B6 28.98 150.98 54.11 79.30 60.70 Download
DeFM EfficientNet-B4 14.16 86.51 39.67 76.45 56.24 Download
DeFM EfficientNet-B2 4.95 46.12 28.37 72.89 51.64 Download
DeFM EfficientNet-B0 3.01 29.39 21.04 69.54 47.17 Download
DeFM RegNetY-1.6GF 12.4 44.25 41.82 77.96 58.88 Download
DeFM RegNetY-800MF 6.3 25.21 24.16 76.43 58.62 Download
DeFM RegNetY-400MF 4.1 17.27 25.17 74.43 51.80 Download

📏 Benchmarks

benchmarks/ reproduces the linear-probe evaluations of the paper for DeFM and all image baselines (DINOv2, DINOv3, Depth Anything V2, C-RADIOv3, Theia), loading every model from its official Hugging Face weights:

pip install -e ".[benchmarks]"
python -m benchmarks.segmentation --encoder defm_vit_l14 --dataset tartanground   # ScanNet, SUN RGB-D, OFFSED, TartanGround, GraspNet
python -m benchmarks.classification --encoder defm_vit_s14 --eval knn linear     # ImageNet-1k-Depth

TartanGround, GraspNet-1Billion and ImageNet-1k-Depth are downloaded from the Hub; ScanNet, SUN RGB-D and OFFSED are built from their official releases with the scripts in scripts/datasets/. See the benchmark README for datasets, protocol and results.


📖 Citation

If you find DeFM useful for your research, please cite our paper:

@misc{patel2026defm,
      title={DeFM: Learning Foundation Representations from Depth for Robotics}, 
      author={Manthan Patel and Jonas Frey and Mayank Mittal and Fan Yang and Alexander Hansson and Amir Bar and Cesar Cadena and Marco Hutter},
      year={2026},
      eprint={2601.18923},
      archivePrefix={arXiv},
      primaryClass={cs.RO},
      url={https://arxiv.org/abs/2601.18923}, 
}

Contribution Guidelines

We use the following tools for maintaining code quality:

  • pre-commit: Runs a list of formatters and linters over the codebase.
  • ruff: An extremely fast Python linter and code formatter, written in Rust.

Please check here for instructions to set these up. To run over the entire repository, please execute the following command in the terminal:

# for installation (only once)
pre-commit install
# for running
pre-commit run --all-files

Acknowledgement

We would like to thank the researchers and developers of the DINOv2 repository for their excellent open-source work, which served as the foundation for our implementation.

This work was supported as part of the Swiss AI Initiative by a grant from the Swiss National Supercomputing Centre (CSCS) under project ID a144 on Alps. This work was also supported by the Luxembourg National Research Fund (Ref. 18990533), and the Swiss National Science Foundation (SNSF) through projects No. 200021E_229503 and No. 227617.

Metadata

Release files for defm 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for defm 1.1.0
File Size Uploaded Provenance
defm-1.1.0.tar.gz 37.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for defm 1.1.0
File Interpreter ABI Platform
defm-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 77.5 kB

Release files / defm-1.1.0.tar.gz

Download URL defm-1.1.0.tar.gz
Size 37.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a794a1e053cc7d5cf81bf905bf81a510d2d19fd6f9924609a703b1ff07b367dd
BLAKE2b-256 checksum
How to use checksums
760a65f8e23ae79a513b9d734cb09e9ae5083fcf604318ecdf19f49c9eaabe4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / defm-1.1.0-py3-none-any.whl

Download URL defm-1.1.0-py3-none-any.whl
Size 40.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16aeebaa66108993d54f7f49471433c5bf5c57a4d4f0c612a448cf3a7cbb17bc
BLAKE2b-256 checksum
How to use checksums
087b0565fd0b85e11fccabea2fccf8107680ad4ccc0466a4de6979b21cb87ffa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for defm 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page