官方网站作用,网站后台维护技能,安康网站建设技巧,宠物主题网站模板概述
本篇将简单介绍Depth Anything V2单目深度估计模型#xff0c;该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比#xff0c;V2版本通过采用合成图像训练、增加教师模型容量#xff0c;并利用大规模伪标签现实数据进行学…概述
本篇将简单介绍Depth Anything V2单目深度估计模型该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比V2版本通过采用合成图像训练、增加教师模型容量并利用大规模伪标签现实数据进行学生模型教学显著提高了预测精度和效率。 项目地址Depth Anything V2 论文地址https://arxiv.org/abs/2406.09414 代码地址https://github.com/DepthAnything/Depth-Anything-V2/tree/main 一、模型改进
将所有标记的真实图像替换为合成图像。 在Depth Anything V2的研究中研究团队提出了一种创新的方法即使用完全合成的图像来替代所有带有标签的真实图像以训练单目深度估计模型。这一决策背后的原因有几个关键点
标签精度研究发现真实图像中的标签存在粗略的情况这会导致模型学习到错误的深度信息。特别是在处理细粒度的深度预测时真实标签的粗糙性会对最终的预测结果造成负面影响。领域转移问题虽然合成图像可以提供高质量的深度标签但它们与真实世界的图像之间存在分布上的差异。为了解决这一问题研究团队采取了两方面的策略一是通过增加合成数据的规模来提高其多样性二是引入了大规模未标记的真实图像并利用强大的教师模型为这些图像生成伪标签以作为学生模型训练的数据来源。
通过完全使用合成图像来训练教师模型并借助教师模型生成的伪标签来训练学生模型研究团队成功地提高了单目深度估计模型的性能尤其是在处理细粒度深度信息方面取得了显著进步。这种方法不仅克服了传统使用真实标记图像所带来的问题也为未来的研究提供了一条可行的路径
扩大教师模型的容量。 通过训练更大规模的模型来捕捉更丰富的特征表示进而提高模型的学习能力。论文中采取了以下做法
教师模型的选择选择DINOv2-G作为教师模型。DINOv2-G是一个强大的模型其本身已经在大规模图像上进行了预训练具备很强的特征提取能力。利用合成数据训练使用了五个高精度的合成数据集共包含595K张图像来训练这个教师模型。而上一节中用到的合成数据其好处是可以获得非常精确的深度标签有助于教师模型学习到高质量的特征表示。伪标签生成经过训练后的强大教师模型能够在未标注的真实图像上生成高质量的伪标签。这些伪标签随后被用来训练学生模型帮助学生模型学习到更接近真实世界的深度预测。
扩大教师模型容量的目的就是为了使其能够更好地捕捉到输入图像中的细微特征并且这些特征可以通过知识蒸馏的方式传递给学生模型从而帮助学生模型在较小的规模下也能保持较高的预测精度。
通过大规模伪标记真实图像的桥梁来教授学生模型 利用上述利用生成的伪标签团队训练了四个不同规模的学生模型small, base, large, giant。学生模型通过模仿教师模型的行为学习到了如何在真实图像上做出准确的深度预测。这种方法的主要优点是
增强场景覆盖范围通过引入大量的未标注真实图像可以覆盖更多的实际场景从而增强模型的零样本深度估计能力。知识转移通过伪标签学生模型可以从教师模型那里“继承”到高质量的预测能力类似于知识蒸馏但不是在特征层面而是在标签层面。安全性这种方法在标签层面进行知识转移比在特征或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.txt2、模型选择
根据需求以及硬件选择合适的模型大小下载下来并且放在checkpoints文件夹下 链接如下giant尚未发布 Depth-Anything-V2-Small Depth-Anything-V2-Base Depth-Anything-V2-Large 3、简单示例代码
首先导入相关库
import cv2
import torchfrom depth_anything_v2.dpt import DepthAnythingV2DEVICE 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 实例加载了预训练的权重并将模型移到了之前确定的设备上并设置为评估模式... 点击【计算机视觉】单目深度估计模型-Depth Anything-V2查看全文。