25/2/16 <算法笔记> MiDas原理

MiDaS(Monocular Depth Sensing)是一种基于单目深度估计的技术,它通过深度学习方法使用单张RGB图像(普通2D图像)来估算场景的深度图(Depth Map)。相比于传统的依赖专用深度传感器(如LiDAR或ToF相机)的深度感知方法,MiDaS 不需要额外的硬件,仅依赖普通的单目摄像头即可对场景的深度进行预测。

以下是通俗化的 MiDaS 原理解析:

1. 什么是深度估计?

在计算机视觉中,深度估计旨在为场景中的每个像素估算与摄像机的距离。这种深度信息可以用灰度图表示:

  • 场景中的物体越近,像素值越亮(深度越小)。
  • 场景中的物体越远,像素值越暗(深度越大)。

MiDaS 生成的结果通常是标准化后的相对深度(Relative Depth),而非绝对物理尺度上的距离。

2. MiDaS 的核心原理

(1) 深度估计的训练目标

MiDaS 的核心目标是通过神经网络从单张 RGB 图像提取有意义的特征,并学习将其映射为深度图。其训练过程基于多种深度相关数据集,将网络训练成为能泛化到多场景、多分辨率、多种镜头的深度估计模型。

与其他深度估计方法相比,MiDaS 关注生成相对深度关系,即:预测场景中的物体之间哪个更远,哪个更近,而非精确的实际测量值。

(2) 网络结构
  • MiDaS 使用了一种基于图像特征提取的编码器-解码器(Encoder-Decoder)架构
    • 编码器负责提取图像中的全局特征(例如形状、边缘等),并压缩到低维特征空间。
    • 解码器将这些特征逐步上采样,生成与输入图像相同分辨率的深度图。
  • 最新版本的 MiDaS 使用 Vision Transformer(ViT) 或强大的卷积网络(如 ResNet 或 EfficientNet)作为特征提取器,使模型能够捕捉更多场景中的长距离依赖关系和复杂特征。
(3) 训练数据来源
  • MiDaS 是一种跨领域模型,它通过不同的深度相关数据集进行联合训练,比如:
    • 近景目标的精准深度数据集(如 MegaDepth、ReDWeb)。
    • 室内场景(如 NYU Depth 数据集)。
    • 广域尺度的景深(如 DIW 数据集)。
  • 使用了一种叫 Scale-Invariant Loss(尺度不变损失) 的策略,使模型能够在平滑过渡和深度关系中保持稳健。
(4) 输出相对深度
  • MiDaS 的结果表示的是像素间的相对深度关系,而不是物理距离。
  • 比如说,输出的深度图可能告诉我们“树在汽车后面”,但不能直接告诉我们“树距离摄像头 10 米”。

3. MiDaS 的执行流程

  1. 输入处理

    • 一张 RGB 图像被输入至深度估计模型。
    • 图像经过预处理(如标准化和缩放)以适应网络输入。
  2. 特征提取

    • 编码器提取图像的高维抽象特征,捕捉全局场景结构以及物体之间的关系。
  3. 深度预测

    • 解码器将特征映射为二维深度图,并通过独特的损失函数优化输出结果,使相对深度信息更加准确。
  4. 后处理与输出

    • 将神经网络输出的深度图标准化(例如归一化到0-255),方便视觉化或后续任务使用。

在 MiDaS(或单目深度估计)中,模型的核心目标是从输入的 RGB 图像中学习到场景的深度关系,并通过特定的损失函数来优化。这些公式主要围绕以下几个方面展开:前向传播中的深度表示网络参数优化的损失函数,以及标准化(后处理)操作

MiDaS 的核心任务是将输入 RGB 图像(3 通道)映射到一个深度图(Depth Map,1 通道)。可以用以下公式表示:

MiDaS 使用多种深度相关的训练数据,其中一部分数据只提供相对深度,而非绝对深度。为此,MiDaS 引入一种尺度不变损失(Scale-Invariant Loss),专注于优化深度关系,而不受绝对尺度的影响。

(1) 尺度不变损失(Scale-Invariant Loss)

尺度不变损失函数用于训练深度估计模型,让其专注于预测正确的点间深度关系,而忽略整体深度的绝对大小。这一损失由两部分组成:点对点误差项和整体协方差项。

