【计算机视觉】单目深度估计模型-Depth Anything-V2
概述
本文将简要介绍Depth Anything V2单目深度估计模型。该模型旨在解决现有深度估计model在处理complex场景、transparent或reflective objects时的性能限制。相较于上一代model而言,在V2版本中通过使用合成image进行training,并提升teacher网络的capacity;同时通过使用大量伪label data对学生model进行training;最终显著提升了预测precision和计算efficiency。
项目页面:(深度任意性V2系统) Depth Anything V2 论文链接:https://arxiv.org/abs/2406.09414 代码仓库:https://github.com/DepthAnything/Depth-Anything-V2/tree/main

一、模型改进
将所有标记的真实图像替换为合成图像。

在Depth Anything V2的研究中
这一决策涉及以下几个主要原因
- 标签准确性:研究发现,在真实图像中所标注的目标存在较大的模糊性这一问题会导致模型在学习深度信息时出现偏差,在具体应用到细粒度深度预测任务时这一问题表现得尤为明显。
- 合成生成的图像能够提供高质量的深度信息然而由于其与真实世界场景之间存在的显著分布特性差异这使得直接迁移学习效果并不理想为此研究团队采用了两种主要措施:
- 一方面,在合成数据规模上进行了大幅扩展;
- 另一方面,则收集了海量未经标注的真实图像,并借助先进的教师模型为这些图像生成伪标签作为学生模型训练的数据来源。
利用合成图像全面训练教师网络,并通过教师网络生成的伪标签辅助优化学生网络;该团队在单目深度估计领域取得了显著进展,在精细级深度细节处理上实现了质的飞跃;这种方案有效规避了基于真实标注图像的传统方法所带来的局限性,并为其未来的深入研究提供了切实可行的发展方向
扩大教师模型的容量。

通过训练具有更大容量的模型以获取更加多样化的特征表达,并从而提高模型的学习能力。论文采用了以下具体措施。
- 教师模型的选择 :本研究采用了DINOv2-G这一专业级教师模型。该模型具有显著的技术优势,在经过大规模图像预训练后展现出卓越的特征提取能力。
- 利用合成数据训练 :本研究基于五个高分辨率合成数据集开展研究(共计595K幅图像)。这些高质量的数据集为教师模型提供了充分的学习资源。
- 伪标签生成 :经过专业级训练后,该教师模型能够精准产出高质量的伪标签。这些高质量的伪标签被成功用于学生模型的微调过程之中,在提升其真实世界深度预测能力方面发挥了重要作用。
提升教师模型容量的主要目标是使其能够更加精准地捕捉到输入图像中的细微特征。此外,这些特征可以通过知识蒸馏技术传递给学生模型。从而使得学生model即使在较小的scale下也能够维持较高的prediction accuracy.
通过大规模伪标记真实图像的桥梁来教授学生模型

基于生成的伪标签信息
- 扩大应用场景范围:通过大量真实未标注图像的引入,在更多实际应用场景中实现有效的应用效果,并显著提升模型的零样本深度估计能力。
- 基于标签层的知识迁移:借助伪标签技术使学生网络能够获得高质量的预测结果,并且这种迁移方式相较于基于特征层或者logit层的知识蒸馏而言更加安全可靠。
- 安全性对比:所提出的方法基于标签层的知识迁移比基于特征层或者logit层的知识蒸馏更具安全性优势,在教师和学生网络规模差异较大的情况下表现更为突出。
二、使用体验
我们可以在HuggingFace平台上轻松访问深度生成模型的强大功能,并通过其提供的交互界面进行实验与探索。具体而言,在此链接中您可以深入体验深度生成技术的独特魅力:https://huggingface.co/spaces/depth-anything/Depth-Anything-V2

我们能够上传自己的照片, 或者点击下方的示例图片, 滑动右侧箭头即可对比原图与深度图像

三、代码示例
1、准备工作
首先克隆项目到本地并且安装项目所需的所有 Python 依赖项
git clone https://github.com/DepthAnything/Depth-Anything-V2
cd Depth-Anything-V2
pip install -r requirements.txt
2、模型选择
基于需求的条件下,并结合硬件选择合适的模型大小,在下载完成后将其放置于checkpoints文件夹中。
获取大型模型:](https://huggingface.co/depth-anything/Depth- Anything-V2-Large/resolve/main/depth_anything_v2_vitl.pth?download=true "Depth-Anything-V2-Large")

3、简单示例代码
首先导入相关库
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'
初始化了一个 DepthAnythingV2 实例,并加载了预训练权重。随后将模型部署在指定设备上,并切换至评估模式。
计算机视觉
计算机视觉
计算机视觉
