--- license: apache-2.0 pipeline_tag: image-feature-extraction datasets: - leggedrobotics/defm-bench-imagenet-depth - leggedrobotics/defm-bench-tartanground - leggedrobotics/defm-bench-graspnet --- # DeFM: Learning Foundation Representations from Depth for Robotics
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-green.svg?style=for-the-badge)](https://opensource.org/licenses/Apache-2.0) [![GitHub](https://img.shields.io/badge/GitHub-Code-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/leggedrobotics/defm) [![Arxiv](https://img.shields.io/badge/arXiv-2601.18923-B31B1B.svg?style=for-the-badge)](https://arxiv.org/abs/2601.18923) [![Webpage](https://img.shields.io/badge/Webpage-de--fm.github.io/-yellow.svg?style=for-the-badge&logo=google-chrome&logoColor=white)](https://de-fm.github.io/)
--- **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. ## 🚀 Usage Install the package from PyPI: ```bash pip install defm ``` Loading through TorchHub only needs `torch torchvision numpy huggingface_hub omegaconf`. ### 1. Loading the Model Load via **TorchHub** for easy integration: ```python 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: ```python 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. ```python 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 ```python 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: ```python 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 ``` For more details, visit our [GitHub repository](https://github.com/leggedrobotics/defm). ## 📊 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](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_vit_l14.pth) | | **DeFM ViT-S/14** | 21.6 | 63.76 | 11.92 | 79.37 | 62.74 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_vit_s14.pth) | | **DeFM ResNet-50** | 26.2 | 69.39 | 17.79 | 78.93 | 62.56 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_resnet50.pth) | | **DeFM ResNet-34** | 23.3 | 33.08 | 13.54 | 73.84 | 54.78 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_resnet34.pth) | | **DeFM ResNet-18** | 11.7 | 21.06 | 8.67 | 70.93 | 51.57 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_resnet18.pth) | | **DeFM EfficientNet-B6** | 28.98 | 150.98 | 54.11 | 79.30 | 60.70 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_efficientnet_b6.pth) | | **DeFM EfficientNet-B4** | 14.16 | 86.51 | 39.67 | 76.45 | 56.24 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_efficientnet_b4.pth) | | **DeFM EfficientNet-B2** | 4.95 | 46.12 | 28.37 | 72.89 | 51.64 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_efficientnet_b2.pth) | | **DeFM EfficientNet-B0** | 3.01 | 29.39 | 21.04 | 69.54 | 47.17 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_efficientnet_b0.pth) | | **DeFM RegNetY-1.6GF** | 12.4 | 44.25 | 41.82 | 77.96 | 58.88 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_regnet_y_1_6gf.pth) | | **DeFM RegNetY-800MF** | 6.3 | 25.21 | 24.16 | 76.43 | 58.62 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_regnet_y_800mf.pth) | | **DeFM RegNetY-400MF** | 4.1 | 17.27 | 25.17 | 74.43 | 51.80 | [Download](https://huggingface.co/leggedrobotics/defm/resolve/main/defm_regnet_y_400mf.pth) | --- ## 📏 Benchmarks [`benchmarks/`](https://github.com/leggedrobotics/defm/blob/main/benchmarks/README.md) 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: ```bash git clone https://github.com/leggedrobotics/defm && cd defm 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](https://huggingface.co/datasets/leggedrobotics/defm-bench-tartanground), [GraspNet-1Billion](https://huggingface.co/datasets/leggedrobotics/defm-bench-graspnet) and [ImageNet-1k-Depth](https://huggingface.co/datasets/leggedrobotics/defm-bench-imagenet-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](https://github.com/leggedrobotics/defm/blob/main/benchmarks/README.md) 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}, } ```