Depth Map Prediction from a Single Image using a Multi-Scale Deep Network 论文笔记

本文介绍了一种用于单张图片深度估计的多尺度深度网络。该网络由全局粗糙网络和局部细化网络组成,能从单张图片估计深度图,解决了全局尺度的歧义性问题。通过尺度不变误差和数据增强策略,作者在NYUDepth和KITTI数据集上取得了最佳性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 摘要

本文作者提出了一种多尺度的深度网络用来从单张图片估计深度图。该网络由两部分组成:一个全局粗糙网络以及一个局部细化网络。同时,作者还提出了一种尺度不变误差来估计深度关系。最终作者利用原始训练数据集在 NYU Depth 和 KITTI 数据集上获得了当前最佳性能。


2. 介绍

估计深度对于理解一个场景的几何信息是非常重要的,它能为目标和环境提供丰富的表达,从而有助于目标识别任务以及 3D 建模等应用。

作者认为立体图片深度估计通过局部表面特征就能够获取鲁棒的对应点关系,使用局部视差就足矣。而单张图片要想估计出深度则需要借助全局图像,挖掘出潜在的信息,如图片中线条的角度、透视图、目标大小、位置以及大气效应。

另外,作者认为从单张图估计深度这个任务是有着内在歧义性的,全局尺度就是其中之一,一个极端的例子就是一个普通的房间和一个 dollhouse。作者为了解决这个问题于是提出了尺度不变误差,该误差关注的是场景的空间关系而非真实尺度下的深度值,而这点也适用于 3D 建模等应用。

文章中作者提出了一种新的估计单张图片深度的方法,通过一个多尺度网络直接回归深度。具体网络由两部分组成,粗糙网络利用全局图像信息能够估计出图像的模糊深度,细化网络能够使深度图的局部细节更加清晰。


3. 方法

3.1. 模型结构

网络模型整体结构如下图所示。
在这里插入图片描述
上方是粗糙网络用来获取图片全局的模糊深度值,下方是细化网络,用于改善细节信息。粗糙网络中反复使用卷积与池化层,后接两个全连接层,并将最后一个全连接层直接转换为粗糙网络输出的特征图(4096 -> 4070 -> 1 * 74 * 55),同时在这层中(第 6 层)使用了 Dropout 防止过拟合。细化网络中也采用卷积加池化的方式提取特征,但是除了第一层,其他层不改变特征图大小,并在第二层将粗糙网络的输出合并起来一起训练,最终输出的深度图大致是原图的 1/4 分辨率,表格中给出了详细的参数。整个训练是分两步走的,先训练好粗糙网络,再训练细化网络,训练细化网络时,不更新粗糙网络输出结果的。这里很重要的一点是在粗糙网络和细化网络的第一层卷积中都没有设置 padding,因此最终输出的深度图不包含原图最外层 4 像素宽度的区域。

3.2. 尺度不变误差

作者先定义了下面这种形式的尺度不变误差。
D(y,y∗)=1n∑i=1n(log yi−log yi∗+α(y,y∗))2 D(y,y^*)=\frac{1}{n}\sum^n_{i=1}(\text{log}\ y_i-\text{log}\ y_i^*+\alpha(y,y^*))^2 D(y,y)=n1i=1n(log yilog yi+α(y,y))2

其中 y,y∗y,y^*y,y 分别是估计的深度图以及真实的深度图,nnn 是总的像素点个数,α(y,y∗)=1n∑i(log yi∗−log yi)\alpha(y,y^*) = \frac{1}{n}\sum_i(\text{log}\ y_i^*- \text{log}\ y_i)α(y,y)=n1i(log yilog yi)α(y,y∗)\alpha(y,y^*)α(y,y) 代表估计深度图与真实深度图在log空间的平均差值,将该值叠加在每个像素点的对数深度误差上就使得最终的误差具有了全局的尺度不变性。估计的深度图全局增加或减小深度均不会改变误差大小。

D(y,y∗)=1n∑i,j((log yi−log yj)−(log yi∗−log yj∗))2=1n∑idi2−1n2∑i,jdidj=1n∑idi2−1n2(∑idi)2 \begin{aligned} D(y,y^*) & = \frac{1}{n}\sum_{i,j}((\text{log}\ y_i-\text{log}\ y_j)-(\text{log}\ y_i^*-\text{log}\ y_j^*))^2 \\ & = \frac{1}{n}\sum_id^2_i-\frac{1}{n^2}\sum_{i,j}d_id_j = \frac{1}{n}\sum_id^2_i-\frac{1}{n^2}\bigg(\sum_id_i\bigg)^2 \end{aligned} D(y,y)=n1i,j((log yilog yj)(log yilog yj))2=n1idi2n21i,jdidj=n1idi2n21(idi)2