(2) 梯度一致性损失(Gradient Consistency Loss)

此外,为了使预测深度图展现更平滑的远近关系,MiDaS 还引入了一个梯度一致性损失,用于比较深度图的梯度变化(即物体边缘和纹理等特征):

(3) 总体损失

结合尺度不变损失和梯度一致性损失,MiDaS 的总体损失函数可以表示为:

λgrad​:控制梯度损失对总损失的影响权重(通常是一个超参数)。

输出的深度图经常是未归一化的相对深度,因此需要后处理(标准化)以便易于理解或进一步处理。假设原始深度图的像素值为 D^iD^i​,我们可以对其进行线性归一化到区间 [0,1][0,1]:

由于 MiDaS 使用的网络(如 ResNet 或 Vision Transformer)会对输入图像进行下采样,再解码生成深度图,可能会导致输出的深度图分辨率低于原始图像分辨率。因此需要插值进行分辨率恢复:

双线性插值(Bilinear Interpolation):

在推理阶段,单张 RGB 输入图像 II 进入模型后,经过编码器提取特征,再通过解码器生成深度图:

  • Wencode​:编码器权重,提取图像的特征 ϕ(I)。
  • Wdecode​:解码器权重,将低维特征还原以输出深度图。
  • 最终得到的深度图可以通过归一化和后处理调整,以适用于具体任务。

大致的方法可以归纳为将一张三通道(RGB)的图片编码为一通道(单通道)的过程,但背后还涉及更多的细节来确保模型不仅仅是简单地转换通道,而是能够精准地提取和预测深度信息

简单归纳:RGB(三通道) -> Depth Map(一通道)

但是,不同于对颜色、纹理等直接编码,这里的一通道并不是像灰度图那样只表示亮度,而是深度信息,即图像中每个像素都含有该点与相机之间的相对距离。模型的核心任务是从三通道图像中理解物体的几何关系和场景的三维信息,而这需要模型具备一些特殊能力:

实际做了哪些复杂的事情

  1. 特征提取:看透二维信息的本质

    • 对于三通道的输入图片来说,RGB 中的红、绿、蓝通道值本身其实只包含像素亮度信息。要估计深度,模型需要从二维特征中提取潜在的三维信息
    • 举个例子:模型要认出两颗球相互遮挡,并判断哪个更靠近镜头。
    • 这就需要依赖神经网络的编码器部分(通常是采用预训练的 ResNet 或 Transformer 变种网络),学习到这些复杂的特征关系。
  2. 相对深度 vs 绝对深度

    • 由于单目深度估计只能基于一张图片,它缺乏真实场景的绝对度量(比如激光雷达提供的真实深度值),所以预测出的深度图是一个相对深度图
    • 比如一棵树比一栋建筑物近,但具体的米数可能无法得知。
  3. 损失函数引导的深度学习

    • 模型在训练时依赖特殊的损失函数,比如 MiDaS 提到的尺度不变损失(Scale-Invariant Loss),这类损失函数能避免模型被图片缩放和场景比例的问题干扰,让它更关注哪些物体更近,哪些更远
  4. 梯度一致性:确保边界清晰

    • 为了让深度预测能捕捉到物体的轮廓和边界,模型还通过梯度损失或边缘一致性损失,强制让深度图中的变化(比如边缘处的深度差)与原图片的结构相一致。
  5. 后处理:标准化单通道深度图

    • 深度图本身是理论上的相对值,因此最后的输出通常会经过归一化或插值来调整尺度或增强可视化效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python+halcon 解读labelme标注生成marksimage

这一段代码封装了一个类,需要传统一个图片和标注后json文件所在的地址,标注的选项是polygon,主要是用于unet深度学习网络 在初始化时需要输入文件(imagejeson)路径,多分类任务的label_list。会在项目目录下…

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中,我们致力于通过灵活的补贴策略激励商家,与商家共同打造良好的合作关系,也会提供多样化的营销活动,帮助商家吸引更多用户下单。通过这些活动,不仅能够提高商家的销量&#xff0c…

英语—四级CET4考试—技巧篇—选词填空—实操教学—2014 年 6 月大学英语四级考试真题(第 2 套)

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,目前中南大学MBA在读,也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 &…

