Depth Anything V2

[**Lihe Yang**](https://liheyoung.github.io/)1 · [**Bingyi Kang**](https://bingykang.github.io/)2† · [**Zilong Huang**](http://speedinghzl.github.io/)2
[**Zhen Zhao**](http://zhaozhen.me/) · [**Xiaogang Xu**](https://xiaogang00.github.io/) · [**Jiashi Feng**](https://sites.google.com/site/jshfeng/)2 · [**Hengshuang Zhao**](https://hszhao.github.io/)1* 1HKU   2TikTok
†project lead *corresponding author Paper PDF Project Page Benchmark
This work presents Depth Anything V2. It significantly outperforms [V1](https://github.com/LiheYoung/Depth-Anything) in fine-grained details and robustness. Compared with SD-based models, it enjoys faster inference speed, fewer parameters, and higher depth accuracy. ![teaser](assets/teaser.png) ## News - **2024-07-06:** Depth Anything V2 is supported in [Transformers](https://github.com/huggingface/transformers/). See the [instructions](https://huggingface.co/docs/transformers/main/en/model_doc/depth_anything_v2) for convenient usage. - **2024-06-25:** Depth Anything is integrated into [Apple Core ML Models](https://developer.apple.com/machine-learning/models/). See the instructions ([V1](https://huggingface.co/apple/coreml-depth-anything-small), [V2](https://huggingface.co/apple/coreml-depth-anything-v2-small)) for usage. - **2024-06-22:** We release [smaller metric depth models](https://github.com/DepthAnything/Depth-Anything-V2/tree/main/metric_depth#pre-trained-models) based on Depth-Anything-V2-Small and Base. - **2024-06-20:** Our repository and project page are flagged by GitHub and removed from the public for 6 days. Sorry for the inconvenience. - **2024-06-14:** Paper, project page, code, models, demo, and benchmark are all released. ## Pre-trained Models We provide **four models** of varying scales for robust relative depth estimation: | Model | Params | Checkpoint | |:-|-:|:-:| | Depth-Anything-V2-Small | 24.8M | [Download](https://huggingface.co/depth-anything/Depth-Anything-V2-Small/resolve/main/depth_anything_v2_vits.pth?download=true) | | Depth-Anything-V2-Base | 97.5M | [Download](https://huggingface.co/depth-anything/Depth-Anything-V2-Base/resolve/main/depth_anything_v2_vitb.pth?download=true) | | Depth-Anything-V2-Large | 335.3M | [Download](https://huggingface.co/depth-anything/Depth-Anything-V2-Large/resolve/main/depth_anything_v2_vitl.pth?download=true) | | Depth-Anything-V2-Giant | 1.3B | Coming soon | ## Usage ### Prepraration ```bash git clone https://github.com/DepthAnything/Depth-Anything-V2 cd Depth-Anything-V2 pip install -r requirements.txt ``` Download the checkpoints listed [here](#pre-trained-models) and put them under the `checkpoints` directory. ### Use our models ```python import cv2 import torch from depth_anything_v2.dpt import DepthAnythingV2 DEVICE = 'cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu' model_configs = { 'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]}, 'vitb': {'encoder': 'vitb', 'features': 128, 'out_channels': [96, 192, 384, 768]}, 'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]}, 'vitg': {'encoder': 'vitg', 'features': 384, 'out_channels': [1536, 1536, 1536, 1536]} } encoder = 'vitl' # or 'vits', 'vitb', 'vitg' model = DepthAnythingV2(**model_configs[encoder]) model.load_state_dict(torch.load(f'checkpoints/depth_anything_v2_{encoder}.pth', map_location='cpu')) model = model.to(DEVICE).eval() raw_img = cv2.imread('your/image/path') depth = model.infer_image(raw_img) # HxW raw depth map in numpy ``` If you do not want to clone this repository, you can also load our models through [Transformers](https://github.com/huggingface/transformers/). Below is a simple code snippet. Please refer to the [official page](https://huggingface.co/docs/transformers/main/en/model_doc/depth_anything_v2) for more details. - Note 1: Make sure you can connect to Hugging Face and have installed the latest Transformers. - Note 2: Due to the [upsampling difference](https://github.com/huggingface/transformers/pull/31522#issuecomment-2184123463) between OpenCV (we used) and Pillow (HF used), predictions may differ slightly. So you are more recommended to use our models through the way introduced above. ```python from transformers import pipeline from PIL import Image pipe = pipeline(task="depth-estimation", model="depth-anything/Depth-Anything-V2-Small-hf") image = Image.open('your/image/path') depth = pipe(image)["depth"] ``` ### Running script on *images* ```bash python run.py \ --encoder \ --img-path --outdir \ [--input-size ] [--pred-only] [--grayscale] ``` Options: - `--img-path`: You can either 1) point it to an image directory storing all interested images, 2) point it to a single image, or 3) point it to a text file storing all image paths. - `--input-size` (optional): By default, we use input size `518` for model inference. ***You can increase the size for even more fine-grained results.*** - `--pred-only` (optional): Only save the predicted depth map, without raw image. - `--grayscale` (optional): Save the grayscale depth map, without applying color palette. For example: ```bash python run.py --encoder vitl --img-path assets/examples --outdir depth_vis ``` ### Running script on *videos* ```bash python run_video.py \ --encoder \ --video-path assets/examples_video --outdir video_depth_vis \ [--input-size ] [--pred-only] [--grayscale] ``` ***Our larger model has better temporal consistency on videos.*** ### Gradio demo To use our gradio demo locally: ```bash python app.py ``` You can also try our [online demo](https://huggingface.co/spaces/Depth-Anything/Depth-Anything-V2). ***Note: Compared to V1, we have made a minor modification to the DINOv2-DPT architecture (originating from this [issue](https://github.com/LiheYoung/Depth-Anything/issues/81)).*** In V1, we *unintentionally* used features from the last four layers of DINOv2 for decoding. In V2, we use [intermediate features](https://github.com/DepthAnything/Depth-Anything-V2/blob/2cbc36a8ce2cec41d38ee51153f112e87c8e42d8/depth_anything_v2/dpt.py#L164-L169) instead. Although this modification did not improve details or accuracy, we decided to follow this common practice. ## Fine-tuned to Metric Depth Estimation Please refer to [metric depth estimation](./metric_depth). ## DA-2K Evaluation Benchmark Please refer to [DA-2K benchmark](./DA-2K.md). ## Community Support **We sincerely appreciate all the community support for our Depth Anything series. Thank you a lot!** - Apple Core ML: - https://developer.apple.com/machine-learning/models - https://huggingface.co/apple/coreml-depth-anything-v2-small - https://huggingface.co/apple/coreml-depth-anything-small - Transformers: - https://huggingface.co/docs/transformers/main/en/model_doc/depth_anything_v2 - https://huggingface.co/docs/transformers/main/en/model_doc/depth_anything - TensorRT: - https://github.com/spacewalk01/depth-anything-tensorrt - https://github.com/zhujiajian98/Depth-Anythingv2-TensorRT-python - ONNX: https://github.com/fabio-sim/Depth-Anything-ONNX - ComfyUI: https://github.com/kijai/ComfyUI-DepthAnythingV2 - Transformers.js (real-time depth in web): https://huggingface.co/spaces/Xenova/webgpu-realtime-depth-estimation - Android: - https://github.com/shubham0204/Depth-Anything-Android - https://github.com/FeiGeChuanShu/ncnn-android-depth_anything ## Acknowledgement We are sincerely grateful to the awesome Hugging Face team ([@Pedro Cuenca](https://huggingface.co/pcuenq), [@Niels Rogge](https://huggingface.co/nielsr), [@Merve Noyan](https://huggingface.co/merve), [@Amy Roberts](https://huggingface.co/amyeroberts), et al.) for their huge efforts in supporting our models in Transformers and Apple Core ML. We also thank the [DINOv2](https://github.com/facebookresearch/dinov2) team for contributing such impressive models to our community. ## LICENSE Depth-Anything-V2-Small model is under the Apache-2.0 license. Depth-Anything-V2-Base/Large/Giant models are under the CC-BY-NC-4.0 license. ## Citation If you find this project useful, please consider citing: ```bibtex @article{depth_anything_v2, title={Depth Anything V2}, author={Yang, Lihe and Kang, Bingyi and Huang, Zilong and Zhao, Zhen and Xu, Xiaogang and Feng, Jiashi and Zhao, Hengshuang}, journal={arXiv:2406.09414}, year={2024} } @inproceedings{depth_anything_v1, title={Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data}, author={Yang, Lihe and Kang, Bingyi and Huang, Zilong and Xu, Xiaogang and Feng, Jiashi and Zhao, Hengshuang}, booktitle={CVPR}, year={2024} } ```