继图像分割模型(SAM) 取得成功之后,meta发布了SAM 2,这是一个用于在图像和视频中实时对象分割的统一模型。SAM 2 可以分割任何视频或图像中的任何对象 - 即使对于以前从未见过的对象和视觉域也是如此,从而无需进行自定义调整即可实现多种对象的分割。可以直接在图片与视频上面分割对象,其效果显著,得到了大家的一致认可。
“Depth Anything V2”模型是原始Depth Anything模型的改进版,专注于提升单目深度估计能力。单目深度估计是指使用单张图像来预测场景深度的过程,这对于计算机视觉、机器人技术和增强现实应用至关重要。其从名字可以看出,meta 发布的是分割一切模型,而香港大学与字节联合推出的是单目深度估计一切模型。单目深度估计模型,可以有效使用在计算机视觉任务,自动驾驶任务等任务上。
Depth Anything V2 采用 595K 合成标记图像和 62M+ 真实未标记图像进行训练,提供最强大的单目深度估计 (MDE) 模型。比 Depth Anything V1 具有更细粒度的细节。比 Depth Anything V1 和基于 SD 的模型(例如 Marigold、Geowizard)更稳定。比基于 SD 的模型更高效(快 10 倍)且更轻量。
Depth Anything V2的几个关键改进如下:
合成数据的使用:模型使用合成图像进行训练,而不是依赖标注过的真实图像。这种方法允许更好地控制训练数据,从而能够提高深度预测的准确性。
师生训练框架:模型采用了师生训练框架,其中更强大的教师模型指导较小的学生模型的学习过程。这种方法提高了学生模型的准确性和泛化能力。
高效且可扩展:与之前的版本以及类似于Stable Diffusion的模型相比,Depth Anything V2的效率显著提升——其速度快了10倍以上,并提供不同规模的模型(参数量从2500万到13亿不等),以适应不同的使用场景。
基准测试和评估:鉴于现有测试集的局限性,Depth Anything V2的开发者构建了一个包含多样场景和精确注释的新评估基准,以支持该领域的持续研究。
这些改进使得Depth Anything V2成为需要稳健且精确深度估计任务的强大工具,适用于从自动驾驶到3D重建等各种应用。
深度模型与分割模型的区别
单目深度估计模型:这个模型的目标是从单张图像中估计每个像素的深度值。也就是说,它试图确定每个像素点离摄像头的距离。这对于场景理解和三维重建非常重要。
分割模型:这个模型的目标是将图像分割成不同的区域或对象类别。每个像素都被分配一个类别标签,通常用于对象检测、语义分割或实例分割等任务。
深度估计:输出是一个深度图,其中每个像素的值表示相机到该像素点的距离。
分割:输出是一个分割图,其中每个像素的值表示该像素所属的类别或对象的标签。
深度估计:广泛用于自动驾驶、机器人导航、增强现实等场景中,需要了解环境的三维结构。
分割:用于图像分析、图像编辑、医学图像处理等任务中,需要识别和分隔不同的对象或区域。
在某些应用中,深度信息和分割信息结合使用可以提供更全面的场景理解。例如,在自动驾驶中,深度估计可以帮助了解物体的距离,而分割可以帮助识别物体的类别,两者结合可以更准确地识别和定位对象。两者都属于计算机视觉任务,都是为了从图像中提取有用的信息,只是侧重点不同。深度估计关注的是空间结构,而分割关注的是图像内容的语义。
有时深度估计和分割可以互相补充。深度信息可以帮助分割模型更好地识别对象的边界,尤其是在复杂场景中;而分割信息可以帮助深度估计模型在特定区域内进行更精确的深度预测。
为什么需要深度估计模型?
尽管分割模型已经可以识别图像中的不同对象,但深度估计模型仍然有其不可替代的重要性:
三维感知:分割模型提供的是二维图像的语义信息,而深度估计提供的是三维空间的位置信息。要实现对环境的全面理解,尤其是在需要进行空间导航和物体抓取的场景中,深度信息是必不可少的。
增强应用功能:在增强现实(AR)和虚拟现实(VR)应用中,深度信息可以帮助将虚拟对象正确地放置在真实世界中,使虚拟内容与现实世界自然融合。
自动驾驶和机器人:对于自动驾驶汽车和机器人来说,了解物体的距离和空间关系对于安全和高效的导航至关重要。深度信息能够提供距离估计,帮助做出实时决策。
处理复杂场景:在复杂场景中,分割模型可能无法完全解决遮挡、物体重叠等问题。深度信息可以帮助区分和理解这些复杂的空间关系。
Depth Anything V2模型实战
Depth Anything V2为开源模型,其已经在 GitHub 上分享了预训练权重。其模型一共有四种尺寸大小的模型,其中最大的模型还没有提供分享。当然我们可以使用 large模型进行图片的深度估计。
其 hugging face 已经上线了在线体验demo,可以直接上传自己的图片,进行深度模型的估计。
当然喜欢代码的小伙伴也可以使用 transformers库进行图片或者视频的深度模型估计。
from transformers import pipelinefrom PIL import Imagepipe = pipeline(task="depth-estimation", model="depth-anything/Depth-Anything-V2-Small-hf")image = Image.open('your/image/path')depth = pipe(image)["depth"]也可以直接使用官方分享的代码
import cv2import 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'model = DepthAnythingV2(**model_configs[encoder])model.load_state_dict(torch.load(f'checkpoints/depth_anything_v2_{encoder}.pth', map_location='cpu'))model = model.to(DEVICE).eval()raw_img = cv2.imread('your/image/path')depth = model.infer_image(raw_img)当然在代码使用前,需要初始化自己的环境
git clone https://github.com/DepthAnything/Depth-Anything-V2cd Depth-Anything-V2pip install -r requirements.txt单目深度估计是指使用单张图像来预测场景深度的过程,这对于计算机视觉、自动驾驶,机器人技术和增强现实应用至关重要。当然除了图片外,Depth Anything V2也可以进行视频的实时深度估计。
https://github.com/DepthAnything/Depth-Anything-V2https://depth-anything-v2.github.io/https://huggingface.co/spaces/depth-anything/Depth-Anything-V2https://arxiv.org/pdf/2406.09414