线性代数中的正交和标准正交向量

在线性代数中,理解正交向量和正交向量至关重要,尤其是对于机器学习中的应用。这篇博文将简化这些概念,而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零,则认为这两个向量是正交的。但点积到底是什么呢&am…

企业文件共享中的权限管理与安全风险防范

在企业的日常运营中,文件共享是必不可少的一项工作。然而,文件共享过程中如果权限管理不当,极易引发安全风险,导致企业敏感信息泄露。因此,加强文件共享中的权限管理与安全风险防范,对于保障企业信息安全至…

急停信号的含义

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…

数据结构:图;邻接矩阵和邻接表

邻接矩阵: 1.概念: 邻接矩阵是图的存储结构之一,通过二维数组表示顶点间的连接关系。 2.具体例子 : 一.无向图邻接矩阵示例: 示例图(顶点:A、B、C,边:A-B、B-C&…

Kubernetes-master 组件

以下是Kubernetes Master Machine的组件。 etcd 它存储集群中每个节点可以使用的配置信息。它是一个高可用性键值存储,可以在多个节点之间分布。只有Kubernetes API服务器可以访问它,因为它可能具有一些敏感信息。这是一个分布式键值存储,所…

【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】

老铁们好!今天我们要来一场长达两万字的超详细技术探险,我会像拆解乐高积木一样把前馈神经网络(Feedforward Neural Network)的每个零件摆在台面上,用最接地气的方式让你彻底搞懂这个深度学习基石的工作原理。准备好了吗?我们开始吧! 第一章:神经网络的 “乐高积木” 1…

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…

【环境安装】重装Docker-26.0.2版本

【机器背景说明】Linux-Centos7;已有低版本的Docker 【目标环境说明】 卸载已有Docker,用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址:Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…

字节跳动后端二面

📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…

SpringBoot中使用MyBatis-Plus详细介绍

目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…

vue3读取webrtc-stream 视频流

一.首先下载webrtc-stream&#xff0c;方便自己本地搭建视频流服务 https://download.csdn.net/download/cyw8998/90373521 解压后&#xff0c;启动命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代码如下 <template><h1>video</h1><video id&…

vue3搭建实战项目笔记二

vue3搭建实战项目笔记二 2.1.git管理项目2.2.隐藏tabBar栏2.2.1 方案一&#xff1a;在路由元信息中设置一个参数是否显示tabBar2.2.2 方案二&#xff1a;通过全局设置相对定位样式 2.3.项目里封装axios2.3.1 发送网络请求的两种做法2.3.2 封装axios并发送网络请求2.3.2.1 对axi…

USC 安防平台之移动侦测

随着第四次科技革命的开启&#xff0c;AI技术获取了突飞猛进的发展&#xff0c;视频监控对应的视频分析技术也获取了巨大的发展。 还记得15年前采用人工提取特征做前景背景分离和提取&#xff0c;大部分依赖CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;开发难度…

Unity CommandBuffer绘制粒子系统网格显示

CommandBuffer是 Unity 提供的一种在渲染流程中插入自定义渲染命令的机制。在渲染粒子系统时&#xff0c;常规的渲染流程可能无法满足特定的渲染需求&#xff0c;而CommandBuffer允许开发者灵活地设置渲染参数、控制渲染顺序以及执行自定义的绘制操作。通过它&#xff0c;可以精…

【天地图】绘制、删除点线面

使用天地图绘制、删除点线面 实现效果图地图组件完整代码使用地图组件完整代码 实现效果图 地图组件完整代码 // 天地图组件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)

通过B站黑马程序员的八股文教学&#xff0c;自己也二刷了&#xff0c;结合ChatGpt、deepSeek总结了一下,Java八股文详细文档.2&#xff08;Redis篇和消息中间件篇&#xff0c;还没有写完&#xff0c;这只是一部分&#xff09; Java八股文详细文档.1&#xff08;包含JVM篇、数据…

简述 tsconfig.json 中 rootDir 和 include 之间的关系

tsconfig.json 中的 rootDir 和 include 之间有一定的关系&#xff0c;但它们的作用是不同的。理解它们的关系可以帮助你更好地配置 TypeScript 项目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 编译器&#xff08;tsc&#xff09;的“根目录”。它的主要作用是&#x…