首页
/ Depth-Anything-V2 深度估计模型详解与使用指南

Depth-Anything-V2 深度估计模型详解与使用指南

2025-07-07 07:45:50作者:裴麒琰

项目概述

Depth-Anything-V2 是一个先进的深度估计模型系列,基于强大的预训练编码器架构,通过简单的DPT头部进行深度回归。该项目专注于精确的度量深度估计(metric depth estimation),能够预测场景中物体的实际物理距离(单位为米),而非仅输出相对深度信息。

模型特点

  1. 双场景适配:提供针对室内场景(Hypersim数据集)和室外场景(Virtual KITTI 2数据集)分别优化的模型版本
  2. 多规模选择:包含Small(24.8M)、Base(97.5M)、Large(335.3M)三种规模,满足不同计算需求
  3. 度量输出:直接输出以米为单位的物理深度值,便于实际应用
  4. 高性能:基于Depth-Anything-V2强大的预训练编码器,具有出色的泛化能力

模型下载与准备

项目提供了6个预训练模型,按场景和规模分类如下:

基础模型 参数量 室内模型 室外模型
Small版 24.8M Hypersim专用 Virtual KITTI 2专用
Base版 97.5M Hypersim专用 Virtual KITTI 2专用
Large版 335.3M Hypersim专用 Virtual KITTI 2专用

使用建议

  • 计算资源允许时优先选择Large版本
  • 室内场景优先尝试Hypersim专用模型

快速开始

环境准备

  1. 安装Python依赖:
pip install -r requirements.txt
  1. 下载所需模型权重文件并放入checkpoints目录

Python API使用示例

import cv2
import torch
from depth_anything_v2.dpt import DepthAnythingV2

# 模型配置选择
encoder = 'vitl'  # 可选'vits','vitb','vitl'
dataset = 'hypersim'  # 'hypersim'室内/'vkitti'室外
max_depth = 20 if dataset == 'hypersim' else 80  # 室内20米/室外80米

# 初始化模型
model = DepthAnythingV2(
    encoder=encoder,
    features=256 if encoder == 'vitl' else (128 if encoder == 'vitb' else 64),
    out_channels=[256, 512, 1024, 1024] if encoder == 'vitl' else 
                ([96, 192, 384, 768] if encoder == 'vitb' else [48, 96, 192, 384]),
    max_depth=max_depth
)

# 加载权重
model.load_state_dict(torch.load(f'checkpoints/depth_anything_v2_metric_{dataset}_{encoder}.pth'))
model.eval()

# 推理示例
image = cv2.imread('input.jpg')
depth_map = model.infer_image(image)  # 获取以米为单位的深度图(H×W numpy数组)

命令行使用

  1. 单张图像推理:
# 室内场景
python run.py --encoder vitl \
              --load-from checkpoints/depth_anything_v2_metric_hypersim_vitl.pth \
              --max-depth 20 \
              --img-path input.jpg \
              --outdir results
              
# 室外场景
python run.py --encoder vitl \
              --load-from checkpoints/depth_anything_v2_metric_vkitti_vitl.pth \
              --max-depth 80 \
              --img-path input.jpg \
              --outdir results

可选参数:

  • --input-size: 指定输入图像尺寸
  • --save-numpy: 保存numpy格式的深度图
  1. 生成点云:
python depth_to_pointcloud.py \
    --encoder vitl \
    --load-from checkpoints/depth_anything_v2_metric_hypersim_vitl.pth \
    --max-depth 20 \
    --img-path input.jpg \
    --outdir pointclouds

模型训练

如需复现训练过程,需先准备以下数据集:

  • 室内:Hypersim数据集
  • 室外:Virtual KITTI 2数据集

训练命令:

bash dist_train.sh

技术原理

Depth-Anything-V2采用了两阶段训练策略:

  1. 在大规模无标签数据上进行预训练,学习通用的深度特征表示
  2. 在特定场景的合成数据(Hypersim/Virtual KITTI 2)上进行微调,获得度量深度估计能力

模型架构特点:

  • 基于Vision Transformer的编码器
  • DPT(Dense Prediction Transformer)解码头
  • 针对不同场景调整最大深度范围(室内20米/室外80米)

应用场景

  1. 增强现实:精确的3D场景理解
  2. 机器人导航:避障与路径规划
  3. 3D重建:从单张图像生成点云
  4. 自动驾驶:环境感知与距离估计

性能建议

  1. 对于实时应用,建议使用Small或Base版本
  2. 高精度需求场景推荐Large版本
  3. 根据实际场景深度范围选择合适的max_depth参数
  4. 室内外场景使用对应专用模型可获得最佳效果

引用

如使用本项目,请引用相关论文:

@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}
}