bigshanedogg's picture
Upload Video-Depth-Anything-Large (transformers port, original code)
962b4bb verified
|
Raw History Blame Contribute Delete
4.5 kB
---
license: cc-by-nc-4.0
library_name: transformers
base_model: depth-anything/Video-Depth-Anything-Large
tags:
- video-depth-anything
- depth-estimation
- video
pipeline_tag: depth-estimation
---
# Video-Depth-Anything-Large — transformers format (original code)
Unofficial transformers port of **Video Depth Anything** Large (`depth-anything/Video-Depth-Anything-Large`, `video_depth_anything_vitl.pth`) that runs
the **original** code. Loads with `trust_remote_code`. `model.safetensors` holds the checkpoint's tensors under their
original names, converted from `.pth` (every tensor checked equal).
> **Not an official release.** Video Depth Anything was created by Sili Chen, Hengkai Guo, Shengnan Zhu, Feihu Zhang,
> Zilong Huang, Jiashi Feng and Bingyi Kang (ByteDance) — https://github.com/DepthAnything/Video-Depth-Anything, paper
> *"Video Depth Anything: Consistent Depth Estimation for Super-Long Videos"* (arXiv 2501.12375).
## What it is
`VideoDepthAnythingForDepthEstimation` holds the official `VideoDepthAnything`'s submodules (`pretrained`: DINOv2
ViT-L/14, `head`: the temporal DPT head with motion modules) and computes depth with that class's own `forward`, returning
the standard `DepthEstimatorOutput` (`predicted_depth`: (B, T, H, W), up to 32 frames per clip). The official
whole-video inference `infer_video_depth` (32-frame windows with key-frame overlap and scale / shift alignment) and
the experimental streaming inference `infer_video_depth_one` run unchanged on the model. Code vendored
from DepthAnything/Video-Depth-Anything @ 4f5ae231 into `vda_*.py`; edits: imports, and `Block` → `NestedTensorBlock`
where the original imported `NestedTensorBlock as Block`. `VideoDepthAnythingProcessor`
(`processing_video_depth_anything.py`, `processor_config.json`) wraps `VideoDepthAnythingImageProcessor`, the per-frame
transform of `infer_video_depth`.
Verified against the official code (same process, V100): preprocessing, `predicted_depth` (also as a tuple), the
hidden states, the post-processing, `infer_video_depth` on a video longer than one window and streaming inference, in
fp32 and with the original's fp16 autocast, are **bit-identical** (the repo's 2 example videos; 70 frames for
`infer_video_depth`, 40 streamed frames). Large was compared at input size 392: at 518 these 16:9 videos need more than the V100's 32 GB (the original's README reports 26.7 GB for 518 x 518).
## Usage
```python
import torch
from transformers import AutoModelForDepthEstimation, AutoProcessor
model = AutoModelForDepthEstimation.from_pretrained("Video-Depth-Anything-Large", trust_remote_code=True).eval().cuda()
processor = AutoProcessor.from_pretrained("Video-Depth-Anything-Large", trust_remote_code=True)
# frames: RGB uint8 (T, H, W, 3), T <= 32
inputs = processor(videos=frames, return_tensors="pt").to("cuda")
with torch.no_grad():
outputs = model(**inputs) # outputs.predicted_depth: (1, T, H', W') relative inverse depth
depth = processor.post_process_depth_estimation(outputs, target_sizes=[frames.shape[1:3]])[0]["predicted_depth"]
# a whole video of any length, exactly as the original run.py (fp16 autocast unless fp32=True):
depths, fps = model.infer_video_depth(frames, target_fps=30, input_size=518, device="cuda")
# streaming, one frame at a time (experimental upstream): model.infer_video_depth_one(frame); model.reset_streaming()
```
- `AutoModel` loads the same class. `output_hidden_states=True` adds the DINOv2 features the head reads; `return_dict=False` returns a tuple.
- `post_process_depth_estimation` resizes as the original (bilinear, `align_corners=True`).
Runtime packages beyond torch / transformers: `opencv-python`, `torchvision`, `einops`, `easydict`, `tqdm` (as the
original; `xformers` is optional, as in the original).
## Licensing
- Weights (`depth-anything/Video-Depth-Anything-Large`): **CC-BY-NC-4.0** (non-commercial) — [`LICENSE`](LICENSE).
- Code (vendored files and the port): **Apache-2.0** — [`LICENSE.code`](LICENSE.code).
- Attribution, sources and the changes made here: [`NOTICE`](NOTICE).
## Citation
If you use this model, please cite the original work, as its authors ask:
```bibtex
@article{video_depth_anything,
title={Video Depth Anything: Consistent Depth Estimation for Super-Long Videos},
author={Chen, Sili and Guo, Hengkai and Zhu, Shengnan and Zhang, Feihu and Huang, Zilong and Feng, Jiashi and Kang, Bingyi},
journal={arXiv:2501.12375},
year={2025}
}
```