大体介绍
为了解决单目RGB图像的深度估计问题,本篇论文提出了一个包含残差学习的全卷积结构(fully convolutional architecture),进行端到端训练,并不需要进行像CRFs之类的后处理操作。为了能够提高输出分辨率,在神经网络中加入了上采样(up-sampling)。同时采用能由深度图中常见的值分布进行驱动的reverse Huber loss进行优化。这个模型比起现行效果很好的模型需要更少的参数和训练数据。
大体步骤为:
首先引入了一个有上采样块(up-sampling blocks)的全卷积结构进行深度估计。这个结构能够产生高分辨率的密集输出图,同时需要很少的参数和比现行很好效果的模型少一个数量级的数据训练。
然后,进一步提出了一种更有效的上卷积(up-convolutions)方案,并将其与残差学习(residual learning)的概念相结合,建立投影块(up-projection blocks),以实现feature maps的有效上采样。
并且,使用基于the reverse Huber function(berHu)的损失函数优化网络,我们深入评估了网络深度、损失函数和用于上采样的特定层的影响,以分析它们的效益。
最后,为了进一步评价我们方法的精确度,我们采用了一个三维重建场景的训练模型,其中我们使用一系列RGB帧及其预测的深度图进行同步定位和映射(SLAM)。
CNN Architecture
该网络的第一部分基于ResNet-50,并用预先训练好的权值初始化。第二部分引导网络通过一系列上池化(un-pooling)层和卷积层来学习它的up-scaling。在这些上采样块的集合之后,应用dropout并通过由产生预测的最终卷积层获得成功
①Up-Projection Blocks
使用上池化层,通过将每个entry映射到一个2x2(zero) kernel的左上角来使size加倍。(这也可以增加特征图的空间分辨率)每个上池化层后边有一个5x5的卷积层(使用ReLU激活函数),我们把这个block称之为up-convolution。经验性的,我们把四个这样的up-convolutional blocks堆叠,可以在内存消耗和分辨率之间产生很好的协调。(5个blocks进行堆叠的话效果就不好了qaq)
然后我们通过在up-convolution后加上一个3x3卷积,并且增加了一个从低分辨率特征图到结果的projection connection来创建一个up-sampling res-blocks。注意,由于尺寸的不同,需要在projection分支中使用另一个上卷积对小尺寸图进行上采样,但由于两个分支只需使用一次上池化,所以我们只需在两个分支上分别应用5×5卷积,我们把这个新的up-sampling block叫做up-projection。
②Fast Up-Convolutions
在上池化后,75%的特征映射包含零,因此下面的5×5卷积主要在零上进行,这在我们的修正公式中是可以避免的。
在左上角,原始特征图是上池化的(top middle),然后由5×5滤波器卷积。我们观察到,在上池化特征映射中,根据5×5滤波器的位置(红色、蓝色、紫色、橙色边界框),只有某些权重与潜在的非零值相乘。
这些权重分为四个不重叠的组,用不同的颜色和图中的A、B、C、D表示。根据滤波器组,我们将原来的5×5滤波器分为4个新的滤波器,分别为(A)3×3,(B)3×2,(C)2×3和(D)2×2。与原始操作(上池化和卷积)完全相同的输出现在可以通过交错四个产生的特征映射的元素来实现,如图3所示。
Loss Function
使用berHu损失函数。
实验对比
自己进行的实验结果:
ground-truth:
result: