Depth Map Prediction from a Single Image using a Multi-Scale Deep Network(NIPS2014)论文阅读

Depth Map Prediction from a Single Image using a Multi-Scale Deep Network(NIPS2014)论文阅读

这篇文章是使用深度卷及网络进行单目深度估计的第一篇文章,该文章中提到的很多概念,一直被后来的研究者引用,因此拥有很高的阅读价值。这份工作发表在2014年的NIPS会议上。

基本框架

该网络分为两个模块,一个是“粗糙尺度网络”,那么这个网络模块首先对场景的全局深度进行了一个大概的预测,得到了哪里是远,哪里是近的一个预测。另一个是“精细尺度网络”,在场景粗略深度的基础上,该模块对场景内的局部区域进行精细化的深度预测。结构如下:
整体框架

另外,两个网络模块均输入原RGB图像,而精细网络也会输入粗糙网络的结果。

全局粗糙尺度网络

粗糙尺度网络
粗糙尺度网络包含5个特征提取层(卷积和池化),之后用两个全连接层,其输出是原图的 1/4 的分辨率,是一个原图的中心部分裁出。

在粗糙尺度网络中,输入是RGB图像,输出是粗糙的深度图。最后两层是全连接层,用于整合全图视野,前面几层用于将图像中不同区域的信息进行融合。作者是想让该网络对整个场景的深度有一个大体的理解。在这里,该网络会去利用场景内的一些特殊线索,比如“消失点”,“物体的位置”,还有“房间的大致框架”。这些信息都属于全局信息,而不是局部信息,因此处理局部信息的精细尺度网络就无法学习到这些信息。但是这样学习到的信息也存在一个问题,问题就是输出的深度图像只是大概的深度信息,对细小边缘响应不强。我感觉就像是近视的人摘了眼镜看到的场景。

另外,这个网络的全连接层会学习区域的模板。个人觉得,这个模板就是图像中哪些地方是远的,哪些地方是近的的分布信息图。
在这里插入图片描述
上图表示粗糙网络中最后一层的权重向量,(a)是KITTI数据集训练的结果,(b)是NYUDepth数据集训练的结果,红色代表远,蓝色代表近,黑色表示0。从权重中可以看到,KITTI数据集中,深度常常在道路两边有变化,NYUDepth数据集中,权重常常显示出墙与道路的区域。

局部精细尺度网络

该网络是整体框架中的第二步,这一部分的任务是对粗糙预测结果进行修改,让其与物体,墙的边缘等局部信息进行对齐。该子网络中,只有卷积层及在第一层提取边缘信息时使用的池化层。

精细化网络中,一个输出像素的感受野是45*45的输入像素,同时输出图像是输入图像的1/4大小。更具体的来说,粗糙网络输出给进来是作为一个外加的低层特征层的。这样设计,粗糙预测是和第一个精细尺度网络有一样的空间形状(在池化之后)。所有的隐藏单元用了Relu,最后一层是线性的,因为它要预测深度。作者先用目标的ground truth训练粗糙网络,然后训练精细化尺度的网络(保持粗糙尺度网络固定)。

尺度不变误差

该文章提出的一个非常重要的点,就是尺度不变误差(Scale-Invariant Error),而我看到的其他学习笔记中,均没有对其进行能够理解的阐述?,所以我在这里详细说一下。

什么是尺度不变。按照我个人理解,在SIFT中,由于特征点是在多尺度空间上采集的,因此两张不同尺度的图像的特征点在进行matching的时候,可以排除尺度的影响,保证不同尺度下的相同特征点依旧可以被匹配上。该性质可以被成为尺度不变性。

而在单目深度估计的问题中,从理论上说单目是无法获得尺度信息的,深度学习可以从大量的数据中学习到场景的尺度信息。但是,如果直接使用RMSE的loss函数来进行网络的训练,没有对图像尺度进行约束,导致估计得到的深度图像可能像素间相对值是准确的,但是整体深度和groundtruth给出的深度存在尺度上的差异。因此作者给RMSE的loss函数添加了一个约束项用以进行全局的尺度约束。

