
Depth Anything:单目图像深度估计模型|部署与使用全指南
项目仓库: https://github.com/LiheYoung/Depth-Anything
论文:CVPR 2024 · 维护方:HKU / TikTok · 语言:Python · 框架:PyTorch · 形态:命令行 + Python 库 · 最新版本:Depth Anything V2(独立仓库)
1 项目简介
Depth Anything 是一个单目深度估计模型:输入一张普通 RGB 图片,输出对应的相对深度图(越近越亮、越远越暗)。它在 150 万张标注图 + 6200 万张无标注图上训练,在 KITTI、NYUv2、Sintel 等多个基准上超过之前的 MiDaS v3.1。
项目提供三种尺寸:Small(24.8M)、Base(97.5M)、Large(335.3M);并提供基于 Depth Anything 重训的 ControlNet 深度控制模型、度量深度(metric depth)微调版、以及下游语义分割能力。官方已发布更新版本 Depth Anything V2。
1.1 核心信息一览
| 项目项 | 内容 |
|---|---|
| 项目名称 | Depth Anything |
| 仓库地址 | github.com/LiheYoung/Depth-Anything |
| 项目定位 | 鲁棒的单目深度估计模型 |
| 论文 | CVPR 2024,arXiv:2401.10891 |
| 模型权重 | Hugging Face Spaces |
| 在线 Demo | huggingface.co/spaces/LiheYoung/Depth-Anything |
| 形态 | 命令行脚本 + Python 库 |
| 端口 | 无 |
1.2 适用场景
- 给图像/视频生成深度图,作为 ControlNet 深度条件输入。
- 3D 摄影、景深合成、AR 背景虚化。
- 作为下游视觉任务(语义分割等)的预训练编码器。
1.3 能力边界(官方口径)
- 基础版输出的是相对深度,不是绝对距离(米);需要绝对距离请用
metric_depth/目录下的 NYUv2 / KITTI 微调版。 - 官方提供的推理时间(V100/A100)不含前后处理;RTX 4090 + TensorRT 含前后处理。
2 功能特性
- 相对深度估计:任意输入图输出鲁棒深度图。
- 度量深度:NYUv2 / KITTI 微调版支持 in-domain 与 zero-shot 度量深度。
- 深度控制 ControlNet:比 MiDaS 版更精准的深度条件。
- 视频深度可视化:
run_video.py支持视频逐帧深度。 - 多尺寸:vits / vitb / vitl 三种。
- ONNX / TensorRT:社区已提供导出。
- Transformers 集成:Hugging Face Transformers 三行代码调用。
3 官方界面预览
官方在线 Demo:huggingface.co/spaces/LiheYoung/Depth-Anything。
4 官方跳转链接汇总
| 类别 | 链接 | 说明 |
|---|---|---|
| 仓库 | github.com/LiheYoung/Depth-Anything | 源码 |
| 项目主页 | depth-anything.github.io | 论文与示例 |
| V2 仓库 | Depth-Anything-V2 | 最新版 |
| 模型权重 | checkpoints | vits/vitb/vitl |
| 在线 Demo | Hugging Face Space | 在线试玩 |
| 视频 Demo | JohanDL/Depth-Anything-Video | 视频深度 |
5 前置要求与服务器配置
5.1 软件前提
- Python 3.8+、PyTorch。
- 克隆仓库后
pip install -r requirements.txt。
5.2 硬件建议
| 模型 | 参数量 | 推理时间(V100) |
|---|---|---|
| Small (vits) | 24.8M | 12 ms |
| Base (vitb) | 97.5M | 13 ms |
| Large (vitl) | 335.3M | 20 ms |
GPU 显存需求低(几百 MB 即可),CPU 也可跑。
6 方式一:官方脚本推理(推荐)
git clone https://github.com/LiheYoung/Depth-Anything
cd Depth-Anything
pip install -r requirements.txt
# 对图片目录跑深度估计
python run.py --encoder vitl --img-path assets/examples --outdir depth_vis
# 只输出预测深度图
python run.py --encoder vitl --img-path ./your_images --outdir depth_out --pred-only
# 灰度深度图(不加色板)
python run.py --encoder vitl --img-path ./your_images --outdir depth_out --grayscale参数:
--encoder:vits/vitb/vitl。--img-path:图片目录 / 单图 / 文本文件。--outdir:输出目录。--pred-only:只保存深度图。--grayscale:灰度深度图。
7 方式二:Python 库 / Transformers 调用
from depth_anything.dpt import DepthAnything
encoder = 'vits' # 或 'vitb' / 'vitl'
depth_anything = DepthAnything.from_pretrained(
'LiheYoung/depth_anything_{:}14'.format(encoder)
)无网络环境可手动下载 checkpoint 后本地加载:
model_configs = {
'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]},
'vitb': {'encoder': 'vitb', 'features': 128, 'out_channels': [96, 192, 384, 768]},
'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]}
}
depth_anything = DepthAnything(model_configs['vitl'])
depth_anything.load_state_dict(torch.load('./checkpoints/depth_anything_vitl14.pth'))视频深度:
python run_video.py --encoder vitl --img-path your_video.mp4 --outdir video_depth8 配置项
| 参数 | 说明 |
|---|---|
--encoder |
vits / vitb / vitl,模型规模 |
--pred-only |
只输出深度图,不并排对比 |
--grayscale |
灰度而非彩色深度图 |
9 常用运维命令
# 查看 GPU
nvidia-smi
# 更新代码
git pull
# 查看输出
ls -lh depth_vis/10 常见故障排查
- 模型加载失败 / 无网络:手动从 Hugging Face 下载
depth_anything_vitl14.pth等权重,用本地加载方式。 - 想输出绝对距离:基础模型是相对深度;用
metric_depth/目录下的 NYUv2 / KITTI 微调版。 - 想接入 ComfyUI:社区已有
comfyui_controlnet_aux集成。
11 风险与合规说明
- 模型遵循仓库 LICENSE;商用前需核对。
- 深度图是中间产物,不直接产生版权问题;但生成的下游图像版权归使用者。
- 官方已发布 V2,新项目建议优先用 V2。
本文基于官方 README 整理,仅供学习与部署参考;以仓库最新说明为准。