深度感知是理解三维物体并判断这些物体距离的过程。它有助于导航、物体操纵和场景理解等任务。尽管深度感知很重要,但从单张图像估计深度(称为单目深度估计)对人工智能来说是一个具有挑战性的问题。然而,机器学习的进步,特别是深度学习或人工智能,显著提高了单目深度估计的准确性和可靠性。
卷积神经网络和其他深度学习架构通过利用大型数据集和强大的计算资源,在学习从二维图像预测深度方面显示出巨大潜力。这些模型在已知深度信息的多样化图像上进行训练,使它们能够泛化到新的、未见过的场景。
Depth Anything模型基于DPT架构,并在超过6200万张图像上进行了训练。DPT模型的主干利用视觉变换器替代CNN进行密集预测任务,即逐像素预测。DPT是一种从单张图像估计深度的新颖架构。它采用编码器-解码器方法,其中编码器基于视觉变换器,这是计算机视觉领域的重大进步。
编码器(也称为网络主干)在大型语料库(如ImageNet)上进行预训练。解码器聚合来自编码器的特征并将其转换为最终的密集预测。
ViT独特地处理图像,在整个过程中保持相同的细节水平并具有宽视野。这有助于DPT做出详细且全局一致的预测。与通过下采样丢失某些细节的传统方法不同,DPT在所有阶段都保持高图像质量。
在测试单目深度估计和语义分割时,DPT的表现超过了领先的卷积网络28%以上。它在大型数据集上特别有效,甚至在NYUv2和KITTI等较小数据集上创造了新的性能记录。
标记化:输入图像通过以下方式转换为标记:
嵌入:图像标记通过位置嵌入和读取标记进行增强
变换器阶段:标记通过多个变换器阶段
重组:来自不同阶段的标记在多个分辨率下重组成类似图像的表示
融合和上采样:融合模块逐步组合和上采样这些表示,以创建细粒度的预测。融合块使用残差卷积单元来合并特征并增强分辨率
!pip install -q git+https://github.com/huggingface/transformers.git
from transformers import DPTFeatureExtractor, DPTForDepthEstimation
from PIL import Image
import requests
import torch
import numpy as np
# 定义特征提取器和模型
feature_extractor = DPTFeatureExtractor.from_pretrained("Intel/dpt-large")
model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large")
# 获取图像
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
# 准备图像
pixel_values = feature_extractor(image, return_tensors="pt").pixel_values
# 推理
with torch.no_grad():
outputs = model(pixel_values)
predicted_depth = outputs.predicted_depth
# 可视化图像
prediction = torch.nn.functional.interpolate(
predicted_depth.unsqueeze(1),
size=image.size[::-1],
mode="bicubic",
align_corners=False,
).squeeze()
output = prediction.cpu().numpy()
formatted = (output * 255 / np.max(output)).astype('uint8')
depth = Image.fromarray(formatted)Depth Anything V2在深度估计方面取得了显著成功,超越了许多其他模型,并以令人印象深刻的准确性处理具有挑战性的图像。
MiDaS
单目深度估计通过从单张图像确定物体的深度,受益于在大型多样化数据集上的训练。然而,为许多不同环境收集准确的深度信息是一项艰巨的任务,导致各种具有独特特征和偏见的数据集。
该论文介绍了一种新颖的损失函数,该函数处理数据集之间的不一致性,例如未知和变化的尺度和基线。这些损失允许使用来自不同传感器的数据进行训练,包括立体相机(即使具有未知校准)、激光扫描仪和结构光传感器。
基于MIDAS的原理,Depth Anything引入了几个关键改进:
增强的模型架构:Depth Anything V2使用比MIDAS更先进的神经网络架构,结合深度学习的最新发展,以提高深度预测准确性并处理更复杂的场景。
高分辨率处理:与早期模型在高分辨率输入上挣扎不同,Depth Anything V2高效处理详细图像,使其能够捕获细粒度的深度信息并处理复杂的视觉细节。
扩展的训练数据集:除了KITTI和NYU Depth V2等数据集外,Depth Anything V2还利用额外的数据集和合成数据,进一步提高其在多样化环境中的鲁棒性和准确性。
Depth Anything是用于鲁棒单目深度估计的实用解决方案。Depth Anything是一种简单而强大的基础模型,能够处理任何条件下的任何图像。
该数据集使用数据引擎创建,该引擎收集并自动注释大量未标记数据(约6200万),显著增加数据覆盖范围并减少泛化错误。使用了两种有效策略:通过数据增强创建更具挑战性的优化目标,以及开发辅助监督以从预训练编码器继承丰富的语义先验。
Depth Anything V2是V1的重大升级,旨在增强单目深度估计模型。这种方法的主要重点在于改进三个关键点:使用合成图像代替标记的真实图像,增加教师模型的容量,以及使用大规模伪标记的真实图像训练学生模型。
Depth Anything V2的训练流程简单直接,涉及三个步骤:
在不同数据集上训练单目深度估计模型具有挑战性,因为地面真实值的形式各不相同(绝对深度、缩放深度或视差图)。合适的训练方案必须在兼容的输出空间中操作,并使用灵活的损失函数来处理多样化的数据源。
尺度和位移不变损失:
尺度和位移不变损失是设计用于准确测量模型性能的方法,即使提供的深度数据具有与尺度和位移相关的不确定性。
尺度不变性:在某些数据集中,深度信息仅提供到未知尺度,意味着我们不知道确切距离而是相对距离。尺度不变损失确保模型仍然能够学习准确估计深度,而无需知道确切尺度。它专注于物体之间的相对距离,而不是它们的绝对距离。
位移不变性:某些数据集提供的深度信息(视差图)可能由于校准问题或处理步骤而发生位移。位移不变损失考虑这些位移,允许模型学习正确的深度关系,而不会被这些未知位移干扰。
单目深度估计在许多应用中都有用处,以下是一些显著用例:
自动驾驶车辆:深度估计通过提供环境的3D理解,帮助自动驾驶汽车识别和避免障碍物。
增强现实和虚拟现实:该模型可以很好地用于为游戏或AR和VR体验创建真实的3D模型。
医疗成像:通过分析医疗扫描中与深度相关的变化,有助于诊断病情。
监控和安全:通过理解人员的深度和移动来识别和分析活动的能力。
单目深度估计利用单个相机图像推断深度,已成为跨不同领域的变革性技术。其从2D图像提供有价值信息的能力增强了诸如自动驾驶车辆等应用,在这些应用中它有助于障碍物检测和导航。随着技术的进步,单目深度估计是一种强大的算法,可以推动创新和效率,使其成为未来各行业的关键组成部分。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。