y ∗ y^* y y y y分别是预测得到的深度图和ground truth,他们均拥有 n n n个像素,而 y i ∗ y_i^* yi y i y_i yi分别表示预测深度图和ground truth上的第 i i i个像素。作者假设了 l o g log log空间下的平均误差如下:
α ( y , y ∗ ) = 1 n ∑ i ( l o g ( y i ∗ ) − l o g ( y i ) ) \alpha(y,y^*) = \frac{1}{n}\sum_i(log(y_i^*)-log(y_i)) α(y,y)=n1i(log(yi)log(yi))
该误差项可以被作为绝对尺度估计的loss项,因为 e α = ∏ i = 1 n y i ∗ y i n e^\alpha = \prod_{i=1}^n\sqrt[n]{\frac{y_i^*}{y_i}} eα=i=1nnyiyi 表示的是平均尺度因子,同时 e α e^\alpha eα是正相关函数,因此对 e α e^\alpha eα的最小化可以看作为对 α \alpha α的最小化。

所以作者将 α ( y , y ∗ ) \alpha(y,y^*) α(y,y)结合到了RMSE中,新的loss函数如下:
D ( y , y ∗ ) = 1 2 n ∑ i = 1 n ( l o g ( y i ) − l o g ( y i ∗ ) + α ( y , y ∗ ) ) 2 D(y,y^*) = \frac{1}{2n}\sum_{i=1}^n(log(y_i)-log(y_i^*)+\alpha(y,y^*))^2 D(y,y)=2n1i=1n(log(yi)log(yi)+α(y,y))2
接下来作者对该公式进行了展开,设 d i = 1 n ∑ i ( l o g ( y i ∗ ) − l o g ( y i ) ) d_i=\frac{1}{n}\sum_i(log(y_i^*)-log(y_i)) di=n1i(log(yi)log(yi)),然后将上一个公式等价为:
D ( y , y ∗ ) = 1 2 n 2 ∑ i , j ( l o g ( y i ) − l o g ( y j ) − ( l o g ( y i ∗ ) − l o g ( y j ∗ ) ) ) 2 = 1 n ∑ i d i 2 − 1 n 2 ( ∑ i d i ) 2 D(y,y^*) = \frac{1}{2n^2}\sum_{i,j}(log(y_i)-log(y_j)-(log(y_i^*)-log(y_j^*)))^2 \\=\frac{1}{n}\sum_id_i^2-\frac{1}{n^2}(\sum_id_i)^2 D(y,y)=2n21i,j(log(yi)log(yj)(log(yi)log(yj)))2=n1idi2n21(idi)2

在此,我个人觉得有些问题,因为以下两个公式应该无法等价:
1 2 n ∑ i = 1 n ( l o g ( y i ) − l o g ( y i ∗ ) + α ( y , y ∗ ) ) 2 1 2 n 2 ∑ i , j ( l o g ( y i ) − l o g ( y j ) − ( l o g ( y i ∗ ) − l o g ( y j ∗ ) ) ) 2 \frac{1}{2n}\sum_{i=1}^n(log(y_i)-log(y_i^*)+\alpha(y,y^*))^2 \\ \frac{1}{2n^2}\sum_{i,j}(log(y_i)-log(y_j)-(log(y_i^*)-log(y_j^*)))^2 2n1i=1n(log(yi)log(yi)+α(y,y))22n21i,j(log(yi)log(yj)(log(yi)log(yj)))2
因此我计算出来的loss函数是:
1 2 ( 1 n ∑ i d i 2 − 1 n 2 ( ∑ i d i ) 2 ) \frac{1}{2}(\frac{1}{n}\sum_id_i^2-\frac{1}{n^2}(\sum_id_i)^2) 21(n1idi2n21(idi)2)
这里我就不写详细的推导过程了,详细的过程其他学习笔记中应该都有。虽然不懂为什么作者要这么组织公式,但是还是觉得奇怪吧。因为最终的结果应该没有影响,多了或少了 1 2 \frac{1}{2} 21应该影响的只是学习率而已。

接下来作者还在尺度项上加了一个系数 λ \lambda λ,这样一来,公式就变成了:
L ( y , y ∗ ) = 1 n ∑ i d i 2 − λ n 2 ( ∑ i d i ) 2 L(y,y^*) = \frac{1}{n}\sum_id_i^2-\frac{\lambda}{n^2}(\sum_id_i)^2 L(y,y)=n1idi2n2λ(idi)2
λ = 0 \lambda = 0 λ=0,得到的只是逐像素误差。
λ = 1 \lambda = 1 λ=1,得到的是尺度不变误差。
λ = 0.5 \lambda = 0.5 λ=0.5,得到的是较好的绝对尺度估计的结果。
这些应该是作者利用实验得到的结果。

实验暂时先不说了。

参考文献

[1] https://zhuanlan.zhihu.com/p/29312227
[2] https://blog.csdn.net/u014485485/article/details/78681086

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值