其中 di=log yi−log yi∗d_i = \text{log}\ y_i - \text{log}\ y_i^*di=log yilog yi,从第一行等式我们可以看出该误差关注的是相对深度,例如 yiy_iyiyi∗y_i^*yi 可能不等,但是只要 (log yi−log yj)(\text{log}\ y_i-\text{log}\ y_j)(log yilog yj)(log yi∗−log yj∗)(\text{log}\ y_i^*-\text{log}\ y_j^*)(log yilog yj) 相等,误差依然为 0。另外,即使估计的深度值 yi,yjy_i,y_jyi,yj 都乘上一个常数,计算的误差也不会变化,这就证明了该误差确实有尺度不变性。从等式第二行我们也可以看到 −1n2∑i,jdidj-\frac{1}{n^2}\sum_{i,j}d_id_jn21i,jdidj 就是在 MSE 基础上添加的一个惩罚项,要想该误差小,di,djd_i,d_jdi,dj 就要同号,即前面表达的相对深度误差要小。

3.3. 训练损失

最终的训练损失是正常均方误差以及上述尺度不变误差的一个权衡后的综合结果。
L(y,y∗)=1n∑idi2−λn2(∑idi)2 L(y,y^*)=\frac{1}{n}\sum_id^2_i-\frac{\lambda}{n^2}\bigg(\sum_id_i\bigg)^2 L(y,y)=n1idi2n2λ(idi)2

其中 λ∈[0,1]\lambda\in[0,1]λ[0,1]λ=0\lambda=0λ=0 就是均方误差 l2l2l2λ=1\lambda=1λ=1 就是尺度不变误差,最终作者选择了两者的平均,λ=0.5\lambda=0.5λ=0.5,能在估计出良好绝对深度的情况下略微提高可视化效果。

在训练中作者发现大部分真实的深度图中都含有 missing values,特别是在物体的边缘、窗户以及镜面物体上,因此作者将这些位置的像素点分割出来,并仅在有效点上计算损失。

3.4. 数据增强

作者在实验过程中采用了尺度、旋转、随机裁剪、颜色变换以及翻转等策略来进行数据增强,具体如下。
在这里插入图片描述


4. 实验

作者在 NYU Depth 以及 KITTI 数据集上将自己的方法与之前的方法进行了比较,通过实验发现作者提出方法效果是当前最好的。这里要注意的一点是由于作者最终输出的深度图约为原图的 1/4 分辨率大小(长宽均为原图 1/4),因此在计算各项指标前,要先将估计的深度图上采样或是将真实的深度图下采样。下面展示作者的效果图。
在这里插入图片描述
通过实验,也确实证明了作者提出的多尺度网络能够提高深度估计的精度,并且细化网络能够有效改善最终深度图细节。


5. 讨论

作者在论文最后谈到了未来可以改进的地方,如利用 3D 几何信息,以及通过更好的局部细化网络将深度图恢复至原始图像的尺度大小。

### 多目标算法与深度学习在电力负荷区间预测中的应用 #### 方法概述 多目标优化算法和深度学习技术可以有效结合用于解决复杂的电力负荷区间预测问题。通过引入改进的状态传播方法以及基于人工智能的预处理手段,能够显著提升高频率惯性数据的质量[^1]。这些高质量的数据随后被输入到经过训练的深度学习模型中,从而实现更精确的预测。 对于具体的实施过程而言,线性规划作为一类重要的数学建模工具,在构建目标函数时起到关键作用[^2]。它可以帮助定义多个相互竞争的目标,比如最小化预测误差的同时最大化计算效率或者资源利用率。 以下是具体的技术细节: #### 数据预处理阶段 利用AI驱动的降采样技术和特征提取流程来清理原始采集得到的大规模时间序列型用电量记录。此步骤旨在减少冗余信息并增强信号特性以便后续分析操作更加高效稳定。 ```python import numpy as np from sklearn.preprocessing import StandardScaler def preprocess_data(raw_inertial_data): scaler = StandardScaler() scaled_data = scaler.fit_transform(np.array(raw_inertial_data).reshape(-1, 1)) # Implement down-sampling logic here based on specific requirements. return scaled_data.flatten() # Example usage: processed_data = preprocess_data([your_raw_dataset]) ``` #### 构建预测模型 采用先进的神经网络架构如长短记忆单元(LSTM),卷积层(Convolutional Layers)等组合而成复杂结构体来进行未来一段时间内的负载范围估计工作。同时设置不同的损失项分别对应上界下界的逼近程度差异情况下的惩罚力度调整机制。 ```python import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.LSTM(50, activation='relu', input_shape=(n_timesteps, n_features)), tf.keras.layers.Dense(2) # Output layer with two neurons for upper and lower bounds ]) model.compile(optimizer='adam', loss=['mse','mae']) ``` #### 结果评估标准 考虑到实际应用场景需求多样性,除了常规均方根偏差(RMSE)指标外还需加入覆盖率(Coverage Probability),宽度(Widht)等相关度量方式综合考量最终方案优劣之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值